как взаимодействовать с окном при помощи его заголовка

Ответить
Аватара пользователя
impa

как взаимодействовать с окном при помощи его заголовка

Сообщение impa »

Привет!

Ни одна из функций, параметром которой явлется заголовок окна ("title"), не работает.

Во всех работающих примерах, где используются подобные функции, в качестве параметра заголовка используется конструкция вида ("[CLASS:classname]").

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







#Include

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)
Аватара пользователя
impa

Re: как взаимодействовать с окном при помощи его заголовка

Сообщение impa »

проблема не в том, чтобы обращаться к firefox

я не могу обратиться ни к одному окну любого приложения(блокнот, google chrome, image viewer)

как обращаться к окнам, используя title или как узнать classname окна любого приложения

найденные примеры не работают...
Аватара пользователя
madmasles

Re: как взаимодействовать с окном при помощи его заголовка

Сообщение madmasles »

impa,



Код:

Код: Выделить всё

#include 
#include 
$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

Re: как взаимодействовать с окном при помощи его заголовка

Сообщение AZJIO »

Цитата 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

Re: как взаимодействовать с окном при помощи его заголовка

Сообщение madmasles »

impa,

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

Код:

Код: Выделить всё

$hwnd = WinExists("VidMind CMS|Login - Mozilla Firefox", "")

Эта функция возвращает 1 (есть окно) или 0 (нет окна). Попробуйте заменить ее на

Код:

Код: Выделить всё

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

Вернуться в «AutoIt»