Что нового

Правый щелчок мыши на окне, по значению хэндла

lixar21

Новичок
Сообщения
70
Репутация
0
Добрый вечер.

Подскажите - как в автоите выполнить правый щелчок мыши на окне, если известны только его хэндлы ?

Через функцию _WinAPI_EnumProcessWindows - получен следующий список хэндлов относящихся к данному процессу (интересует первый хэндл 0x000000000010484):
 

Вложения

  • скриншот.jpg
    скриншот.jpg
    43.2 КБ · Просмотры: 13

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
Код:
Local $hw = WinActivate(Здесь дескриптор окна)
If $hw Then ControlClick($hw,'','','right')

Дескриптор нужно получать всякий раз, когда окно запускается, так как дескриптор меняется
 
Автор
L

lixar21

Новичок
Сообщения
70
Репутация
0
joiner , что-то не работает.

Код:
Local $hw = WinActivate(0x000000000010496)
If $hw Then ControlClick($hw,'','','right')

Выполняю скрипт - ничего не происходит.
Использую другой хэндл 0x000000000010484 тоже ничего не происходит.

то же самое для кода:
Код:
Local $hw = WinActivate(000000000010496)
If $hw Then ControlClick($hw,'','','right')


Проверял перед запуском скрипта - хэндлы процесса с помощью _WinAPI_EnumProcessWindows.
Они именно такие как в коде.
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
lixar21
Код:
#include <WinAPIProc.au3>
$iPID = Run("notepad.exe")
Local $aHWnd = _WinAPI_EnumProcessWindows($iPID)
Local $hWnd = WinActivate($aHWnd[1][0])
If $hWnd Then ControlClick($hWnd,'','','right')
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
lixar21
я же ясно написал
joiner [?]
Дескриптор нужно получать всякий раз, когда окно запускается, так как дескриптор меняется
Решил, что поймешь, ан нет, оказалось.
Нужно переходить к чтению справки и к изучению работы операционной системы
Не обижайся, но без этого никуда
 
Автор
L

lixar21

Новичок
Сообщения
70
Репутация
0
Garrett , не работает.

Запускаю ваш скрипт.
Код:
#include <WinAPIProc.au3>
$iPID = Run("C:\7\3\3.exe")
Local $aHWnd = _WinAPI_EnumProcessWindows($iPID)
Local $hWnd = WinActivate($aHWnd[1][0])
If $hWnd Then ControlClick($hWnd,'','','right')


Выдает ошибку: "Error: Subscript used on non-accessible variable"
 

Вложения

  • скриншот.jpg
    скриншот.jpg
    25.6 КБ · Просмотры: 5

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
lixar21
Что за программа?
 
Автор
L

lixar21

Новичок
Сообщения
70
Репутация
0
Garrett , программа не имеет названия окна - только название процесса.
 

Вложения

  • 3.rar
    93.4 КБ · Просмотры: 5
A

Alofa

Гость
lixar21 сказал(а):
... программа не имеет названия окна...
Скорее всего консольное ПО. А окно создается из ресурсов "AlphaForms.dll" (к сожалению не могу проверить)

Код:
If Not Run("3.exe") Then Exit 2
$hWnd = WinWaitActive('[REGEXPCLASS:WindowsForms\d\d.Window.\d.app.+]', '', 5)
If Not $hWnd Then Exit 3
ControlClick($hWnd, '', '', 'right')
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Код:
#include <WinAPIProc.au3>

$iPID = Run("X:\folder\3.exe")
Sleep(250)
Local $aHWnd = _WinAPI_EnumProcessWindows($iPID)
Local $hWnd = WinActivate($aHWnd[1][0])
If $hWnd Then
   MouseClick('right', 200/2, 110/2)
EndIf
Sleep(3000)
ProcessClose($iPID)
 
Автор
L

lixar21

Новичок
Сообщения
70
Репутация
0
Alofa, код не работает.

Запускаю ваш скрипт - ничего не происходит.



Добавлено:
Сообщение автоматически объединено:

Garrett, запускаю ваш скрипт и происходит следующее:

Открывается программа 3.exe
Затем курсор - ползет в левый верхний угол рабочего стола и щелкает по пустому месту - правой кнопкой мыши...
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
Может так ?
Код:
#include <WinAPIProc.au3>

$iPID = Run("X:\folder\3.exe")
Sleep(250)
Local $aHWnd = _WinAPI_EnumProcessWindows($iPID)
Local $hWnd = WinActivate($aHWnd[1][0])
If $hWnd Then
	;Получить координаты окна
	$aPos = WinGetPos($hWnd)
	;Клик в центр окна
	MouseClick('right', $aPos[0] + $aPos[2] / 2, $aPos[1] + $aPos[3] / 2)
EndIf
Sleep(3000)
ProcessClose($iPID)
 
Верх