Войти

Показать полную графическую версию : как взаимодействовать с окном при помощи его заголовка


impa
17-08-2011, 15:37
Привет!
Ни одна из функций, параметром которой явлется заголовок окна ("title"), не работает.
Во всех работающих примерах, где используются подобные функции, в качестве параметра заголовка используется конструкция вида ("[CLASS:classname]").
Функция, которая позволяет определить classname окна приложения так же обращается к этому окну посредством параметра title, т. е. не работает. Я запускаю окно браузера firefox. Окно с загруженной страницей имеет заголовок "VidMind CMS|Login - Mozilla Firefox". Когда указываешь это в качестве заголовка окна, окно не находится. То же самое я пробовал проделать с блокнотом, указывая в качестве заголовка "Untitled - Notepad". Выход я вижу в использовании classname'а firefox, но его я не знаю и нигде не могу найти. В чём здесь проблема? Нужно что-то прописать в начале скрипта для инициализации этих функций или в чём проблема может быть?



#Include <WinAPI.au3>
Opt("WinTitleMatchMode", 2)
Global $firefox, $chrome, $ie, $url1, $userName
$firefox = @ProgramFilesDir & "\Mozilla Firefox\firefox.exe"
$url1 = "https://79.125.49.183/?locale=en"
Run($firefox & " " & $url1, "", @SW_MAXIMIZE)
sleep(1000)
$hwnd=WinExists("VidMind CMS|Login - Mozilla Firefox", "")
sleep(5000)
$cname=_WinAPI_GetClassName($hwnd)
MsgBox(0, "Output", $cname)

