有什麼方法可以在Windows控制檯中獲取關鍵事件?我需要一種方法來快速獲取keydown和keyup事件,而無需GUI。我試過使用getch(),但它沒有得到keyups並等到一個鍵被按下才返回。C++控制檯鍵盤事件
回答
您可以使用GetKeyState
或GetAsyncKeyState
,但不會給你keydown/keyup事件。它只會告訴你哪些鍵正在關閉。
所以如果你真的需要獲得keydown/keyup事件,你可以安裝一個鉤子。 控制檯窗口具有窗口句柄,該窗口句柄由Windows中的代碼和消息泵擁有,該消息泵也由Windows中的代碼擁有。
您可以通過使用GetConsoleWindow獲得控制檯窗口的窗口句柄。然後使用SetWindowsHookEx安裝WH_CALLWNDPROC
掛鉤來偵聽發送到控制檯窗口的消息。
您可以嘗試使用WH_MSGFILTER
掛鉤。我不知道這是否適用於控制檯窗口,但它會產生較少的消息,如果它能夠被忽略。
使用ReadConsoleInput()
API。注意種類KEY_EVENT
的事件。這不適用於所有keydown事件(Ctrl-key,shift-key,Pause-key不能被讀取),但大部分都可以被讀取。使用GetNumberOfConsoleInputEvents
來避免阻塞。
有很多種方法。 GetKeyboardState將是最明顯的一個。
我只是好奇,怎麼會有這樣一個合乎邏輯的問題沒有任何解釋谷歌, 所以人們必須在這裏問它。所以我用Google搜索:「鍵盤事件控制檯應用程序」和 你猜怎麼着......前2個鏈接是有趣的(但不幸的是,不完全回答你的問題):
- Processing mouse/keyboard input on MSDN。
- Console event handlers(如Ctrl-C和窗口關閉按鈕)。
我搜索了同樣的東西猜測什麼...第三個鏈接指向這個頁面。 – avakar 2010-01-14 23:07:47
您也可以嘗試SetConsoleCtrlHandler
- 1. Xlib控制鍵盤事件
- 2. C#控制檯關鍵事件
- 3. 在控制檯應用程序中等待鍵盤事件
- 4. C#控制檯的鍵盤快捷鍵類
- 5. Linux控制檯鍵盤處理程序
- 6. C# - 控制檯擊鍵
- 7. 鍵盤事件教程C#
- 8. 鍵盤事件目標C
- 9. 鍵盤控制?
- 10. C#控制檯 - 在按鍵上運行事件
- 11. 當c的控制檯禁用鍵盤按鍵使用c或C++運行
- 12. C++計時事件控制檯錯誤?
- 13. ActionScript - 沒有舞臺的鍵盤事件?
- 14. 爲鍵盤監聽器部署C#控制檯應用程序
- 15. 捕獲焦點鍵盤輸入C#控制檯程序
- 16. 獲取控制檯中的鼠標和鍵盤輸入C++
- 17. 如何在Eclipse控制檯中發出Ctrl-C(鍵盤中斷)?
- 18. c#控制檯應用程序重複鍵盤按?
- 19. 圖像控件鍵盤事件WPF,UWP
- 20. 鍵盤事件
- 21. 鍵盤事件
- 22. 鍵盤事件
- 23. Popup控制鍵盤
- 24. 鍵盤控制tinyscrollbar.js
- 25. VB控制鍵盤
- 26. 如何從X11監控鍵盤事件
- 27. 將鍵盤快捷鍵添加到控制檯應用程序中C
- 28. 控制檯/解釋器中的RStudio鍵盤快捷鍵
- 29. La Clojure - 進入REPL控制檯的鍵盤快捷鍵
- 30. 在控制檯中使用自定義鍵盤快捷鍵
你說「沒有圖形用戶界面」,但大部分的時間(據我所知)在Windows上使用的是窗口內的控制檯。在確實有窗口的情況下,您可以掛鉤該窗口並捕獲其消息。 – Zac 2010-01-14 23:49:44