Что нового

Нажать книпки в игре Ф1 и цифры, Send не работает

iditenahuy

Новичок
Сообщения
1
Репутация
0
какие ещё нормальные способы нажатия кнопки в игре есть кроме Send(), на форуме свалка из тем в которых нет ответа.
Как можно с помощью WinApi нажать?

Люди которые любят хвастаться знаниями и не подсказывают ничего, сразу валите лесом
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
iditenahuy [?]
Люди которые любят хвастаться знаниями и не подсказывают ничего, сразу валите лесом
Плохо начинаете свое общение на форуме.
 
A

Alofa

Гость
OffTopic:
firex, а _WinAPI_Keybd_Event() пробивает защиту от эмуляции?
(это так, для повышения общей образованности)
 

firex

AutoIT Гуру
Сообщения
943
Репутация
208
Alofa
Нет. Но можно следующим образом обойти: (поправил пример)

Код:
#include <StructureConstants.au3>
#include <WinAPIEx.au3>

OnAutoItExitRegister("Cleanup")

HotKeySet("{F6}", "_Exit")


Global Const $LLKHF_LOWER_IL_INJECTED = 0x00000002
; --
Global Const $g_INJECTED_MASK = BitOr($LLKHF_LOWER_IL_INJECTED, $LLKHF_INJECTED)
Global Const $g_ExtraInfoValue = 0x00000227


Global $g_hHook, $g_hStub_KeyProc
; ---
$g_hStub_KeyProc = DllCallbackRegister("_KeyProc", "long", "int;wparam;lparam")
$g_hHook = _WinAPI_SetWindowsHookEx( _
    $WH_KEYBOARD_LL, _
    DllCallbackGetPtr($g_hStub_KeyProc), _
    _WinAPI_GetModuleHandle(0) _
    )
If Not $g_hHook Then _
    Exit

While Sleep(100)
    If Random(1, 10, 1) = 5 Then
        ConsoleWrite("Sending key..." & @CRLF)
        ;Send("T")

		_WinAPI_Keybd_Event(0x20, 0, 0, $g_ExtraInfoValue)
		Sleep(100)
		_WinAPI_Keybd_Event(0x20, 2, 0, $g_ExtraInfoValue)
    EndIf
WEnd


Func _KeyProc($nCode, $wParam, $lParam)
    Local $tKEYHOOKS
    ; ---
    $tKEYHOOKS = DllStructCreate($tagKBDLLHOOKSTRUCT, $lParam)

    If Not ($nCode < 0) Then
        If BitAnd($tKEYHOOKS.flags, $g_INJECTED_MASK) And $tKEYHOOKS.dwExtraInfo = $g_ExtraInfoValue Then
            If $wParam = 0x0100 Then _ ; prevent some spam (WM_KEYDOWN)
                ConsoleWrite( "Detected injected flag at key: " & Hex($tKEYHOOKS.vkCode, 2) & @CRLF)

            ; Remove injected flags
            $tKEYHOOKS.flags = BitAnd(BitNot($g_INJECTED_MASK), $tKEYHOOKS.flags)

            ; Remove our extra flag
            $tKEYHOOKS.dwExtraInfo = 0
        EndIf
    EndIf
    Return _WinAPI_CallNextHookEx($g_hHook, $nCode, $wParam, $lParam)
EndFunc

Func Cleanup()
    _WinAPI_UnhookWindowsHookEx($g_hHook)
    DllCallbackFree($g_hStub_KeyProc)
EndFunc   ;==>Cleanup

Func _Exit()
    Exit
EndFunc


Такие нажатия (если защита реализована через ll-хуки) должны успешно обходить.
 
A

Alofa

Гость
OffTopic:
firex спасибо, буду изучать.

Прошу прощения за OffTop.
 
Верх