1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110
|
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#include <dinput.h>
//---------------------------------------------------------------------------
USEFORM("Unit1.cpp", Form1);
//---------------------------------------------------------------------------
LPDIRECTINPUT lpDI;
LPDIRECTINPUTDEVICE pKeyboard;
void Deinitialize()
{
if (pKeyboard)
{
pKeyboard->Unacquire();
pKeyboard->Release();
pKeyboard = NULL;
}
if (lpDI)
{
lpDI->Release();
lpDI = NULL;
}
}
bool Initialize(HINSTANCE _instance, HANDLE _handle)
{
Deinitialize();
DirectInputCreate(_instance, DIRECTINPUT_VERSION, &lpDI, NULL);
lpDI->CreateDevice(GUID_SysKeyboard, &pKeyboard, NULL);
pKeyboard->SetDataFormat(&c_dfDIKeyboard);
pKeyboard->SetCooperativeLevel(_handle, DISCL_FOREGROUND | DISCL_NONEXCLUSIVE);
pKeyboard->Acquire();
return true;
}
void Execute()
{
// GDI test
/* const SHORT Mask = 32768;
Application->ProcessMessages();
if (GetKeyState(VK_ESCAPE) & Mask) ShowMessage("DIK_ESCAPE");
if (GetKeyState(VK_UP) & Mask) ShowMessage("DIK_UP");
if (GetKeyState(VK_DOWN) & Mask) ShowMessage("DIK_DOWN");
if (GetKeyState(VK_LEFT) & Mask) ShowMessage("DIK_LEFT");
if (GetKeyState(VK_RIGHT) & Mask) ShowMessage("DIK_RIGHT");
if (GetKeyState(VK_TAB) & Mask) ShowMessage("DIK_TAB");
if (GetKeyState(VK_RETURN) & Mask) ShowMessage("DIK_RETURN");
if (GetKeyState(VK_SPACE) & Mask) ShowMessage("DIK_ESCAPE");
if (GetKeyState(VK_F1) & Mask) ShowMessage("DIK_F1");
*/
// directInput test
char l_buffer[256];
ZeroMemory(l_buffer, sizeof(l_buffer));
int hr = pKeyboard->GetDeviceState(sizeof(l_buffer), (LPVOID)&l_buffer);
if (hr == DIERR_INPUTLOST) { pKeyboard->Acquire(); }
if (l_buffer[DIK_LEFT] & 0x80) ShowMessage("DIK_LEFT");
if (l_buffer[DIK_RIGHT] & 0x80) ShowMessage("DIK_RIGHT");
if (l_buffer[DIK_UP] & 0x80) ShowMessage("DIK_UP");
if (l_buffer[DIK_DOWN] & 0x80) ShowMessage("DIK_DOWN");
if (l_buffer[DIK_RETURN]& 0x80) ShowMessage("DIK_RETURN");
if (l_buffer[DIK_TAB] & 0x80) ShowMessage("DIK_TAB");
if (l_buffer[DIK_SPACE] & 0x80) ShowMessage("DIK_SPACE");
if (l_buffer[DIK_ESCAPE]& 0x80) ShowMessage("DIK_ESCAPE");
if (l_buffer[DIK_F1] & 0x80) ShowMessage("DIK_F1");
}
WINAPI WinMain(HINSTANCE _instance, HINSTANCE, LPSTR, int)
{
try
{
Application->Initialize();
Application->CreateForm(__classid(TForm1), &Form1);
Initialize(_instance, Form1->Handle);
Form1->Show();
while(true)
{
Application->ProcessMessages();
Execute();
}
// Application->Run();
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
return 0;
} |
Partager