Что нового

Активировать окно русской справки по хэнделу

AZJIO

Меценат
Меценат
Сообщения
2,874
Репутация
1,194
Хочу сделать скрипт чтобы активировать окно справки. Если сделать по имени окна, то эксплорер тоже может иметь такое же имя, нужно активировать по хенделу.

Код:
#include <Array.au3>

If $CmdLine[0]>1 Then
	Opt("WinTextMatchMode", 3) ; точный поиск окна
	Opt("WinTextMatchMode", 2) ; быстрый режим
	$sAutoIt_Path = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\AutoIt v3\AutoIt", "InstallDir")
	; в ком-строке параметром 1-3 вызываем соответствующую справку
	Switch $CmdLine[2]
		Case 1
			_call('AutoIt', 'AutoIt3.chm')
		Case 2
			_call('AutoIt Help', 'AutoIt3_EN.chm')
		Case 3
			_call('AutoIt UDFs Help', 'UDFs3.chm')
	EndSwitch
	ClipPut ( $CmdLine[1] ) ; отправляем в буфер
	Send("^+{LEFT}") ; выделяем
	Send("{BACKSPACE}") ; очищаем
	Send("+{ins}") ; вставляем из буфера
	Send("{ENTER}")
Else
	MsgBox(0, "Ошибка", "Выделите текст, который требуется отправить в справку")
EndIf

Func _call($Win, $name)
;$Win = WinGetHandle($Win)
;MsgBox(0, 'Message', $Win&@CRLF&$name)
$WinR='[TITLE:'&$Win&';CLASS:HH Parent]'
$Handle=''
$AllWindows = WinList('[REGEXPTITLE:AutoIt*;CLASS:HH Parent]')
;_ArrayDisplay( $AllWindows, "Смотрим текущий массив" )
For $i = 1 To $AllWindows[0][0]
	If $AllWindows[$i][0]=$Win Then
		$Handle=WinGetHandle($AllWindows[$i][0])
		;MsgBox(0, 'Message', $AllWindows[$i][0]&@CRLF&$Win&@CRLF&$Handle)
	EndIf
Next


If $Handle<>'' Then $WinR=$Handle

;MsgBox(0, 'Message', $WinR)

;While WinExists($WinR) And WinGetTitle($WinR)<>$Win
;	WinClose($WinR)
;WEnd
	;If WinExists($WinR) And WinGetTitle($WinR)=$Win Then
	If WinExists($WinR) Then
		WinActivate($WinR)
	Else
		ShellExecute($sAutoIt_Path&'\'&$name)
	EndIf
	WinWaitActive($WinR)
	; Если справка открыта на другой вкладке, то выполняем переключение на вкладку "Указатель"
	If WinExists($WinR, '&Добавить') Then Send("^+{TAB 2}")
	If WinExists($WinR, 'Пред&ыдущий поиск') Then Send("^+{TAB}")
	If WinExists($WinR, 'В&ыберите раздел для вывода:') Then Send("^+{TAB}")
	If Not WinExists($WinR, 'Вв&едите ключевое слово для поиска:') Then Send("^{TAB}")
EndFunc  ;==>_addses
 

snoitaleR

AutoIT Гуру
Сообщения
855
Репутация
223
AZJIO
Посмотри вот эту тему...
Мне нужно было изменить размеры окна, но я в него не попадал...
 
Автор
A

AZJIO

Меценат
Меценат
Сообщения
2,874
Репутация
1,194
snoitaleR
Спасибо, помогло.

Обновил пример, в котором теперь не работает "точное сопоставление" Opt("WinTextMatchMode", 3). То есть вопрос остался тем же, решение работает но не при всех условиях.
В функцию передаются параметры окна, но если закрыть одну из справок, то скрипт открывает активизирует другое окно справки, хотя в параметре функции точно указано имя окна [TITLE:AutoIt;CLASS:HH Parent], а вместо него активизируется [TITLE:AutoIt UDFs Help;CLASS:HH Parent].
Для теста стартовать скрипт так:
C:\Program Files\AutoIt3\AutoIt3.exe HELP_AutoIt3.au3 MsgBox 1
т.о. скрипту передаётся слово для открытия его в справке.

Может ли пробел в имени окна '[TITLE:AutoIt UDFs Help;CLASS:HH Parent]' влиять на неспособность WinExists определить точное имя?

Даже получив точный хэндл из массива невозможно открыть окно русской справки, в то время как англ. справка и UDF-справка открываются по хэндл.
 
Верх