madmasles
17-08-2011, 17:28
impa,
Библиотека для работы с FireFox (http://autoit-script.ru/index.php/topic,40.0.html).

impa
17-08-2011, 17:37
проблема не в том, чтобы обращаться к firefox
я не могу обратиться ни к одному окну любого приложения(блокнот, google chrome, image viewer)
как обращаться к окнам, используя title или как узнать classname окна любого приложения
найденные примеры не работают...

madmasles
17-08-2011, 18:52
impa,
#include (http://www.autoitscript.com/autoit3/docs/keywords.htm##include) <WinAPI.au3>
#include (http://www.autoitscript.com/autoit3/docs/keywords.htm##include) <Array.au3>

$sFileExe = @WindowsDir (http://www.autoitscript.com/autoit3/docs/macros.htm#@windowsdir) & '\notepad.exe'

$sProcess = StringRegExpReplace (http://www.autoitscript.com/autoit3/docs/functions/StringRegExpReplace.htm)($sFileExe, '^.*\\', '')
$iCount = 0
;If Not ProcessExists($sProcess) Then
Run (http://www.autoitscript.com/autoit3/docs/functions/Run.htm)($sFileExe)
;EndIf
$iPID = ProcessWait (http://www.autoitscript.com/autoit3/docs/functions/ProcessWait.htm)($sProcess, 5)
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) Not (http://www.autoitscript.com/autoit3/docs/keywords.htm#Not) $iPID Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
MsgBox (http://www.autoitscript.com/autoit3/docs/functions/MsgBox.htm)(16, 'Error', 'Error')
Exit (http://www.autoitscript.com/autoit3/docs/keywords.htm#Exit)
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)
$aList = WinList (http://www.autoitscript.com/autoit3/docs/functions/WinList.htm)()
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) Not (http://www.autoitscript.com/autoit3/docs/keywords.htm#Not) $aList[0][0] Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
MsgBox (http://www.autoitscript.com/autoit3/docs/functions/MsgBox.htm)(16, 'Error', 'Error')
Exit (http://www.autoitscript.com/autoit3/docs/keywords.htm#Exit)
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)
Dim (http://www.autoitscript.com/autoit3/docs/keywords.htm#Dim) $aResult[$aList[0][0] + 1][4]
For (http://www.autoitscript.com/autoit3/docs/keywords.htm#For) $i = 1 To (http://www.autoitscript.com/autoit3/docs/keywords.htm#To) $aList[0][0]
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) WinGetProcess (http://www.autoitscript.com/autoit3/docs/functions/WinGetProcess.htm)($aList[$i][1]) = $iPID Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
$iCount += 1
$aResult[$iCount][0] = $aList[$i][0] ;Title
$aResult[$iCount][1] = $aList[$i][1] ;Handle
$aResult[$iCount][2] = _WinAPI_GetClassName (http://dundats.mvps.org/help/html/libfunctions/_winapi_getclassname.htm)($aList[$i][1]);ClassName
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) BitAND (http://www.autoitscript.com/autoit3/docs/functions/BitAND.htm)(WinGetState (http://www.autoitscript.com/autoit3/docs/functions/WinGetState.htm)($aList[$i][1]), 2) Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
$aResult[$iCount][3] = 'visible'
Else (http://www.autoitscript.com/autoit3/docs/keywords.htm#Else)
$aResult[$iCount][3] = 'hide'
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)
Next (http://www.autoitscript.com/autoit3/docs/keywords.htm#Next)
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) $iCount Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
ReDim (http://www.autoitscript.com/autoit3/docs/keywords.htm#ReDim) $aResult[$iCount + 1][4]
$aResult[0][0] = $iCount
_ArrayDisplay (http://dundats.mvps.org/help/html/libfunctions/_arraydisplay.htm)($aResult, 'Все окна процесса ' & $sProcess)
Else (http://www.autoitscript.com/autoit3/docs/keywords.htm#Else)
MsgBox (http://www.autoitscript.com/autoit3/docs/functions/MsgBox.htm)(16, 'Error', 'Error')
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)

AZJIO
18-08-2011, 03:02
я не могу обратиться ни к одному окну любого приложения(блокнот, google chrome, image viewer) »
а такое работает? Блокнот и калькулятор...
$Class='SciCalc'
If ProcessExists('calc.exe') Then ProcessClose('calc.exe') ; закрываем калькулятор если он существует
Run('Calc')
WinWaitActive('[CLASS:'&$Class&']', '', 5) ; ждём появления
$see=WinGetTitle('[CLASS:'&$Class&']')
If Not WinExists($see) Then
MsgBox(0, 'Message', 'Окно не найдено, завершаме работу скрипта')
Exit
EndIf
MsgBox(0, 'Имя окна', $see)
MsgBox(0, 'Сообшение', 'Сворачиваем')
WinSetState('[CLASS:'&$Class&']', '', @SW_MINIMIZE)
MsgBox(0, 'Сообшение', 'Разворачиваем')
WinSetState('[CLASS:'&$Class&']', '', @SW_RESTORE)
MsgBox(0, 'Сообшение', 'Изменяем координаты')
WinMove('[CLASS:'&$Class&']', '', 0, Default, 800, Default) ; перемещаем калькулятор вправо, делаем его выше
MsgBox(0, 'Сообшение', 'Перемещаем кнопку')
ControlMove('[CLASS:'&$Class&']', '', '[CLASS:Button; INSTANCE:24]', 385, 38, 62, 34)
MsgBox(0, 'Сообшение', 'Вставляем текст 345')
ControlSetText('[CLASS:'&$Class&']', '', '[CLASS:Edit; INSTANCE:1]', '345')
MsgBox(0, 'Сообшение', 'Деактивируем кнопки')
For $i = 1 to 27
ControlDisable('[CLASS:SciCalc]', '', '[CLASS:Button; INSTANCE:'&$i&']')
Next
MsgBox(0, 'Сообшение', 'Изменяем заголовок')
WinSetTitle('[CLASS:'&$Class&']', '', 'Новый заголовок окна')
MsgBox(0, 'Сообшение', 'Изменяем прозрачность')
WinSetTrans('[CLASS:'&$Class&']', '', 170)
MsgBox(0, 'Сообшение', 'Помигаем в панели задач')
WinFlash('[CLASS:'&$Class&']', '', 9, 200)
; ControlEnable('[CLASS:SciCalc]', '', '[CLASS:Button; INSTANCE:24]')

$Class='Notepad'
If ProcessExists('Notepad.exe') Then ProcessClose('Notepad.exe')
Run('Notepad')
WinWaitActive('[CLASS:'&$Class&']', '', 5) ; ждём появления
$see=WinGetTitle('[CLASS:'&$Class&']')
If Not WinExists($see) Then
MsgBox(0, 'Message', 'Окно не найдено, завершаме работу скрипта')
Exit
EndIf
MsgBox(0, 'Имя окна', $see)

MsgBox(0, 'Сообшение', 'Сворачиваем')
WinSetState('[CLASS:'&$Class&']', '', @SW_MINIMIZE)
MsgBox(0, 'Сообшение', 'Разворачиваем')
WinSetState('[CLASS:'&$Class&']', '', @SW_RESTORE)
MsgBox(0, 'Сообшение', 'Изменяем координаты')
WinMove('[CLASS:'&$Class&']', '', 0, Default, 800, Default)
MsgBox(0, 'Сообшение', 'Вставляем текст')
ControlSetText('[CLASS:'&$Class&']', '', '[CLASS:Edit; INSTANCE:1]', 'Ну работает же')
MsgBox(0, 'Сообшение', 'Деактивируем')
ControlDisable('[CLASS:'&$Class&']', '', '[CLASS:Edit; INSTANCE:1]')
MsgBox(0, 'Сообшение', 'Изменяем заголовок')
WinSetTitle('[CLASS:'&$Class&']', '', 'Новый заголовок окна')
MsgBox(0, 'Сообшение', 'Изменяем прозрачность')
WinSetTrans('[CLASS:'&$Class&']', '', 170)
MsgBox(0, 'Сообшение', 'Помигаем в панели задач')
WinFlash('[CLASS:'&$Class&']', '', 9, 200)

madmasles
18-08-2011, 10:13
impa,
Эта строка у Вас неправильная:$hwnd = WinExists (http://www.autoitscript.com/autoit3/docs/functions/WinExists.htm)("VidMind CMS|Login - Mozilla Firefox", "")Эта функция возвращает 1 (есть окно) или 0 (нет окна). Попробуйте заменить ее на$hwnd = WinWait (http://www.autoitscript.com/autoit3/docs/functions/WinWait.htm)("VidMind CMS|Login - Mozilla Firefox")
;или на
$hwnd = WinWaitActive (http://www.autoitscript.com/autoit3/docs/functions/WinWaitActive.htm)("VidMind CMS|Login - Mozilla Firefox")




© OSzone.net 2001-2012