Что нового

Функция WinWaitActive. Ожидание окна с разным языком интерфейса.

rafzak

Новичок
Сообщения
27
Репутация
1
Здравствуйте. Подскажите как можно унифицировать скрипт для примера этот:

Код:
Run("rundll32.exe shell32.dll,Control_RunDLL inetcpl.cpl,,4")
WinWaitActive("Свойства: Интернет","")
ControlClick('Свойства: Интернет','','Button10')
WinWaitActive("Настройка параметров локальной сети","")
ControlClick('Настройка параметров локальной сети','','Button6')


в случае, если его надо будет запускать на Win7 c разными языками интерфейса.

сорри за оффтоп:
OffTopic:
Есть ли отдельная тема, где можно просто задать вопрос какая функция нужна?
 

ynbIpb

Скриптер
Сообщения
399
Репутация
110
rafzak, тогда можно использовать WinList в цикле, и также в цикле перебирать в полученном списке заголовки, сравнивая их с заготовленным списком возможных.
 
Автор
R

rafzak

Новичок
Сообщения
27
Репутация
1
А может прокатить такой вариант?:
Код:
Run("rundll32.exe shell32.dll,Control_RunDLL inetcpl.cpl,,4")
Sleep(1000) ; - дадим задержку на начало открытия окна
WinWaitActive("[ACTIVE]", "") ; - будет ли работать это ожидание для нужного мне окна, или если комп слабый дать задержку выше побольше?
ControlClick('','','Button10')
Sleep(1000)
WinWaitActive("[ACTIVE]", "")
ControlClick('','','Button6')


Скрипт без указания окон вроде работает, подскажите, сильно ли он уязвим, или приемлим?
Есть ли варианты?
(То, что я показал этот пример, это просто для понимания способа обхода, мультиязычных версий - в принципе не хотелось бы отслеживать название окна на разных языках, да и ID во многих окнах Windows не получить)
Спасибо
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
rafzak,
Попробуйте так.
Код:
Global $hWin, $iPID, $aList, $hTemp

$iPID = Run('rundll32.exe shell32.dll,Control_RunDLL inetcpl.cpl,,4')
If Not $iPID Then Exit 1
$hTemp = WinWait('[Class:#32770]', '', 1)
If $hTemp And BitAND(WinGetState($hTemp), 2) And WinGetProcess($hTemp) = $iPID Then
	$hWin = $hTemp
	$hTemp = 0
Else
	$aList = WinList('[Class:#32770]')
	If Not $aList[0][0] Then Exit 2
	For $i = 1 To $aList[0][0]
		If BitAND(WinGetState($aList[$i][1]), 2) And WinGetProcess($aList[$i][1]) = $iPID Then
			$hWin = $aList[$i][1]
			ExitLoop
		EndIf
	Next
EndIf
If Not $hWin Then Exit 3
MsgBox(64, 'Info', 'Search window title: ' & WinGetTitle($aList[$i][1]))
ControlClick($hWin, '', '[CLASS:Button; INSTANCE:10]')
Поправил код.


Добавлено:
Сообщение автоматически объединено:

rafzak,
[info border=#0000ff float=left]На форуме принято помечать тему решенной после получения ответа на свой вопрос!
Вверху или внизу темы нажмите на ссылку такого вида:
package_old.gif
Тема не решена
[/info]
 
Автор
R

rafzak

Новичок
Сообщения
27
Репутация
1
madmasles
Если Вы настаиваете, на этом, я могу отметить тему решенной, хотя было бы неплохо, если есть ещё варианты...
Класс Class:#32770 для всей настройки inetcpl.cpl в любых окнах этой панели.

Использую вариант с WinWaitActive("[ACTIVE]", ""), вроде всё работает - тему закрываю
 
Верх