Ух, отцы.. :IL_AutoIt_1:
Вообщем, задался я целью посылать клики в world of warcraft не имея его активно )
( пока правда он имеет меня )) )
Цель - написать простенький авторег персонажей. Я та его написал, но со всеми минусами автоита - ака активное окно, похищение мышки, и так далее...
Полез читать как сделать клик через ддлкалл.
Нашел единственную UDF для этих целей - MouseClickPlus
Но .. Не знаю как в других играх, в вовке получается так :
Клик проходит ( даже на неактивное окно ) только под указателем мышки, игнорируя отсылаемые координаты.
Тоесть
Кликнет только под курсором мышки, хотя работает даже без забора фокуса ( уже что-то ) .
Видимо теперь нужно как то отослать фейковый указатель на заданные координаты?
Погуглил mouse_event Function у мелкомягких, только пока не пойму как пользоватцо тем что нашел, и может быть есть альтернатива?
Вообщем резюмирую : нужен моусклик черед ддлл, или же , вариант 2 , моус мове через длл, или вариант 3 - фейктовый мув мышки ( ака обмануть игру )
П.С
Сама удф ниже
Да кстати может просто
Нерабочее?
Вообщем, задался я целью посылать клики в world of warcraft не имея его активно )
( пока правда он имеет меня )) )
Цель - написать простенький авторег персонажей. Я та его написал, но со всеми минусами автоита - ака активное окно, похищение мышки, и так далее...
Полез читать как сделать клик через ддлкалл.
Нашел единственную UDF для этих целей - MouseClickPlus
Но .. Не знаю как в других играх, в вовке получается так :
Клик проходит ( даже на неактивное окно ) только под указателем мышки, игнорируя отсылаемые координаты.
Тоесть
Код:
_MouseClickPlus($hWnd, "Left", 399, 319, 2)
Видимо теперь нужно как то отослать фейковый указатель на заданные координаты?
Погуглил mouse_event Function у мелкомягких, только пока не пойму как пользоватцо тем что нашел, и может быть есть альтернатива?
Вообщем резюмирую : нужен моусклик черед ддлл, или же , вариант 2 , моус мове через длл, или вариант 3 - фейктовый мув мышки ( ака обмануть игру )
Код:
VOID WINAPI mouse_event(
__in DWORD dwFlags,
__in DWORD dx,
__in DWORD dy,
__in DWORD dwData,
__in ULONG_PTR dwExtraInfo
);
П.С
Сама удф ниже
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", $WM_MOUSEMOVE, _
"int", 0, _
"long", _MakeLong(Number($X), Number($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
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", $WM_MOUSEMOVE, _
"int", 0, _
"long", _MakeLong(Number($X), Number($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
Да кстати может просто
Код:
DllCall("user32.dll", "int", "SendMessage", _
"hwnd", WinGetHandle( $Window ), _
"int", $WM_MOUSEMOVE, _
"int", 0, _
"long", _MakeLong(Number($X), Number($Y)))