首先,簡介一下鍵盤訊息:
(1)系統訊息:(系統鍵alt,f10等),由系統內部處理
wm_syskeydown
wm_syskeyup
wm_syschar
(2)非系統訊息:
wm_keydown
wm_keyup
wm_char
二、新增訊息(一般wm_keydown),在訊息響應函式
onkeydown(uint nchar, uint nrepcnt, uint nflags)
有三個變數,nchar這是虛擬鍵**,另外兩個不常用,用時參看msdn。
如果要響應組合鍵,可以用getasynckeystate()檢測按鍵狀態
如:case vk_up:
if (getasynckeystate(vk_lshift))
break;
三,下面介紹虛擬鍵**:
0~9,a~z 為ascii碼,(去除ascii碼前的0),如a為65,不是065;
其它的為vk碼,如下所示:
vk值列表
vk_cancel ctrl+break
vk_tab tab
vk_return enter
vk_shift shift
vk_control ctrl
vk_menu alt
vk_lbutton 01 滑鼠左鍵
vk_rbutton 02 滑鼠右鍵
vk_cancel 03 用於執行ctrl+c或ctrl+break
vk_mbutton 04 滑鼠中鍵
vk_back 08 backspace鍵
vk_tab 09 tab鍵
vk_clear 0c clear鍵
vk_return 0d enter鍵
vk_shift 10 shift鍵
vk_control 11 ctrl鍵
vk_menu 12 arl鍵
vk_pause 13 pause鍵
vk_capital 14 capslock鍵
vk_escape 1b ese鍵
vk_space 20 spacebar鍵
vk_prior 21 pgup鍵
vk_next 22 pgdn鍵
vk_end 23 end鍵
vk_home 24 home鍵
vk_left 25 left arrow鍵
vk_up 26 up arrow鍵
vk_right 27 right arrow鍵
vk_down 28 down arrow鍵
vk_select 29 select鍵
vk_execute 2b execute鍵
vk_snapshot 2c printscreen鍵
vk_insert 2d ins鍵
vk_delect 2e del鍵
vk_help 2f help鍵
vk_0 30 0鍵
.........
vk_9 39 9鍵
vk_a 41 a鍵
… … …
vk_z 5a z鍵
vk_numapd0 60 數字板0鍵
… … …
vk_numapd9 69 數字板9鍵
vk_multipy 6a 乘號鍵
vk_add 6b 加號鍵
vk_separator 6c separator鍵
vk_substract 6d 減號鍵
vk_decimal 6e 小數點鍵
vk_divide 6f 除號鍵
vk_f1 70 f1鍵
… … …
vk_f24 87 f24鍵
vk_numlock 90 numlock鍵
vk_scroll 91 scrolllock鍵
vk_escape esc
vk_space space
vk_prior page up
vk_next page down
vk_end end
vk_home home
vk_left 向左方向鍵
vk_up
vk_right
vk_down
vk_delete delete
vk_insert inser
vk_numpad0~vk_numpad9 小鍵盤上的0-9鍵
vk_f1-vk_f12 f1-f12鍵
模擬按鍵按下和釋放
keybd_event(vk_shift,0,0,0); //模擬按下shift鍵
keybd_event(vk_lcontrol,0,0,0); //模擬按下ctrl鍵
sleep(1000); //停頓一秒
keybd_event(vk_lcontrol,0,keyeventf_keyup,0); //釋放ctrl鍵
keybd_event(vk_shift,0,keyeventf_keyup,0); //釋放shift鍵
//在乙個對話方塊程式當中,當對話方塊上沒有任何乙個控制項,可以截獲到keydown訊息;
但是當對話方塊上加入任何乙個控制項之後,就不會像剛才那樣截獲到訊息:
(所以,基於對話方塊的程式是無法直接響應鍵盤訊息的,需要你自己過載虛函式pretranslatemessage())
如果要截獲鍵盤訊息:
可以過載函式pretranslatemessage(msg* pmsg)//必須當前對話方塊
if(pmsg->message == wm_keydown)
總結:1:在mfc的對話方塊中,映**wm_char 和wm_keydown 訊息後,但是對話方塊不能響應onkeydown和onchar函式
2:因為mfc在進行設計的時候,這兩個訊息被對話方塊上的控制項截獲了,不能到達這兩個訊息響應函式,對於onkeydown來說,
只要把對話方塊上的控制項都刪除了,就可以接收到wm_keydown訊息,但是還是接收不到wm_char訊息
3:過載pretranslatemessage這個函式可以實現
MFC單文件實現鍵盤按鍵的響應
1.建立乙個單文件的mfc工程,使用class wizard 在檢視類中新增wm keydown,wm keyup wm char鍵盤訊息對映和訊息響應函式。2.在鍵盤響應函式中,判斷按鍵的狀態 首先在view類的標頭檔案中新增 private bool bshiftdown bshiftup bs...
在自定義NSTextField中響應鍵盤訊息
這個 做的事情很簡單,按鍵盤的 上 文字框中的數字會增加,反之,按 下 文字框中的數字會減少。開始時,我們過濾掉除數字鍵之外不需要的按鍵,保留箭頭按鍵。if thearrow length 0 if thearrow length 1 elseif selfstringvalue doubleval...
在C 程式中模擬傳送鍵盤按鍵訊息
using system.runtime.interopservices 引入鍵盤事件函式 dllimport user32.dll public static extern void keybd event byte bvk,byte bscan,int dwflags,int dwextrain...