Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » как взаимодействовать с окном при помощи его заголовка

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

Новый участник


Сообщения: 2
Благодарности: 0

Профиль | Отправить PM | Цитировать


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

Отправлено: 15:37, 17-08-2011

 

Аватара для madmasles

Ветеран


Сообщения: 812
Благодарности: 353

Профиль | Отправить PM | Цитировать


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

Отправлено: 17:28, 17-08-2011 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Новый участник


Сообщения: 2
Благодарности: 0

Профиль | Отправить PM | Цитировать


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

Отправлено: 17:37, 17-08-2011 | #3


Аватара для madmasles

Ветеран


Сообщения: 812
Благодарности: 353

Профиль | Отправить PM | Цитировать


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

Последний раз редактировалось madmasles, 17-08-2011 в 18:58.


Отправлено: 18:52, 17-08-2011 | #4


Аватара для AZJIO

Старожил


Сообщения: 254
Благодарности: 126

Профиль | Отправить PM | Цитировать


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

Отправлено: 03:02, 18-08-2011 | #5


Аватара для madmasles

Ветеран


Сообщения: 812
Благодарности: 353

Профиль | Отправить PM | Цитировать


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

Отправлено: 10:13, 18-08-2011 | #6



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » как взаимодействовать с окном при помощи его заголовка

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
VBS/WSH/JS - Как скрыть меню заголовка в .vbs? Deep2007 Скриптовые языки администрирования Windows 3 31-03-2011 14:44
Разное - смещение заголовка и элементов управления окном ruslan-k Оформление Windows XP 1 08-03-2011 06:46
[решено] Как просматривать ресурсы при помощи AutoIt Pavluha AutoIt 27 05-03-2011 16:20
Интерфейс - Затемнение панели задач и заголовка окна, при развертывании на весь экран. amzir Microsoft Windows 7 5 01-10-2009 18:16
как записать звуковой файл при помощи микрофона. peskov Хочу все знать 10 10-04-2003 19:29




 
Переход