如何用钩子自由锁定一个键盘上的任意一个键

另一种灿烂生活 2017-06-23 09:21:08
我已经可以实现锁定一些特定的键,如下:
public static int KeyboardHookProc(int nCode, Int32 wParam, IntPtr lParam)
{
if (nCode >= 0)
{
//线程键盘钩子判断是否按下键
//Keys keyData = (Keys)wParam;
//if(lParam.ToInt32() > 0)
//{
// // 键盘按下
//}
//if(lParam.ToInt32() < 0)
//{
// // 键盘抬起
//}
//********************************
//全局键盘钩子判断是否按下键
//wParam = = 0x100 // 键盘按下
//wParam = = 0x101 // 键盘抬起

KeyMSG kbh = (KeyMSG)Marshal.PtrToStructure(lParam, typeof(KeyMSG));

//锁定键盘描述.以下只给出部分内容,其它类似。
//锁定A-C
if (kbh.vkCode == (int)Keys.A) { return 1; }
if (kbh.vkCode == (int)Keys.B) { return 1; }
if (kbh.vkCode == (int)Keys.C) { return 1; }

//锁定0-2键
if (kbh.vkCode == (int)Keys.D0) { return 1; }
if (kbh.vkCode == (int)Keys.D1) { return 1; }
if (kbh.vkCode == (int)Keys.D2) { return 1; }

//锁定数字键盘上的0-2键
if (kbh.vkCode == (int)Keys.NumPad0) { return 1; }
if (kbh.vkCode == (int)Keys.NumPad1) { return 1; }
if (kbh.vkCode == (int)Keys.NumPad2) { return 1; }

//锁定F1-F3
if (kbh.vkCode == (int)Keys.F1) { return 1; }
if (kbh.vkCode == (int)Keys.F2) { return 1; }
if (kbh.vkCode == (int)Keys.F3) { return 1; }

//如果返回1,则结束消息,不再传递。
//如果返回0或调用CallNextHookEx函数,则消息出了这个钩子继续往下传递,
//也就是传给消息真正的接受者
}
return CallNextHookEx(hKeyboardHook, nCode, wParam, lParam);
}
这只是锁定了0.1.2和abc,如果说我要锁定自己在控制端键盘上输入的任意一个键(注意,是一个键就行),我应该怎么做呢?
...全文
358 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Leckun 2017-06-28
  • 打赏
  • 举报
回复
设置一个全局列表(例如static List<int>),传过来的键更新里面的内容后,在KeyboardHookProc判断时,判断这个List
正怒月神 2017-06-27
  • 打赏
  • 举报
回复
其实说白了,就是一个 string转枚举值的过程 通过下面的你就知道了这个枚举值

 var v = (Keys)Enum.Parse(typeof(Keys), "A");
  • 打赏
  • 举报
回复
我这边是两个端 一个控制端,一个受控端,我发上去的代码在受控端,现在要实现的是在控制端输入一个键值,受控端就能锁定那个输入的键值。不是改一改那个if就行了吧。。。
清江堤畔 2017-06-26
  • 打赏
  • 举报
回复
留下一个 if 就行了,再修改里面的 Keys 值为你想锁定的键值
泡泡龙 2017-06-25
  • 打赏
  • 举报
回复
居然没看懂什么意思

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