解释 SetWindowsHookEx / WH_KEYBOARD_LL 的正确逻辑

2024-01-25

转换消息的正确方法是什么SetWindowsHookEx http://msdn.microsoft.com/en-us/library/windows/desktop/ms644990%28v=vs.85%29.aspx with WH_KEYBOARD_LL http://msdn.microsoft.com/en-us/library/windows/desktop/ms644985%28v=vs.85%29.aspx转化为按下的键的有用表示?

我知道这很可能涉及理解本地键盘的映射。 (注意:为了简单起见,我只考虑按下按键的时间,而不考虑释放按键的时间)

概括来说,似乎有以下三种情况:

  • 按下特殊键(Ctrl/Escape/Shift/Alt)
  • 按下标准键(A-Z, 0-9等...请注意a and A两者都读作A)
  • Some hard to define cases like number pad and F1-F12

可以根据需要处理特殊键,并且有一些有用的查找System.Windows.Forms.Keys http://msdn.microsoft.com/en-us/library/system.windows.forms.keys%28v=vs.85%29.aspx

but if I were to do (on a UK-English Keyboard) an exclamation mark, it's detected as Shift-Down1Shift up

由于我的挂钩级别太低(我相信),无法在代码通过键盘“转换”层后获取代码,所以我很好奇如何正确解释它们。

至于我为什么要这样做。它最初是为了为我编写的媒体播放器提供方便的快捷方式,该播放器可以在任何地方工作,甚至在游戏中(有些游戏似乎会拦截击键并阻止它们传播到操作系统)。实际上,我已经得到了足够的东西来满足我的需要,只要我使用该应用程序(仅限可能的用户),但我的好奇心被激起了,如果我愿意的话,我可以如何进一步采取这一点。


根据语言(及其死键的使用),这可能非常复杂。ToAsciiEx适用于简单的情况,但如果涉及死键或输入法,事情很快就会变得非常复杂。

迈克尔·卡普兰的博客 http://blogs.msdn.com/b/michkap/有一系列关于键盘布局和键盘布局创建器 http://msdn.microsoft.com/en-us/goglobal/bb964665.aspx,这是一个用于创建键盘布局的工具(将键映射到字符的最简单方法)。当一组击键映射到单个字符时,将使用键盘布局创建器。在这些情况下,可以完成映射,但是当需要多个键来确定一个字符时,映射就变得有些棘手。

日语、中文或韩语等语言没有从击键到字符的单一映射。对于这些语言,需要输入法编辑器;这些通常使用文本服务框架 http://msdn.microsoft.com/en-us/library/windows/desktop/ms629032%28v=vs.85%29.aspx,这是一组广泛的 API,输入法编辑器(以及其他文本服务,例如手写识别和语音识别)使用它们与应用程序进行通信,以确定从击键到字符的映射。由于从击键到 IME 字符的映射是由代码定义的,因此低级键盘挂钩通常根本无法执行此映射。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

解释 SetWindowsHookEx / WH_KEYBOARD_LL 的正确逻辑 的相关文章

