Что нового

Не получается кликать по ControlClick

tryinfinity

Новичок
Сообщения
40
Репутация
0
Доброго дня!
Задача кликать в конкретное окно (окна).
Нахожу Handle нужного окна
Код:
$hWnd1 = WinGetTitle(GetHandle('Project1.exe'));
Func GetHandle($sProcess)
    Local $iEnum = _WinAPI_EnumProcessWindows(ProcessExists($sProcess))
    If (@error) Or (Not IsArray($iEnum)) Then
        Return 0
    EndIf
    Return $iEnum[1][0]
EndFunc

Далее пытаюсь кликнуть в заданное окно
Код:
WinActivate($hWnd1)
ControlClick ($hWnd1, "", "", "left", 1,438,375)

Ничего не происходит. CLASS не могу найти, т.к. AutoIt Windows Info его не определят. По идеи должно делать выбор активного окна, но этого не происходит.
Пользуясь случаем, еще хочу спросить, подойдет ли ControlClick для прокликивания нескольких окон в цикле?
Примерно так:
Код:
While 1
ControlClick ($hWnd1, "", "", "left", 1,438,375)
sleep(1)
ControlClick ($hWnd1, "", "", "left", 1,438+20,375)
sleep(1)
ControlClick ($hWnd1, "", "", "left", 1,438+40,375)
sleep(1)
ControlClick ($hWnd2, "", "", "left", 1,438,375)
sleep(1)
ControlClick ($hWnd2, "", "", "left", 1,438+20,375)
sleep(1)
ControlClick ($hWnd2, "", "", "left", 1,438+40,375)
sleep(1)
ControlClick ($hWnd3, "", "", "left", 1,438,375)
sleep(1)
ControlClick ($hWnd3, "", "", "left", 1,438+20,375)
sleep(1)
ControlClick ($hWnd3, "", "", "left", 1,438+40,375)
sleep(1)
WEnd
 
A

Alofa

Гость
tryinfinity сказал(а):
... Нахожу Handle нужного окна ...
Неа, вы находите заголовок окна через его дескриптор. Зачем?
Код:
#include <WinAPIProc.au3> 

$hWnd1 = GetHandle('Project1.exe')
If @error Then Exit MsgBox(4096+16, 'Внимание!', 'Окно не найдено!') ; <<<<<<<<<< П Р О В Е Р К А >>>>>>>>>>

Func GetHandle($sProcess)
    Local $iEnum = _WinAPI_EnumProcessWindows(ProcessExists($sProcess))
    If (@error) Or (Not IsArray($iEnum)) Then Return SetError(1, 0, 0)
    Return $iEnum[1][0]
EndFunc


tryinfinity сказал(а):
... Далее пытаюсь кликнуть в заданное окно
Код:
WinActivate($hWnd1)
ControlClick ($hWnd1, "", "", "left", 1,438,375)
Последние два параметра функции ControlClick() - это координаты X/Y для клика внутри элемента, относительно левого верхнего угла элемента. Не думаю что у вас такие большие элементы окна.

tryinfinity сказал(а):
... CLASS не могу найти, т.к. AutoIt Windows Info его не определят.
Это что за такое уникальное окно у вас?
Дайте Лог AutoIt Windows Info (вкладка "Summary").
 
Автор
T

tryinfinity

Новичок
Сообщения
40
Репутация
0
>>Неа, вы находите заголовок окна через его дескриптор. Зачем?
У меня окон будет запускаться несколько, различия только по имени запускаемого процесса, поэтому и сделал поиск по процессу.

>>Последние два параметра функции ControlClick() - это координаты X/Y для клика внутри элемента, относительно левого верхнего угла элемента. Не думаю что у вас такие большие элементы окна.
Внутренний размер окна 860*460. Ну тут сразу же возник вопрос) Как тогда отлавливать координаты нужного пикселя, относительно окна а не всего экрана? Ведь утилиты типа ColorMania ловят именно весь экран.

>>Дайте Лог AutoIt Windows Info (вкладка "Summary").
>>>> Window <<<<
Title: Project1
Class: GxWindowClass
Position: 0, 0
Size: 876, 498
Style: 0x16CF0000
ExStyle: 0x00040100
Handle: 0x00060A46

>>>> Control <<<<
Class:
Instance:
ClassnameNN:
Name:
Advanced (Class):
ID:
Text:
Position:
Size:
ControlClick Coords:
Style:
ExStyle:
Handle:

>>>> Mouse <<<<
Position: 429, 340
Cursor ID: 0
Color: 0x280400

>>>> StatusBar <<<<

>>>> ToolsBar <<<<

>>>> Visible Text <<<<


>>>> Hidden Text <<<<
 
A

Alofa

Гость
tryinfinity сказал(а):
... поэтому и сделал поиск по процессу.
Я вам не про это толковал. Посмотрите что делается в этой строке вашего кода:
Код:
$hWnd1 = WinGetTitle(GetHandle('Project1.exe'));

Функция GetHandle() должна вернуть вам дескриптор первого найденого окна процесса, после чего вы применяете WinGetTitle(). В итоге переменной $hWnd1 присваиваивается значение заголовка окна. Зачем этот огород?

Утилита AutoIt Window Information имеет перекрестие Finder Tool - схватите его мышкой и наведите на нужный элемент окна.
Что за программа-то?
 
Автор
T

tryinfinity

Новичок
Сообщения
40
Репутация
0
>>схватите его мышкой и наведите на нужный элемент окна.
Так и делал, прога - клиент игры World of Warcraft
 
Верх