10 12 00 00 _c_rgodfDIKeyboard dd offset _GUID_Key ; DATA XREF: .rdata:00000200o
.data:00000208 00 db 0
.data:00000209 00 db 0
.data:0000020A 00 db 0
.data:0000020B 00 db 0
.data:0000020C 0C db 0Ch
.data:0000020D 00 db 0
.data:0000020E 00 db 0
.data:0000020F 80 db 80h ; €
.data:00000210 00 db 0
.data:00000211 00 db 0
.data:00000212 00 db 0
.data:00000213 00 db 0
.rdata:000001EC 18 _c_dfDIKeyboard db 18h
.rdata:000001ED 00 db 0
.rdata:000001EE 00 db 0
.rdata:000001EF 00 db 0
.rdata:000001F0 10 db 10h
.rdata:000001F1 00 db 0
.rdata:000001F2 00 db 0
.rdata:000001F3 00 db 0
.rdata:000001F4 02 db 2
.rdata:000001F5 00 db 0
.rdata:000001F6 00 db 0
.rdata:000001F7 00 db 0
.rdata:000001F8 00 db 0
.rdata:000001F9 01 db 1
.rdata:000001FA 00 db 0
.rdata:000001FB 00 db 0
.rdata:000001FC 00 db 0
.rdata:000001FD 01 db 1
.rdata:000001FE 00 db 0
.rdata:000001FF 00 db 0
.rdata:00000200 04 02 00 00 dd offset _c_rgodfDIKeyboard
const GUID GUID_Key = {0x55728220, 0xD33C, 0x11CF, [0xBF, 0xC7, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00]};
#include <windows.h>
#include <dinput.h>
#define INPUT __declspec(dllimport)
#define OUTPUT __declspec(dllexport)
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
UCHAR HitFlag[256] = {0};
UCHAR KeyArry[256] = {0};
HWND main_window_handle = nullptr;
HINSTANCE main_instance_handle = nullptr;
LPDIRECTINPUT8 lpdi = nullptr;
LPDIRECTINPUTDEVICE8 lpdikey = nullptr;
LPDIRECTINPUTDEVICE8 lpdimouse = nullptr;
LPDIRECTINPUTDEVICE8 lpdijoy = nullptr;
EXTERN_C OUTPUT BOOL CDECL InitInput(HWND hWnd, HINSTANCE hInst)
{
main_window_handle = hWnd;
main_instance_handle = hInst;
return SUCCEEDED(DirectInput8Create (hInst,
DIRECTINPUT_VERSION,
IID_IDirectInput8,
(void **)&lpdi,
nullptr));
}
EXTERN_C OUTPUT BOOL CDECL InitKeyBoard(DWORD dwFlags)
{
BOOL val = 0;
val |= lpdi->CreateDevice (GUID_SysKeyboard, &lpdikey, nullptr);
val |= lpdikey->SetCooperativeLevel (main_window_handle, dwFlags);
val |= lpdikey->SetDataFormat(&c_dfDIKeyboard);
val |= lpdikey->Acquire();
return !val;
}
EXTERN_C OUTPUT BOOL CDECL GetKeyUp(DWORD KeyIndex)
{
// if(lpdikey->GetDeviceState(256, (LPVOID)KeyArry) != DIERR_INPUTLOST) {
lpdikey->GetDeviceState(256, (LPVOID)KeyArry);
__asm cmp eax, 8007001Eh // DIERR_INPUTLOST
__asm jnz most_hit_branch
if (lpdikey->Acquire() != S_OK) {
__asm int 3
} return lpdikey->GetDeviceState(256, (LPVOID)KeyArry);
__asm align 16
most_hit_branch:
UCHAR u8Temp;
u8Temp= HitFlag[KeyIndex];
HitFlag[KeyIndex] = KeyArry[KeyIndex] | ((0x80^HitFlag[KeyIndex]) & HitFlag[KeyIndex]);
return ((0x80 ^ KeyArry[KeyIndex]) & u8Temp);
// }
// else {
// if (lpdikey->Acquire() != S_OK) {
// __asm int 3
// } lpdikey->GetDeviceState(256, (LPVOID)KeyArry);
// }
// return 233;
/*
if(lpdikey->GetDeviceState(256, (LPVOID)KeyArry)==DIERR_INPUTLOST)
{
lpdikey->Acquire();
}
if (KeyArry[KeyIndex] )
{
HitFlag[KeyIndex]=0x80;
return FALSE;
}
else if (HitFlag[KeyIndex] == 0x80)
{
HitFlag[KeyIndex] = 0;
return TRUE;
}
else
return FALSE;*/
}
EXTERN_C OUTPUT BOOL CDECL GetKeyDown(DWORD KeyIndex)
{
// if(lpdikey->GetDeviceState(256, (LPVOID)KeyArry) != DIERR_INPUTLOST) {
lpdikey->GetDeviceState(256, (LPVOID)KeyArry);
__asm cmp eax, 8007001Eh
__asm jnz most_hit_branch
if (lpdikey->Acquire() != S_OK) {
__asm int 3
} return lpdikey->GetDeviceState(256, (LPVOID)KeyArry);
__asm align 16
most_hit_branch:
HitFlag[KeyIndex] |= KeyArry[KeyIndex];
return KeyArry[KeyIndex];
//} else {
// if (lpdikey->Acquire() != S_OK) {
//__asm int 3
// } lpdikey->GetDeviceState(256, (LPVOID)KeyArry);
//} return 233;
}
EXTERN_C OUTPUT BOOL CDECL ShutDownInput ()
{
BOOL val = 0;
if(lpdikey != nullptr)
val |= lpdikey->Unacquire() | lpdikey->Release();
if(lpdimouse != nullptr)
val |= lpdimouse->Unacquire() | lpdimouse->Release();
if(lpdijoy != nullptr)
val |= lpdijoy->Unacquire() | lpdijoy->Release();
if(lpdikey != nullptr)
val |= lpdi->Release();
return !val;
}
EXTERN_C OUTPUT BOOL CDECL InitMouse(DWORD KeyIndex)
{
return 0;
}
EXTERN_C OUTPUT BOOL CDECL InitJoy(HWND hWnd, HINSTANCE hInst)
{
return 0;
}
今日推荐
周排行