Что нового

Автоматизация кликов в неактивном окне

Vincent

Новичок
Сообщения
5
Репутация
0
Нужно кликать мышкой в неактивном окне в нужных координатах. Полазил по форуму, задачу понял так:

Код:
$hWnd1 = WinGetHandle('W.o.T Client')
ControlClick("$hWnd1","","","","10","550","60")


Скрипт выполнется без ошибок, но курсор не меняет места и не кликает, подскажие в чем ошибка.
 

lirikmel

Продвинутый
Сообщения
226
Репутация
84
Код:
$hWnd1 = WinGetHandle('W.o.T Client')
ControlClick($hWnd1,"","","","10","550","60")
 
Автор
V

Vincent

Новичок
Сообщения
5
Репутация
0
Нет, снова ничего не происходит. Может я нправильно окно выбираю?
Вот свойства:

>>>> Window <<<<
Title: W.o.T. Client
Class: App
Position: 167, -16
Size: 1032, 780
Style: 0x14CF0000
ExStyle: 0x00000100
Handle: 0x001B025E

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

>>>> Mouse <<<<
Position: 735, 277
Cursor ID: 0
Color: 0x251F17

>>>> StatusBar <<<<
>>>> ToolsBar <<<<
>>>> Visible Text <<<<
>>>> Hidden Text <<<<
 

`p r o x y

«Улыбайтесь, господа!»
Команда форума
Глобальный модератор
Сообщения
596
Репутация
157
Функция ControlClick осуществляет клик по указанному элементу GUI определенного окна. В первом параметре у вас осуществляется передача handle-а окно. А где указывается на какой элемент GUI кликать?
 
Автор
V

Vincent

Новичок
Сообщения
5
Репутация
0
GUI если я правильно понял это клавиши управления программой? В игре я незнаю как это узнать... Каким оператором тогда нажимать в нужную точку?
 

Viktor217

Осваивающий
Сообщения
233
Репутация
31
Vincent сказал(а):
GUI если я правильно понял это клавиши управления программой? В игре я незнаю как это узнать... Каким оператором тогда нажимать в нужную точку?
Нет, GUI - пользовательский интерфейс, само окошко, грубо говоря(=
 
Автор
V

Vincent

Новичок
Сообщения
5
Репутация
0
Если ControlClick нажимает элементы окна, то какой оператор нажимает в указанную точку неактивного окна приложения?
 

`p r o x y

«Улыбайтесь, господа!»
Команда форума
Глобальный модератор
Сообщения
596
Репутация
157
GUI - это пользовательский графический интерфейс: окна, панельки, менюшки и т.д.

Управляющие элементы GUI – это элементы, которые находятся внутри окна: кнопки, текстовые поля, надписи, списки и т.д.

Функции ControlClick и подобные работают с управляющими элементами GUI, которые созданы с помощью WinApi. А в играх, как правило, все управляющие элементы GUI (кнопочки, списки и т.д.) рисуются с помощью графических библиотек. Т.е. представляют собой совсем другие элементы управления, работать с которыми стандартными функциями не получится. Ввиду того, что в каждой игре все будет индивидуальное – общего решения нет. В этом случае применяются другие технологии, самая популярная – поиск нужных точек по заданному цвету в окне игры и на основании анализа, выполнение необходимые действия действий.

Для Web-игр, которые полностью работают через браузер и не используют Flash, можно выполнять действия с помощью UDF функций _IE*.

Обобщаю: в зависимости от типа игры, браузерная или видео игра: либо работать с DOM сайта игры через IE, либо искать точки и кликать.
 

`p r o x y

«Улыбайтесь, господа!»
Команда форума
Глобальный модератор
Сообщения
596
Репутация
157
Vincent [?]
Если ControlClick нажимает элементы окна, то какой оператор нажимает в указанную точку неактивного окна приложения?
1. Не поленитесь, прочтите справку.
2. Используйте поиск. Это тема обсуждалась миллионы раз.
 

lirikmel

Продвинутый
Сообщения
226
Репутация
84
можешь использовать вот эту udf ...поидее должен работать клик даже в свернутом окне ...


Код:
;===============================================================================

;
; Function Name: _MouseClickPlus()
; Version added: 0.1
; Description: Sends a click to window
; minimized.
; Parameter(s): $Window = Title of the window to send click to
; $Button = "left" or "right" mouse button
; $X = X coordinate
; $Y = Y coordinate
; $Clicks = Number of clicks to send
; Remarks: You MUST be in "MouseCoordMode" 0 to use this without bugs.
; Author(s): Insolence <[email protected]>
;
;===============================================================================

Func _MouseClickPlus($Window, $Button = "left", $X = "", $Y = "", $Clicks = 1)
Local $MK_LBUTTON = 0x0001
Local $WM_LBUTTONDOWN = 0x0201
Local $WM_LBUTTONUP = 0x0202

Local $MK_RBUTTON = 0x0002
Local $WM_RBUTTONDOWN = 0x0204
Local $WM_RBUTTONUP = 0x0205

Local $WM_MOUSEMOVE = 0x0200

Local $i = 0

Select
Case $Button = "left"
$Button = $MK_LBUTTON
$ButtonDown = $WM_LBUTTONDOWN
$ButtonUp = $WM_LBUTTONUP
Case $Button = "right"
$Button = $MK_RBUTTON
$ButtonDown = $WM_RBUTTONDOWN
$ButtonUp = $WM_RBUTTONUP
EndSelect

If $X = "" OR $Y = "" Then
$MouseCoord = MouseGetPos()
$X = $MouseCoord[0]
$Y = $MouseCoord[1]
EndIf

For $i = 1 to $Clicks
DllCall("user32.dll", "int", "SendMessage", "hwnd", WinGetHandle($Window), "int", $WM_MOUSEMOVE, "int", 0, "long", _MakeLong($X, $Y))

DllCall("user32.dll", "int", "SendMessage", "hwnd", WinGetHandle($Window), "int", $ButtonDown, "int", $Button, "long", _MakeLong($X, $Y))

DllCall("user32.dll", "int", "SendMessage", "hwnd", WinGetHandle($Window), "int", $ButtonUp, "int", $Button, "long", _MakeLong($X, $Y))
Next
EndFunc

Func _MakeLong($LoWord,$HiWord)
Return BitOR($HiWord * 0x10000, BitAND($LoWord, 0xFFFF))
EndFunc
 

SUN-CHA

Новичок
Сообщения
8
Репутация
2
у меня такой вопрос:
мне нужно запустить несколько программ и кликнуть в паре мест при НЕ активном пользователе! То есть например я под учёткой пользователя и настроен автозапуск чего-либо из под уч.записи администратора если раорвало сеть. Получается что нельзя использовать send Control и иже с ним, а нужно пользовать dllcall и инъекции??? так?
 
Верх