如何从键盘按键名称获取其虚拟键码

chanchaw 2012-05-19 07:59:17
RT
通过GetKeyNameText可获取键盘的按键名称

那么如何从键盘的按键名称获取其虚拟键码
使用VkKeyScan的话只能获取字符键的虚拟键码
像ctrl shift等功能键就不能获取了


那么上面这些功能键如何获取其虚拟键码呢
...全文
864 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
ITS_U 2013-10-29
  • 打赏
  • 举报
回复
敢问楼主 这个 映射表你做了么 ,要是做了的话 能发给我一份么 839620816@qq.com
Lactoferrin 2012-05-20
  • 打赏
  • 举报
回复
你为什么要把字符串转换成虚拟键码?这个直接看那个表就知道。
ctrl的vkey是0x11
chanchaw 2012-05-20
  • 打赏
  • 举报
回复
楼上的你没搞清楚状况
知道用VkKeyScan可以从按键名称获取其虚拟键码
不过看VkKeyScan函数原型
其参数是TCHAR 也就是说只有字母键和数字键
等单个字符的名称可以VkKeyScan(“A”) VkKeyScan(“3”)
但是VkKeyScan(“Ctrl”)就不行了


那么如何解决功能键的问题呢
chanchaw 2012-05-20
  • 打赏
  • 举报
回复
看来只能做对应表了
chanchaw 2012-05-20
  • 打赏
  • 举报
回复
看来只能做对应表了
再等等看
下午结贴
Lactoferrin 2012-05-20
  • 打赏
  • 举报
回复
功能键并不具有统一的名字,比如print screen有点键盘上是prntscr,菜单键还根本没名字,所以这是你自己干的事
Lactoferrin 2012-05-20
  • 打赏
  • 举报
回复
这你自己做转换
chanchaw 2012-05-20
  • 打赏
  • 举报
回复
我是想做到 从一个文本中读取按键名称(字符串)
后,即可实现自动向某个进程发送按键消息。
所以需要从字符串转换为虚拟键码或者扫描码


这里要发送的按键是变动的
所以不能像你说的那样做。

chanchaw 2012-05-19
  • 打赏
  • 举报
回复
键盘不同 扫描码不同
不过虚拟码都是一样的


不想做映射表是为了在解决这个问题的
过程中学到更多东西
Eleven 2012-05-19
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

对 是的
VkKeyScan只能对应单字节的如:字母 数字
功能键的名称都是多字节
就不行了

那么要如何根据功能键的名称获取其虚拟键码或者扫描码呢
[/Quote]
这个估计你得自己做个映射表了,而且这个还和键盘的layout有关,键盘不一样,好像名称也可能不一样的。
chanchaw 2012-05-19
  • 打赏
  • 举报
回复
对 是的
VkKeyScan只能对应单字节的如:字母 数字
功能键的名称都是多字节
就不行了

那么要如何根据功能键的名称获取其虚拟键码或者扫描码呢
Eleven 2012-05-19
  • 打赏
  • 举报
回复
你的意思是这个?比如输入的是“Caps Lock”字符串,需要得到是VK_CAPITAL
输入“Space”,得到的是VK_SPACE
??
chanchaw 2012-05-19
  • 打赏
  • 举报
回复
贴这个干吗?
没看清楚我的问题吧
现在是要实现类似VkKeyScan类似的功能,而不是GetKeyNameText
效果刚好是相反的
Eleven 2012-05-19
  • 打赏
  • 举报
回复
看第一个参数的说明
int GetKeyNameText( LONG lParam,
LPTSTR lpString,
int nSize
);

lParam
[in] Specifies the second parameter of the keyboard message (such as WM_KEYDOWN) to be processed. The function interprets the following bit positions in the lParam.
16—23
Scan code.
24
Extended-key flag. Distinguishes some keys on an enhanced keyboard.
25
"Don't care" bit. The application calling this function sets this bit to indicate that the function should not distinguish between left and right CTRL and SHIFT keys, for example.

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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