Показать полную графическую версию : движения мыши и передача процессу
Версия AutoIt: 3.3
Описание:
необходимо написать код,который будет
1. перехватывает движение мыши
2. меняет на свои значения
3. передает процессу "1.ехе"
Примечания:
проблема в том что MouseMove в этом процессе(1.ехе) не работает.
Перехват- определение движения мыши раньше других процессов. и не дать другим процессам ПОЛУЧИТЬ ИСТИННЫЕ координанты мыши.
проще гоовря- процес 1.ехе перехвтывает координаты мыши движется к ним и возвращает координаты 0,0 .(к примеру) для всех остальных .
а мне надо перехватить значение движения мыши ДО процесса 1.ехе изменить их и передать уже дальше измененные для процесса 1.ехе
КАким образом передавать- не знаю. ...
бытует мнение что не плохо бы изменить users32.dll от куда скорее всего 1.ехе и считывает координаты
возможно что процесс сам получает данные из users32.dll, может просто менять значение в этой длл-ки? и тогда перехватывать движение не надо а просто блокировка движения "настощей" мыши.
Хорошо может тогда ктонитьбуь расскажет о
mouse_event,
ClipCursor,
GetCursor,
GetCursorPos,
SetCaretPos,
SetCursorPos,
SetWindowsHookExA,
TrackMouseEvent
madmasles
27-07-2011, 05:04
yukuru,
WinAPIEx.au3 (http://autoit-script.ru/index.php/topic,47.0.html):
_WinAPI_ClipCursor()
_WinAPI_GetCursor()
_WinAPI_SetCaretPos()
_WinAPI_TrackMouseEvent()
WinAPI.au3:
_WinAPI_SetWindowsHookEx()
GetCursorPos() http://msdn.microsoft.com/en-us/library/ms648390(VS.85).aspx
SetCursorPos() http://msdn.microsoft.com/en-us/library/ms648394(VS.85).aspx
Мад. прости меня конечно, но...
...я блин сначала вотЪ это перерыл, прежде чем о них начать спрашивать
http://msdn.microsoft.com/en-us/library/ms646970(v=VS.85).aspx
мне всеже просто не понятно некоторые моменты работы.
надо заставить двигаться мышь. помоги
$return = DllCall("user32.dll", "int", "SetCursorPos","int","300","int","500") и MouseMove ( 300,500 ) не помогло.
мышь не двигается в запущеннном окне программы(хотя в остальых окнах -при отсутвиии этой программы двигается)
madmasles
27-07-2011, 16:25
yukuru,
#include (http://www.autoitscript.com/autoit3/docs/keywords.htm##include) <StructureConstants.au3>
$iX = 100
$iY = 200
$aRet = DllCall (http://www.autoitscript.com/autoit3/docs/functions/DllCall.htm)('User32.dll', 'int', 'SetCursorPos', 'int', $iX, 'int', $iY)
ConsoleWrite (http://www.autoitscript.com/autoit3/docs/functions/ConsoleWrite.htm)(@error (http://www.autoitscript.com/autoit3/docs/macros.htm#@error) & @TAB (http://www.autoitscript.com/autoit3/docs/macros.htm#@tab) & $aRet[0] & @CR (http://www.autoitscript.com/autoit3/docs/macros.htm#@cr))
Sleep (http://www.autoitscript.com/autoit3/docs/functions/Sleep.htm)(1000)
$t_Point = DllStructCreate (http://www.autoitscript.com/autoit3/docs/functions/DllStructCreate.htm)($tagPOINT)
$Ret = DllCall (http://www.autoitscript.com/autoit3/docs/functions/DllCall.htm)('User32.dll', 'int', 'GetCursorPos', 'ptr', DllStructGetPtr (http://www.autoitscript.com/autoit3/docs/functions/DllStructGetPtr.htm)($t_Point))
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) (@error (http://www.autoitscript.com/autoit3/docs/macros.htm#@error)) Or (http://www.autoitscript.com/autoit3/docs/keywords.htm#Or) (Not (http://www.autoitscript.com/autoit3/docs/keywords.htm#Not) $Ret[0]) Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
ConsoleWrite (http://www.autoitscript.com/autoit3/docs/functions/ConsoleWrite.htm)(@error (http://www.autoitscript.com/autoit3/docs/macros.htm#@error) & @TAB (http://www.autoitscript.com/autoit3/docs/macros.htm#@tab) & $Ret[0] & @CR (http://www.autoitscript.com/autoit3/docs/macros.htm#@cr))
Else (http://www.autoitscript.com/autoit3/docs/keywords.htm#Else)
$i_X = DllStructGetData (http://www.autoitscript.com/autoit3/docs/functions/DllStructGetData.htm)($t_Point, 'X')
$i_Y = DllStructGetData (http://www.autoitscript.com/autoit3/docs/functions/DllStructGetData.htm)($t_Point, 'Y')
ConsoleWrite (http://www.autoitscript.com/autoit3/docs/functions/ConsoleWrite.htm)('X: ' & $i_X & @TAB (http://www.autoitscript.com/autoit3/docs/macros.htm#@tab) & 'Y: ' & $i_Y & @CR (http://www.autoitscript.com/autoit3/docs/macros.htm#@cr))
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)
Но у меня большое подозрение, что родные функции MouseMove() и MouseGetPos() получают(передают) данные примерно также, то есть если Ваша игра блокирует каким-то образом движение мыши, то, ИМХО, это вряд ли поможет.
вотЪ о чем я и говорю, как же ж не понятно.
в ЭТОМ куск кода мы НАЗНАЧАЕМ координаты мыши.
тоесть мышь "телепортируется" туда.
а нужно сделать чтобы мышь ДВИГАЛАСЬ.
Для этого нужно перехватывать вызовы системных функций. В AutoIt это сделать не получиться. Изучай C/C++...
ясно, как как импортирвоть код на С в Autoit?
ксати а разве нельзя использовать чтото вроде SetWindowsHookExA для перехвата системных функций?
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.