一个简易的键盘按键测试程序
該小程序是大學同學托我給他們公司做的,沒有酬勞,但是我還是很認真的做了,當是鍛煉自己了。這是我寫的第一個帶有界面的程序,用的是 MFC,是因為在研一國慶時過了一遍《VC++深入詳解》。
進過不斷摸索、調試、完善,耗時一周多,完成于 2013/05/15,下面是一些回顧,有些細節已經遺忘。
源碼托管在 Github:點擊進入鏈接
源程序(不含源碼):點擊進入鏈接
程序分兩大部分:
1、界面主程序,重載“PreTranslateMessage”函數,捕獲擊鍵并作相應處理;
2、但是有些特殊鍵“PreTranslateMessage”函數無法捕獲,如:左右 Win 鍵、屏幕截取鍵、還有“音量”、”播放“等特殊功能鍵,就需要安裝一個鉤子來捕捉。我用動態庫寫了一個鍵盤鉤子,沒有必要,只是為了嘗試一下 dll 的編寫。
在“PreTranslateMessage”函數里要捕捉所有類型的按鍵:
1、一般字符鍵(WM_KEYDOWN);
2、系統鍵(WM_SYSKEYDOWN --Alt,VK_MENU);
3、回車鍵(VK_RETURN);
4、屏幕截取鍵(VK_SNAPSHOT);
剛開始考慮不全,只能一步步調試完善。
重難點:
1、同編碼按鍵的處理:左右shift、ctrl、alt;兩個回車;逗號與截屏
2、屏蔽F1彈出幫助;
3、用 Hook 屏蔽 Win 鍵彈出 Win 菜單;
4、“屏幕截取鍵”是個特殊的按鍵,如果被系統截取,則只有Keyup,沒有Keydown,所以需要用鉤子屏蔽;
用到的數據結構 ——哈希表,當時并不清楚地知道這就是哈希表,只是覺得這樣用可以很方便地找到對應按鈕:
1 CMFCButton* keys[256]; 2 3 …… 4 5 // 初始化按鍵數組 6 keys[VK_ESCAPE] = &m_esc; 7 8 ……
廠商的一些特殊要求:
1、按鍵可能會一直按著進行測試,或多次按下/彈起,他們要求按下時按鈕要變色且按鈕下陷,直到彈起后才恢復;
2、不管“Num Lock”是否鎖定,小鍵盤都要作用為數字鍵盤。剛開始覺得這是個棘手的要求,因為“Num Lock”沒鎖定時,除了“5”,其他幾個數字對應的編碼是另外幾個功能鍵的編碼了,沒法判斷是不是數字鍵按下的。后來經過查閱資料發現當數字鍵映射為其他鍵時,“pMsg->lParam”域包含實際編碼,否則pMsg->lParam為空,“pMsg->wParam”包含實際編碼。
3、程序一直置頂;
4、界面可調大小,按鈕要按比例縮放 -- 在界面初始化時保存控件坐標,在 OnSize 時按比例調整大?。?/p>
總結
以上是生活随笔為你收集整理的一个简易的键盘按键测试程序的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: Linux内存管理:虚拟地址空间(AAr
- 下一篇: PDF文档如何添加图片签名
