Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   как взаимодействовать с окном при помощи его заголовка (http://forum.oszone.net/showthread.php?t=213472)

impa 17-08-2011 15:37 1733852

как взаимодействовать с окном при помощи его заголовка
 
Привет!
Ни одна из функций, параметром которой явлется заголовок окна ("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 1733980

impa,
Библиотека для работы с FireFox.

impa 17-08-2011 17:37 1733989

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

madmasles 17-08-2011 18:52 1734035

impa,
Код:

#include <WinAPI.au3>
#include <Array.au3>

$sFileExe = @WindowsDir & '\notepad.exe'

$sProcess = StringRegExpReplace($sFileExe, '^.*\\', '')
$iCount = 0
;If Not ProcessExists($sProcess) Then
    Run($sFileExe)
;EndIf
$iPID = ProcessWait($sProcess, 5)
If Not $iPID Then
    MsgBox(16, 'Error', 'Error')
    Exit
EndIf
$aList = WinList()
If Not $aList[0][0] Then
    MsgBox(16, 'Error', 'Error')
    Exit
EndIf
Dim $aResult[$aList[0][0] + 1][4]
For $i = 1 To $aList[0][0]
    If WinGetProcess($aList[$i][1]) = $iPID Then
        $iCount += 1
        $aResult[$iCount][0] = $aList[$i][0] ;Title
        $aResult[$iCount][1] = $aList[$i][1] ;Handle
        $aResult[$iCount][2] = _WinAPI_GetClassName($aList[$i][1]);ClassName
        If BitAND(WinGetState($aList[$i][1]), 2) Then
            $aResult[$iCount][3] = 'visible'
        Else
            $aResult[$iCount][3] = 'hide'
        EndIf
    EndIf
Next
If $iCount Then
    ReDim $aResult[$iCount + 1][4]
    $aResult[0][0] = $iCount
    _ArrayDisplay($aResult, 'Все окна процесса ' & $sProcess)
Else
    MsgBox(16, 'Error', 'Error')
EndIf


AZJIO 18-08-2011 03:02 1734247

Цитата:

Цитата impa
я не могу обратиться ни к одному окну любого приложения(блокнот, 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 1734339

impa,
Эта строка у Вас неправильная:
Код:

$hwnd = WinExists("VidMind CMS|Login - Mozilla Firefox", "")
Эта функция возвращает 1 (есть окно) или 0 (нет окна). Попробуйте заменить ее на
Код:

$hwnd = WinWait("VidMind CMS|Login - Mozilla Firefox")
;или на
$hwnd = WinWaitActive("VidMind CMS|Login - Mozilla Firefox")



Время: 11:33.

Время: 11:33.
© OSzone.net 2001-