随机推荐

  • IValueConverter 并绑定 DependencyObject

    我有一个ComboBox我需要做一个转换器SelectedItem 问题是IValueConverter需要绑定值 但也需要一个集合 配置了一个DependencyObject但它给了我一个错误消息 类型 System Windows Da
  • 当电影绘制到画布中时 Android 错误信号 11

    我正在开发一个 Android 应用程序 我试图在其中显示 GIF 图像 为此 我使用 Movie 类并创建了一个扩展 View 的类 GIFView 我从 Movie decodeFile 方法获取 Movie 实例 调用 Movie d
  • WiX 主要升级 Windows 服务,保留 .config,并避免重新启动

    我正在努力让 MajorUpgrade ServiceControl config 文件能够很好地协同工作 在我提出其他问题之后 https stackoverflow com questions 22770414 wix majorupg
  • git-shell - 新存储库

    我有一台专门的服务器git用户和存储库我正在尝试使用git shell method http git scm com book en Git on the Server Setting Up the Server让我的开发人员能够从事多个
  • 使用反向引用作为重复计数的正则表达式

    有什么方法可以构造一个按如下方式工作的正则表达式 将整数匹配为组1 然后匹配 1整数 This d s d 1 不幸的是 这是不允许的 但我发现它很好地描述了我想要实现的目标 你可以做这样的事情 var numbers 3 7 6 5 4
  • cakephp 从另一个助手中访问助手

    如何使用我构建的新帮助程序方法访问另一个帮助程序 例如 FormHelper class AppHelper extends Helper public function generateSpecialInput return this g
  • 通过shiny + rgl捕获坐标

    是否可以使用 recognize3d 或类似的方法来捕获通过渲染 Rglwidget 渲染的 rgl 场景中的地标坐标 我在闪亮中使用以下代码进行渲染 server observeEvent input mspec3D tt1 lt out
  • 在页面之间导航时闪烁

    当我在页面之间导航时 我的phonegap jquery 移动应用程序大部分时间都会闪烁 这是正常现象还是有解决办法 ui page webkit backface visibility hidden 这对我在phonegap jquery
  • 使用 openCv c++ 复制图像的一部分

    我正在使用 opencv 我想从另一个图像的一部分创建一个图像 我没有找到这样做的函数 所以我尝试实现我的想法 其中包括逐像素复制图像 但徒劳地我没有得到我正在等待的结果 任何人都有另一种想法 Code include cv h inclu
  • fullcalendar 无法读取未定义的属性“fn”

    我嵌入了fullcalendar min js到我的项目 但我收到此错误 错误日志显示 无法读取未定义的属性 fn 见下图 我检查了这个问题 建议使用jQuery 2 0 0 并且我肯定会使用jQuery v3 3 1 但无助于问题的解决
  • React Native RNFetchBlob 下载后获取文件的 URI

    我正在开发一个 React Native 项目 我现在想做的是下载并将下载的文件保存到设备上 我正在使用这个包 https www npmjs com package rn fetch blob https www npmjs com pa
  • Eclipse:将编辑器与内容类型相关联

    我可以根据内容类型而不是单个文件类型更改编辑器关联吗 如果我去Window gt Preferences gt General gt Editors gt File Associations 我看到基于文件扩展名的文件类型列表 例如 单击
  • 原型编程中对象和原型有什么区别?

    我试图理解创建和使用对象的 JavaScript 方式 但我认为我对对象和原型产生了误解 在我开始的一个新项目中 我决定尝试原型继承 我很困惑 这是否意味着我应该创建一个我打算使用的对象 然后基于该对象创建其他对象Object create
  • 使用 $inc 通过 Mongoose 增加文档属性

    我想增加views每次访问我的文档时都会加 1 到目前为止 我的代码是 Document find sort date 1 limit limit exec 哪里有 inc适合这里吗 从未使用过猫鼬 但快速查看文档here http mon
  • R bquote 的反向行为

    bquote函数允许计算表达式中包含的部分 称呼 例如 a lt 2 b lt 100 bquote 2 a x log10 b 会回来 4 x 2 我想重写这个函数来评估除了里面的东西之外的所有东西 称呼 这是期望的行为 a lt 2 b
  • htaccess 将域名重定向到 https,子域重定向到 https,非 www 重定向到 www

    我想这样做 强制我的主域使用 https http to https www https www http www http www to https www https www 但不适用于子域 http subdomain domain
  • 鼠标悬停时突出显示文本行[重复]

    这个问题在这里已经有答案了 我目前正在开发一个网站 该网站将提供大量故事供人们阅读 基本上是一个博客 我想让它们尽可能容易阅读 并且我认为用光标 突出显示 文本行会很有用 有点像读书时用手指跟随文本行 我偶然发现这个答案 https sta
  • 解释 jstat 结果

    我是 jstat 工具的新手 因此我做了如下示例 jstat gcutil t 4001 5000 Timestamp S0 S1 E O P YGC YGCT FGC FGCT GCT 565088 4 0 00 0 89 75 86 4
  • 为什么 Typescript 编译器将函数的返回类型推断为“原始类型”,而返回值是已知值?

    正如你在下面的代码中看到的 TS编译器infers类型为 const message Math random gt 0 5 hello can you here me null So message变量被推断为 hello can you
  • 解释 SetWindowsHookEx / WH_KEYBOARD_LL 的正确逻辑

    转换消息的正确方法是什么SetWindowsHookEx http msdn microsoft com en us library windows desktop ms644990 28v vs 85 29 aspx with WH KE