240上位机VC MFC点亮关闭键盘指示灯
240上位机VC MFC点亮关闭键盘指示 功能展示 般键盘上都有Num,Caps,Scroll三个指示灯,当用户在键盘上按下对应的键,这三盏灯都会对应的点亮,我们当前例程用代码实现这三盏灯的点亮与关闭,效果如图;点击对应按钮键盘上对应灯会点亮,按钮左侧指示用灯也会同时点亮; 要点提示 1.键盘上三盏灯都是用户通过按下键盘上的按键点亮,我们可以模拟用户按下与放开键盘上的按键来点亮与关闭键盘上的指示灯,实现这一模拟按键功能的函数是keybd_event(); 此函数能触发一个按键事件,也就是说能产生一个WM_KEYDOWN或WM_KEYUP消息; 函数原型为:VOIDkeybd_event( BYTE bVk, BYTE bScan, DWORD dwFlags, DWORD dwExtraInfo ); 第一个为按键的虚拟键值,如回车键为vk_return, tab键为vk_tab(其他常用模拟键的键值对照表可以查阅MSDN); 第二个参数为扫描码,一般不用设置,用0代替就行; 第三个参数为选项标志,如果为keydown则置0即可,如果为keyup则设成"KEYEVENTF_KEYUP"; 第四个参数一般也是置0即可。 2.全部键盘按键状态的获取可以用函数GetKeyboardState()函数跟一个256字节的数组,数组用于接收每个虚拟键的状态 实现功能 1.新建基于对话框的应用程序 2.拖拽三个按钮< (num lock)数字锁定指示灯开/关><(caps lock)大写锁定指示灯开/关><(ScrollLock)滚动锁定指示灯开/关>关联函数,再添加一自定义函数void SetKeyLight(); - void CGkbc8Dlg::OnButton2()
- {
- keybd_event(VK_CAPITAL,0,KEYEVENTF_EXTENDEDKEY|0,0);
- keybd_event(VK_CAPITAL,0,KEYEVENTF_EXTENDEDKEY|KEYEVENTF_KEYUP,0);
- }
- void CGkbc8Dlg::OnButton3()
- {
- keybd_event(VK_SCROLL,0,KEYEVENTF_EXTENDEDKEY|0,0);
- keybd_event(VK_SCROLL,0,KEYEVENTF_EXTENDEDKEY|KEYEVENTF_KEYUP,0);
- }
- void CGkbc8Dlg::SetKeyLight()
- {
- BYTE State[256];
- GetKeyboardState((LPBYTE)&State);//获得所有键盘状态
- CButton *pBtn = (CButton*)GetDlgItem(IDC_RADIO1);
- if(State[VK_NUMLOCK]&1)
- pBtn->SetCheck(1);
- else
- pBtn->SetCheck(0);
- CButton *pBtn2 = (CButton*)GetDlgItem(IDC_RADIO2);
- if(State[VK_CAPITAL]&1)
- pBtn2->SetCheck(1);
- else
- pBtn2->SetCheck(0);
- CButton *pBtn3 = (CButton*)GetDlgItem(IDC_RADIO3);
- if(State[VK_SCROLL]&1)
- pBtn3->SetCheck(1);
- else
- pBtn3->SetCheck(0);
- }
复制代码- void CGkbc8Dlg::OnButton1()
- {
- keybd_event(VK_NUMLOCK,0,KEYEVENTF_EXTENDEDKEY|0,0);//模拟按下数字锁定键
- keybd_event(VK_NUMLOCK,0,KEYEVENTF_EXTENDEDKEY|KEYEVENTF_KEYUP,0);//模拟放开数字锁定键
- }
复制代码3. SetKeyLight()函数在程序初始化和预发送消息函数中调用一次,即在PreTranslateMessage() OnInitDialog()中调用一 我们来演示下功能实现的整个过程
|