DNF模擬按鍵問題,試過很多方法,想消息隊列添加消息,keybd_event,都試過,不行,winio驅動級模擬簽名問題
某些遊戲的開發利用了微軟提供的DirectX,從而繞過了Windows操作系統的消息封裝機制:這些使用DirectX接口的遊戲程序,它們在讀取鍵盤操作時繞過了windows的消息機制,而使用DirectInput.這是因為有些遊戲對實時性控制的要求比較高,比如賽車遊戲,要求以最快速度響應鍵盤輸入。而windows消息由於是隊列形式的,消息在傳遞時會有不少延遲,有時1秒鐘也就傳遞十幾條消息,這個速度達不到遊戲的要求。而DirectInput則繞過了windows消息,直接與鍵盤驅動程序打交道,效率當然提高了不少。因此也就造成,對這樣的程序無論用PostMessage或者是keybd_event都不會有反應,因為這些函數都在較高層。對於這樣的程序,只好用直接讀寫鍵盤端口的方法來模擬硬件事件了。要用這個方法來模擬鍵盤,需要先了解壹下鍵盤編程的相關知識。在DOS時代,當用戶按下或者放開壹個鍵時,就會產生壹個鍵盤中斷(如果鍵盤中斷是允許的),這樣程序會跳轉到BIOS中的鍵盤中斷處理程序去執行。打開windows的設備管理器,可以查看到鍵盤控制器由兩個端口控制。其中&H60是數據端口,可以讀出鍵盤數據,而&H64是控制端口,用來發出控制信號。也就是,從&H60號端口可以讀此鍵盤的按鍵信息,當從這個端口讀取壹個字節,該字節的低7位就是按鍵的掃描碼,而高1位則表示是按下鍵還是釋放鍵。當按下鍵時,最高位為0,稱為通碼,當釋放鍵時,最高位為1,稱為斷碼。既然從這個端口讀數據可以獲得按鍵信息,那麽向這個端口寫入數據就可以模擬按鍵了。