4
A
回答
1
要獲得鍵盤輸入而不管焦點,您可能需要鉤住鍵盤。
請使用WH_KEYBOARD或WH_KEYBOARD_LL查看SetWindowsHookEx。將W添加到Unicode變體的調用中。
3
鍵盤按壓和它們生成的字符之間存在差異。
在最低級別,您可以用GetKeyboardState
查詢鍵盤狀態。這通常是鍵盤記錄惡意軟件如何實現的,因爲它需要最少的權限,並且無論焦點在哪裏都能看到所有內容。這種方法的問題(除了需要不斷的輪詢)之外,你必須將鍵盤狀態拼接成擊鍵,然後將鍵盤敲擊到字符流中。你必須知道鍵盤是如何映射的,你已經保持了shift鍵,控制鍵,alt鍵等的狀態。你必須知道自動重複鍵,死鍵和其他可能的複雜情況。
如Jens在他的回答中提到的,如果您有權限可以安裝鍵盤掛鉤。
如果您有注意力,並且您是控制檯應用程序,則可以使用其中一種功能從標準輸入讀取。在Windows上,很難獲得真正的Unicode輸入。您通常會得到所謂的ANSI字符,它們對應於控制檯窗口的當前代碼頁。如果您知道代碼頁,則可以使用MultiByteToWideChar
將單字節或多字節輸入轉換爲UTF-16(Windows文檔稱爲Unicode)。從那裏你可以將它轉換爲UTF-8(與WideCharToMultiByte
)或任何其他的Unicode編碼你想要的。
如果你有專注,而且你是一個GUI應用程序,你可以看到與WM_KEYDOWN
(和朋友)的擊鍵。您也可以使用WM_CHAR
(或從WM_UNICHAR
的UTF-32)獲得完全解析的UTF-16字符。如果您需要使用UTF-8,則必須進行轉換。
相關問題
- 1. 獲取鍵盤鍵的字符串
- 2. 獲取UTF8字符串
- 3. libusb-win32 - 無法從鍵盤讀取
- 4. 如何從utf8字符串中獲取字符
- 5. 從鍵盤獲取字符(內存分配)
- 6. fgets()從鍵盤讀取新行字符
- 7. 如何從utf8字符串中獲取等效的非utf8字符?
- 8. Win32鍵盤組合
- 9. 從tkinter獲取鍵盤
- 10. 獲取鍵盤數字鍵中符號的javascript鍵碼
- 11. 如何不間斷地從鍵盤獲取字符?
- 12. 從鍵盤上獲取一個特殊的字符Python Pygame
- 13. 從fgetc()獲取字符C
- 14. 獲取UTF8中字符串的長度
- 15. 獲取原始utf8字符串
- 16. Win32 C++從元素中獲取文本
- 17. 獲取AccessViolationException當P /從C++/Win32的DLL
- 18. C#從字典獲取鍵<字符串,流>
- 19. Android - 獲取鍵盤按鍵
- 20. 如何從鍵盤佈局標識符獲取鍵盤佈局名稱?
- 21. 獲取鍵盤中斷用C
- 22. C++ win32從資源加載字符串
- 23. 什麼是win32 /系統調用相當於從鍵盤獲取掃描代碼?
- 24. UTF8字符在目標C
- 25. 從鍵盤讀取
- 26. 從MemoryMappedFile獲取Win32句柄
- 27. 鍵盤上的字符輸入c
- 28. 獲取從鍵盤(或自定義鍵盤)輸入的文本
- 29. 從關鍵代碼獲取字符
- 30. java從字符串獲取鍵碼
你說的是控制檯應用程序還是GUI應用程序?在前一種情況下,在後一種情況下使用'getwchar()'來響應'WM_UNICHAR'消息。另外請注意,不存在「UTF8字符」這樣的內容:「字符」通常表示「Unicode字符」,但Windows文檔使用該術語而不是「UTF-16代碼單元」。 – Philipp 2010-05-01 10:24:08
實際上它應該抓住筆畫,即使它沒有焦點 – ehmmmm 2010-05-01 10:28:07