Wednesday, April 25, 2007

如何讓APP跟Driver同步

//以HOLD KEY為例
//Driver side create event

#define kHoldKeyEventName TEXT("HoldKey")
#define kUnHoldKeyEventName TEXT("UnHoldKey")
HANDLE hHoldKeyEvent;
HANDLE hUnHoldKeyEvent;

IniTFunction() {
...
...
hHoldKeyEvent = CreateEvent(NULL, FALSE, FALSE, kHoldKeyEventName);
hUnHoldKeyEvent = CreateEvent(NULL, FALSE, FALSE, kUnHoldKeyEventName);
...
...
}


HandlerFunction() {
...
if(holdkey) {
...
SetEvent(hHoldKeyEvent);
... }
else {
SetEvent(hUnHoldKeyEvent);
... }
}

---------------------------------------------------------------------
//Application side
#define kHoldKeyEventName TEXT("HoldKey")
#define kUnHoldKeyEventName TEXT("UnHoldKey")

int WINAPI WinMain( HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow) {
...
InitThread();
...
}

//Single thread
void InitThread() {
HANDLE hEvent[2]={0};
DWORD dwStatus;

hEvent[0] = CreateEvent(NULL, FALSE, FALSE, kHoldKeyEventName);
hEvent[1] = CreateEvent(NULL, FALSE, FALSE, kUnHoldKeyEventName);

while(TRUE) {
dwStatus = WaitForMultipleObjects(2, hEvent, FALSE, INFINITE);

switch(dwStatus) {
case (WAIT_OBJECT_0 + 0):
break;

case (WAIT_OBJECT_0 + 1):
break; } }
}

0 comments: