问题标签 [keyboard-hook]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
winapi - 使用 Windows 挂钩禁用键
我正在尝试使用低级键盘挂钩完全禁用键盘上的字母“a”。问题是当我从keyboardproc返回0时,键没有被禁用,但是当我返回1时它被禁用。我认为从keyboardproc返回而不调用CallNextHookEx会阻止消息。返回 0 和返回 1 有什么区别吗?
windows - 我的应用程序如何找到 Windows 消息的发件人?
我有一个在库中使用键盘挂钩程序的应用程序。一条消息的钩子中的 wParam 是 255,我们认为它是“(保留 / OEMClear)”。我想弄清楚这条消息的来源,因为它会导致我的应用程序在库中崩溃,并且鉴于它不应该发生,最好识别它。该消息仅在我们拥有的一台 PC 上重复出现 - 其他计算机根本看不到该消息。
那么,有没有办法追踪发送到窗口的消息的来源,或者系统上的所有消息?
c# - 使用 c# 阻止快捷键
我正在使用以下代码禁用 Alt+Tab、Alt+Esc、Ctrl+Esc 和 Windows 键,但不知何故它不起作用。请帮我纠正它。
c# - 如何在 C# 中捕获 windows 键、alt+tab、ctrl+alt+delete?
如何使用 C# 在 Windows 应用程序中捕获Windows键、Alt+Tab和Ctrl++ ?AltDelete
macos - 在 OS X 中将修饰键从一个键盘应用到另一个键盘上的按键
我想使用脚踏板来按键,但 OS X 不会在两个不同的设备上关联修饰键。我发现了一些创建虚拟键盘的应用程序,例如 synergy+,所以我知道必须可以从 2 个设备捕获事件并将它们合并,就好像它们来自一个设备一样。关于如何实现这一点的任何想法?
vb.net - 将组合键绑定到您的应用程序
如何将组合键绑定到我的 vb.net 应用程序?我知道这与注册表有关,但我不知道该怎么做或如何去做。我希望用户能够在应用程序打开时按下这些键并让它执行我的功能,但在应用程序关闭时不能。
谢谢您的帮助!
windows - Vista 及更高版本上的系统范围键盘挂钩
我创建了一个系统范围的键盘挂钩 DLL,该 DLL 在 Windows XP 中已成功运行多年。
但是,似乎在某些更高版本的 Windows(Vista Home Premium 和 Windows 7,仅举几例)中,该挂钩要么根本不起作用,要么仅在安装它的应用程序中本地起作用。
我在互联网上的几个地方看到它建议在调用 SetWindowsHookEx 时将 WH-KEYBOARD 更改为 WH-KEYBOARD-LL,但是当我尝试它时这似乎没有帮助。除了将挂钩类型更改为 WH-KEYBOARD-LL 之外,我还需要更改其他内容吗?
(PS:我必须将 WH-KEYBOARD-LL 定义为 13,因为它没有在 Delphi 中定义。我假设这是准确的。)
windows - 键盘钩子中的 ToAscii/ToUnicode 会破坏死键
似乎如果您在全局 WH_KEYBOARD_LL 钩子中调用ToAscii()
或ToUnicode()
同时按下死键,它将被“销毁”。
例如,假设您已将 Windows 中的输入语言配置为西班牙语,并且您想在程序中键入带重音符号的字母á。通常,您会按单引号键(死键),然后按字母“a”,然后在屏幕上按预期显示带重音符号的á 。
但是,如果您调用ToAscii()
或ToUnicode()
在低级键盘挂钩函数中,这将不起作用。似乎死键已被破坏,因此屏幕上没有重音字母á出现。删除对上述函数的调用解决了这个问题......但不幸的是,我需要能够调用这些函数。
我用谷歌搜索了一段时间,虽然很多人似乎有这个问题,但没有提供好的解决方案。
任何帮助将非常感激!
编辑:我正在调用将我的LowLevelKeyboardProcToAscii()
挂钩函数中收到的虚拟键代码和扫描代码转换为将在屏幕上为用户显示的结果字符。
我试过MapVirtualKey(kbHookData->vkCode, 2)
了,但这不像“完整”的功能ToAscii()
;例如,如果您按 Shift + 2,您将得到“2”,而不是“@”(或任何 Shift + 2 将为用户的键盘布局/语言产生的任何内容)。
ToAscii()
是完美的......直到按下死键。
EDIT2:这是钩子函数,删除了不相关的信息:
c# - 修改键盘挂钩代码以适合我自己的目的......从哪里开始?
我正在编写一个位于系统托盘中的程序。在任何打开的应用程序中,它将有一个键盘挂钩到所有键入的输入。我希望它拦截任何输入的输入,在该输入上运行代码,然后发送要输入的新的“正确”字符。这个新角色将出现在具有焦点的应用程序中。
我通过 StackOverflow 上的另一个问题找到了这段代码,它看起来不错。 http://blogs.msdn.com/toub/archive/2006/05/03/589423.aspx
我将它作为一个类添加到我的解决方案中,在 Form1 构造函数中创建了它的一个新实例,并且它可以编译。任何应用程序的任何键入输入都会显示在 Visual Studio 输出窗格中,一次一个字符。
问题是这段代码超出了我的想象。这就是为我的键盘挂钩使用这个简洁的代码的缺点:我没有反复试验来教我如何使用它。
我设想这个程序是这样工作的:
这段代码如何适应这一系列事件?我需要在输入之前读取输入字符。那么,分析输入并确定正确输入的代码将在哪里进行呢?最后,调用什么正确的“sendInput()”类型命令来将字符发送到任何有焦点的应用程序?
这是完整的代码供参考:
感谢您的任何建议!或者,有没有更好的方法来解决这个问题?
谢谢!
更新
我的 HookCallback 方法现在看起来像这样:
射击...添加Marshal.StructureToPtr
已接近,但会导致A first chance exception of type 'System.ArgumentException' occurred in foobar.exe
错误。
带有不安全代码、无编组等的版本(仍然不输出“Z”!)
c# - 使用低级键盘钩子更改键盘字符
我正在创建自定义键盘布局。作为开始步骤,我想让用户按下一个键,让我的键盘钩子拦截它,并输出我选择的不同键。
我找到了这个键盘钩子代码,我试图为我的目的稍微修改:http: //blogs.msdn.com/toub/archive/2006/05/03/589423.aspx
我已将相关方法更改为:
我希望它声明一个新的 KBD 结构对象,将键盘挂钩提供的 KBD 结构复制到其中,修改我的对象的 vkCode 以使用不同的字符,然后用我修改后的版本覆盖提供的对象。这应该希望一切都保持不变,除了它写了一个不同的字符。
不幸的是,它不起作用。键入了原始键盘字符。Visual Studio 输出窗格也出现A first chance exception of type 'System.ArgumentException' occurred in MirrorBoard.exe
错误。
我可以在这里做什么来拦截键盘钩子并将其替换为我选择的字符?
谢谢!