c# – 来自rawinput的低级键盘钩子和击键
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – 来自rawinput的低级键盘钩子和击键,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1742字,纯文字阅读大概需要3分钟。
内容图文
![c# – 来自rawinput的低级键盘钩子和击键](/upload/InfoBanner/zyjiaocheng/826/6a589ef2e11f475d8e5e5e9b6dad0073.jpg)
目前,我正在制作一个拦截特定键盘击键的程序(使用其HID进行过滤).因此,为了知道特定设备发送了哪些击键,我使用了RawInput技术,受到这个伟大教程的启发:
http://www.codeproject.com/Articles/17123/Using-Raw-Input-from-C-to-handle-multiple-keyboard
现在,它工作得很好:我可以获得击键并知道哪个键盘生成了它.
我的项目的难点在于拦截和阻止来自这个特定键盘的击键,以避免这些击键到达聚焦应用程序(聚焦意味着操作系统带来的前景窗口).
因此,在具有窗口句柄的所有当前线程上,自然解决方案是低级全局钩子.
我使用并调整了此页面中的代码来执行此操作:
http://blogs.msdn.com/b/toub/archive/2006/05/03/589423.aspx
我在visual studio中创建了一个新项目,以避免在我的工作中乱七八糟.经过一些研究,我能够通过在回调函数中返回值(-1)来阻止所有应用程序的击键:
private static IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam)
{
//Check if we have a key to pass
if (
nCode >= 0 && (
(wParam == (IntPtr)WM_KEYDOWN) || (wParam == (IntPtr)WM_KEYUP) )
)
{
int vkCode = Marshal.ReadInt32(lParam);
if ((Keys)vkCode == Form1.KeysToIgnore)
{
return (IntPtr)(-1);
}
}
return CallNextHookEx(_hookID, nCode, wParam, lParam);
}
为了将所有内容(钩子程序和击键检测)放在一起,我在最终项目中创建了两个线程:
1st:使用RawInput识别每个键击并将其附加到设备
第二:用于挂钩所有窗口并阻止某些击键
线程1被设计为发送键击以阻止线程2,线程2读取发送到所有窗口应用程序的所有消息和来自特定键盘的垃圾键击.我确切地知道这两个线程是同步的.
问题是钩子似乎是在执行Rawinput之前执行的,所以我无法识别发送击键的键盘.我不知道怎么做,也许改变钩子的类型(避免使用低级键盘钩,但使用用户空间级键盘钩).
或者也许有人知道一种聪明的方式来做我想做的事情?
我知道这个请求真的很复杂,请不要犹豫,询问更多细节.
解决方法:
好的,Silence Dogood给了我一个很好的线索:
图书馆拦截非常适合我的使用.你可以在这里找到它:
https://github.com/oblitum/Interception
内容总结
以上是互联网集市为您收集整理的c# – 来自rawinput的低级键盘钩子和击键全部内容,希望文章能够帮你解决c# – 来自rawinput的低级键盘钩子和击键所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。