阅读:1095回复:0
驱动与应用程序通信的问题当键盘按下时我在驱动里面用事件通知应用程序, KeSetEvent(g_DriverObject.DriverEvent, IO_NO_INCREMENT, FALSE); KeClearEvent(g_DriverObject.DriverEvent); 应用程序中用一个循环Wait。 当按键速度慢的时候没有问题,但是当按键频率快的时候,会发现有的事件丢失了。 如果打印消息出来,驱动中KeSetEvent调用3次,但是程序里面只接收到2次。 所以在把一个键按住一段时间再放开,有时候会收不到按键放开的消息。 但是驱动里面是调用了的。 HEvent := OpenEvent(Windows.SYNCHRONIZE, false, 'MonitorDriverEvent'); try while not Terminated do begin if (WaitForSingleObject(HEvent, 1000) = WAIT_OBJECT_0) then begin DeviceIoControl(HFile, CTL_CODE($801), nil, 0, @Data, 100, Byts, nil); //SendMessage(MainHandle, WM_UserKEY, Data[1], Data[2]); OutputDebugString(PChar(Format('Key %d flag %d', [Data[1], Data[2]]))); end; end; finally closehandle(HEvent); end; 请问这个问题应该怎么解决呢? |
|