我正在構建一個程序,可以在屏幕上打印按下按鈕的值。當程序的窗口不活動時,我也需要它。我嘗試使用GetAsyncKeyState(int),它工作正常。但是,我可以將某些字符串附加到鍵上,但不適用於所有類型的鍵盤(例如,在英文鍵盤上shift + 2是@,而在我的鍵盤上則不是)。如何檢測由Windows完成的鍵輸入的後處理(在記事本中寫入時在屏幕上打印的字符)?在窗口識別鑰匙後檢測鍵盤輸入
0
A
回答
0
嘗試使用OemKeyScan功能。隨着你的,你應該有scancode(例如「2」鍵具有給定的掃描碼,就是始終取決於所處的位置在鍵盤上相同的,例如17的「2」鍵):
int whichscancode= 17;
if (key_with_shift)
whichscancode|= (1<<16); // shifted values with 1<<16
for (i=0; i<256; i++) {
int scan= ::OemKeyScan(i); // try all characters for a matching scancode
if (scan==whichscancode) {
// i here is the ascii code of the key on that position
printf("on that scancode is character %c\n", (char)i);
}
}
+0
好的,我得到的掃描碼在所有鍵盤上都是一樣的。它可以工作,但我怎樣才能將它與GetAsyncKeyState(int)一起使用,它將虛擬鍵作爲輸入?如果我在任何鍵盤上輸入符號「@」,無論是shift + 2還是shift +,它都會給我「@」。 – Stein
相關問題
- 1. 如何檢測鍵盤輸入密鑰?
- 2. 庫進口需要「鍵盤」和「鑰匙」
- 3. 檢測鍵盤輸入Matlab
- 4. 鍵盤輸入檢測
- 5. 無法識別鍵盤輸入
- 6. 防止鍵盤輸入到達窗口
- 7. 在窗口10,控制檯窗口不接受鍵盤輸入
- 8. 識別鍵盤
- 9. 在後臺檢測窗口
- 10. Android:檢測用戶不活動/檢測(軟鍵盤)鍵盤輸入
- 11. 檢測輸入密鑰C#
- 12. plt.plot鍵盤輸入後
- 13. 鍵盤輸入和不同的密鑰
- 14. 鍵盤檢測
- 15. 鑰匙店別名
- 16. 在OSX上不輸入密碼鑰匙
- 17. 後插入鑰匙不能在EF 4.3
- 18. 不識別模擬鍵盤輸入的特定程序
- 19. 如何檢測android窗口上的鍵盤 - 鈦Appcelerator
- 20. 檢測長按「虛擬」鑰匙
- 21. 最佳交鑰匙關係檢測庫?
- 22. 插入窗口鍵盤緩衝區
- 23. 在C++中檢測到輸入密鑰
- 24. 焦點在JpopupMenu上檢測鍵盤輸入(Java)
- 25. 鍵盤輸入
- 26. 鍵盤AS3檢測
- 27. 如何將鍵盤輸入命令綁定到主窗口?
- 28. 如何將鍵盤輸入發送到OpenGL/DirectX遊戲窗口?
- 29. Java 8 - 切換窗口後丟失所有鍵盤輸入或焦點
- 30. Windows上的低級別鍵盤輸入
你可能想設置一個windows鍵盤鉤子。 –
爲什麼你的程序需要這樣做?它是一個IME嗎?屏幕上的鍵盤?鍵盤記錄器? IME有特殊的接口可以做到這一點。屏幕上的鍵盤通常不會顯示結果鍵(它顯示在目標應用程序中)。 –
Jerry Coffin>感謝您的建議。看起來好像會起作用,但是,實現起來並不容易。任何代碼示例? – Stein