Что нового

[Окна, Диалоги] Дублирование нажатий клавиш из одного окна в другое

AHrEJl

Новичок
Сообщения
3
Репутация
0
Autoit: v3.3.10.2


Описание: Грубо говоря есть флеш игрушка, хочется зайти с двух аков и одновременно управлять двумя персонажами в двух окнах. Но что бы это сделать, мне нужно понять принципы переноса нажатия клавиш из одного окна в другое. До этого я никогда не кодил, потому и прошу написать с комментариями :(

Примечание: Дело в том, что я новичок, потому и прошу с комментариями. Хелоу ворлд я могу сам создать и повторение действий в том же оскаре у меня на мыше и так делается. А вот как сделать, что бы переносило нажатия клавиш в другом окне зеркально не понимаю. Гуи не совсем то, что хотелось.
 

firex

AutoIT Гуру
Сообщения
943
Репутация
205
Код:
Local $hWndTarget = WinGetHandle( "title", "text" ) ;Окно, которому передаем нажатия
Local $hGuiMain = GUICreate( "", 200, 200, -1, -1 ) ;Окно скрипта, которое их принимает
GUIRegisterMsg( 0x100, "_OnKeyDownUp" )
GUIRegisterMsg( 0x101, "_OnKeyDownUp" )

GUISetState( @SW_SHOW, $hGuiMain )
; ---
Local $User32Dll = DllOpen( "user32.dll" )
; ---
Do
	Sleep( 10 )
Until GUIGetMsg() = -3
DllClose( $User32Dll )

Func _OnKeyDownUp( $hWnd, $iMsg, $wParam, $lParam )
	ConsoleWrite($iMsg & @TAB & $wParam & @CRLF )
	DllCall( $User32Dll, "long", "PostMessage", "hwnd", $hWndTarget, "int", $iMsg, "int", $wParam, "int", 0 )
EndFunc


Как то так, не тянет это на стол заказов.
 
Автор
AHrEJl

AHrEJl

Новичок
Сообщения
3
Репутация
0
Дело в том, что я новичок, потому и прошу с комментариями. Хелоу ворлд я могу сам создать и повторение действий в том же оскаре у меня на мыше и так делается. А вот как сделать, что бы переносило нажатия клавиш в другом окне зеркально не понимаю. Гуи не совсем то, что хотелось.

Грубо говоря есть флеш игрушка, хочется зайти с двух аков и одновременно управлять двумя персонажами в двух окнах. Но что бы это сделать, мне нужно понять принципы переноса нажатия клавиш из одного окна в другое. До этого я никогда не кодил, потому и прошу написать с комментариями :(

Код:
#RequireAdmin ; берем права админа

BlockInput(o) ; позволяем игроку нажимать клавиши?
$win=WinGetHandle("[Active]") ; активные окна остаются активными?


WinActivate($win) ; активные окна ?
$fp = WinActivate("is1 (flashplayer_11_sa)") ; первое активное окно
$fp1 = WinActivate("is2 (flashplayer_11_sa1)") ; второе активное окно
Sleep(250) ; небольшая задержка?
If _IsPressed("{w}", "$fp") Then ; если должно фиксировать нажатие клавишы "W", 
send("{w}",$fp1) ; отсылаем w в flashplayer_11_sa1 ; тогда должно отослать после фиксирование клавишы команду нажать "W" второму флеш окну аналогичной игры, дублируя действие персонажа первого окна.

EndIf


Вот так _IsPressed почему-то не хочет работать функция, пробовал даже как в примере было в туториале через длл импут, но все равно не срабатывало. Если кто с комментариями опишет что неверно написал, буду рад. Мне бы принципы понять, а скрипт допилить возможно доделаю и сам до ума. Подобной темы в новичках и других разделах я не нашел. Потому и попросил с примером и комментариями.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 319
AHrEJl,
Если Вы не приведете первое сообщение в соответствие с Правилами, я закрою тему.
 
Автор
AHrEJl

AHrEJl

Новичок
Сообщения
3
Репутация
0
Исправил, теперь все по правилам?
 

firex

AutoIT Гуру
Сообщения
943
Репутация
205
AHrEJl
Чем тебе мой пример не годится?


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

Код:
Local $hWndTarget1 = WinGetHandle( "title", "text" ) ;Окно, которому передаем нажатия #1
Local $hWndTarget2 = WinGetHandle( "title", "text" ) ;Окно, которому передаем нажатия #2

Local $hGuiMain = GUICreate( "", 200, 200, -1, -1 ) ;Окно скрипта, которое будет их перенаправлять
GUIRegisterMsg( 0x100, "_OnKeyDownUp" ) ;Регистрируем сообщение WM_KEYDOWN
GUIRegisterMsg( 0x101, "_OnKeyDownUp" ) ;Регистрируем сообщение WM_KEYUP

GUISetState( @SW_SHOW, $hGuiMain )
; ---
Local $User32Dll = DllOpen( "user32.dll" )
; ---
Do
    Sleep( 10 )
Until GUIGetMsg() = -3
DllClose( $User32Dll )

Func _OnKeyDownUp( $hWnd, $iMsg, $wParam, $lParam ) ;Как только в окне скрипта была нажата любая клавиша, она будет перенаправлена в окна 1 и 2
		;iMsg - 0x0100 или 0x0101 (нажата и отжата соотвественно)
		;wParam - код клавиши
		ConsoleWrite($iMsg & @TAB & $wParam & @CRLF )

    DllCall( $User32Dll, "long", "PostMessage", "hwnd", $hWndTarget1, "int", $iMsg, "int", $wParam, "int", 0 ) ;Перенаправляем в окно #1
	DllCall( $User32Dll, "long", "PostMessage", "hwnd", $hWndTarget2, "int", $iMsg, "int", $wParam, "int", 0 ) ;Перенаправляем в окно #2
EndFunc
 
Верх