C#获取,设置键盘Num,Caps,Scroll键状态 |
您所在的位置:网站首页 › 键盘上的sclk和scroll › C#获取,设置键盘Num,Caps,Scroll键状态 |
以前使用的显示终端设备,没有配备大键盘,只有一个数字小键盘,是用来输密码的。以后客户有需求,需要控制屏幕提示信息的显示,敏感信息他们想显示的时候就显示,不想显示的时候就显示默认信息。由于软件界面是全屏的,也不能给客户配个鼠标在界面上加上菜单,让他们去点。我就利用了数字小键盘上的Num Lock键,灯亮的时候就是显示信息,他们不想显示的时候就把数字小键盘上的NUM灯按灭,这样也很直观,方便。要达到这一效果首先要能获取Num Lock键的状态,还要能控制Num Lock键的亮灭。 我用C#实现,因为要调用API, 首先引用using System.Runtime.InteropServices; 然后是声明: 1: /// 2: /// 获取键状态 3: /// 4: /// 5: /// 6: [DllImport("user32.dll",CharSet = CharSet.Auto, 7: ExactSpelling = true, 8: CallingConvention = CallingConvention.Winapi)] 9: public static extern short GetKeyState(int keyCode); 10: 11: 12: /// 13: /// 改变键状态 14: /// 15: /// 16: /// 17: /// 18: /// 19: [DllImport("user32.dll")] 20: static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, UIntPtr dwExtraInfo);由于键盘上的Caps Lock和Scroll Lock和Num Lock类型是一样的,就把其它两个键一起说了,省了用到了再去乱找。三个键的常量声明: 1: //按键状态 2: const int KEYEVENTF_EXTENDEDKEY = 0x1; 3: const int KEYEVENTF_KEYUP = 0x2; 4: 5: //键值 6: const int VK_NUMLOCK = 0x90; 7: const int VK_CAPITAL=0x14; 8: const int VK_SCROLL = 0x91;
获取键状态和设置键状态: 1: //获取键状态 2: bool CapsLock = (((ushort)GetKeyState(0x14)) & 0xffff) != 0; 3: bool NumLock = (((ushort)GetKeyState(0x90)) & 0xffff) != 0; 4: bool ScrollLock = (((ushort)GetKeyState(0x91)) & 0xffff) != 0; 1: //设置NUM Lock 2: private void btnNum_Click(object sender, EventArgs e) 3: { 4: keybd_event(VK_NUMLOCK, 0x45, KEYEVENTF_EXTENDEDKEY, (UIntPtr)0); 5: keybd_event(VK_NUMLOCK, 0x45, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, (UIntPtr)0); 6: 7: Application.DoEvents(); 8: ViewKeyState(); 9: 10: } 11: 12: //设置Caps Lock 13: private void btnCaps_Click(object sender, EventArgs e) 14: { 15: 16: keybd_event(VK_CAPITAL, 0x45, KEYEVENTF_EXTENDEDKEY, (UIntPtr)0); 17: keybd_event(VK_CAPITAL, 0x45, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, (UIntPtr)0); 18: 19: 20: Application.DoEvents(); 21: ViewKeyState(); 22: } 23: 24: //设置Scroll Lock 25: private void btnScroll_Click(object sender, EventArgs e) 26: { 27: 28: keybd_event(VK_SCROLL, 0x45, KEYEVENTF_EXTENDEDKEY, (UIntPtr)0); 29: keybd_event(VK_SCROLL, 0x45, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, (UIntPtr)0); 30: 31: Application.DoEvents(); 32: ViewKeyState(); 33: }
ViewKeyState方法是刷新三个灯的状态以及按键显示文字。 1: /// 2: /// 显示状态 3: /// 4: private void ViewKeyState() 5: { 6: //获取键状态 7: bool CapsLock = (((ushort)GetKeyState(0x14)) & 0xffff) != 0; 8: bool NumLock = (((ushort)GetKeyState(0x90)) & 0xffff) != 0; 9: bool ScrollLock = (((ushort)GetKeyState(0x91)) & 0xffff) != 0; 10: 11: //根据键状态设置按钮文字 12: btnCaps.Text= CapsLock ? "关闭":"开启"; 13: btnNum.Text = NumLock ? "关闭" : "开启"; 14: btnScroll.Text = ScrollLock ? "关闭" : "开启"; 15: 16: //显示状态 17: rdbCapsLock.Checked= CapsLock; 18: rdbNumLock.Checked= NumLock; 19: rdbScrollLock.Checked= ScrollLock; 20: }可以把Windows自带的虚拟键盘调用出来看一下效果: 声明:由于是一年多前做的东西了,也忘了参考的那些网站,不能给出链接,在此表示歉意。 代码下载
|
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |