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

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

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


那么上面这些功能键如何获取其虚拟键码呢
...全文
418 点赞 收藏 17
写回复
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.
回复 点赞
发动态
发帖子
VC/MFC
创建于2007-09-28

7889

社区成员

42.1w+

社区内容

VC/MFC相关问题讨论
社区公告
暂无公告