根据键盘键值取得键名的问题!

w_anthony 2007-06-06 07:40:54
char str[100];
::GetKeyNameText(::MapVirtualKey(nKeyCode,0)<<16,str,100);

以上语句是我从网上苦苦搜寻而来的。
现在不是在PreTranslateMessage或OnKeyDown里面,没有GetKeyNameText()所需的第一个参数,所以只能通过MapVirtualKey()生成。
不过诸如VK_LEFT,VK_DELETE之类的按键,因为GetKeyNameText所需的第一个参数的第25位为1,而MapVirtualKey()所返回的值却不包含这个位的内容即为0,导致与小键盘的按键名称混淆。
请教各位高人,应如何获得VK_LEFT,VK_DELETE之类的正确键名呢?
...全文
504 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
w_anthony 2007-06-07
  • 打赏
  • 举报
回复
问题是有很多键阿,不过如果真没办法,那也只能这样搞了……

还有一个更麻烦的问题,怎么区分"/"和"Num /",接收键盘按键的WM_KEYDOWN消息写入配置文件的时候,发现这两个的键值是相同的,而配置文件里面只写键值,是不是一开始的设计就有问题……
龙凤呈祥焱 2007-06-07
  • 打赏
  • 举报
回复
那你可以自己增加第二十五位啊.|操作嘛.
w_anthony 2007-06-07
  • 打赏
  • 举报
回复
To aaronwang81(痞子)
左右Ctrl和Shift是用25位区别的没错,但是上下左右,delete,home,end这些小键盘上可以通过NumLock开关的按键也要通过25位区分是小键盘还是主键盘区的按键。比如,上面的代码nKeyCode用VK_UP替代,不管NumLock有没有开起来,返回的结果都是"Num 8"。至于到底是UP还是Num 8也是通过25位决定的。

其实我就是想写一个按键设置的程序,因为这个程序运行时要去读配置文件来初始化当前按键设置的,配置文件里面写的是键值,现在就是要设法将他转换为正确的键名。
hotsea 2007-06-07
  • 打赏
  • 举报
回复
我不明白你是什么意思,要写程序获得?还是想知道键盘字符?
//0x08,//BACKSPACE",//VK_BACK 08 BACKSPACE key
//0x09,//"TAB",//VK_TAB 09 TAB key
//0x0d,//"ENTER",//VK_RETURN 0D ENTER key
//0x10,//"SHIFT",//VK_SHIFT 10 SHIFT key
//0x11,//"CTRL",//VK_CONTROL 11 CTRL key
//0x12,//"ALT",//VK_MENU 12 ALT key
//0x13,//"PAUSE",//VK_PAUSE 13 PAUSE key
//0x1b,//"ESC",//VK_ESCAPE 1B ESC key
//0x21,//"PAGE UP",//VK_PRIOR 21 PAGE UP key
//0x22,//"PAGE DOWN",//VK_NEXT 22 PAGE DOWN key
//0x23,//"NULL",//VK_END 23 END key
//0x24,//"HOME",//VK_HOME 24 HOME key
0x25,//"LEFT ARROW",//VK_LEFT 25 LEFT ARROW key
0x26,//"UP ARROW",//VK_UP 26 UP ARROW key
0x27,//"RIGHT ARROW",//VK_RIGHT 27 RIGHT ARROW key
0x28,//"DOWN ARROW",//VK_DOWN 28 DOWN ARROW key
//0x2c,//"PRINT SCREEN",//VK_SNAPSHOT 2C PRINT SCREEN key
//0x2d,//"INSERT",//VK_INSERT 2D INS key
//0x2e,//"DELETE",//VK_DELETE 2E DEL key
0x30,//"0",//30 0 key
0x31,//"1",//31 1 key
0x32,//"2",//32 2 key
0x33,//"3",//33 3 key
0x34,//"4",// 34 4 key
0x35,//"5",// 35 5 key
0x36,//"6",// 36 6 key
0x37,//"7",// 37 7 key
0x38,//"8",// 38 8 key
0x39,//"9",// 39 9 key
0x41,//"A",//41 A key
0x42,//"B",//42 B key
0x43,//"C",//43 C key
0x44,//"D",//44 D key
0x45,//"E",//45 E key
0x46,//"F",//46 F key
0x47,//"G",//47 G key
0x48,//"H",//48 H key
0x49,//"I",//49 I key
0x4a,//"J",//4A J key
0x4b,//"K",//4B K key
0x4c,//"L",//4C L key
0x4d,//"M",//4D M key
0x4e,//"N",//4E N key
0x4f,//"O",//4F O key
0x50,//"P",//50 P key
0x51,//"Q",//51 Q key
0x52,//"R",//52 R key
0x53,//"S",//53 S key
0x54,//"T",//54 T key
0x55,//"U",//55 U key
0x56,//"V",//56 V key
0x57,//"W",//57 W key
0x58,//"X",//58 X key
0x59,//"Y",//59 Y key
0x5a,//"Z",//5A Z key
//0x5b,//"Windows key",//VK_LWIN 5B Left Windows key (Microsoft? Natural? keyboard)
//0x60,//"NUMPAD0",//VK_NUMPAD0 60 Numeric keypad 0 key
//0x61,//"NUMPAD1",//VK_NUMPAD1 61 Numeric keypad 1 key
//0x62,//"NUMPAD2",//VK_NUMPAD2 62 Numeric keypad 2 key
//0x63,//"NUMPAD3",//VK_NUMPAD3 63 Numeric keypad 3 key
//0x64,//"NUMPAD4",//VK_NUMPAD4 64 Numeric keypad 4 key
//0x65,//"NUMPAD5",//VK_NUMPAD5 65 Numeric keypad 5 key
//0x66,//"NUMPAD6",//VK_NUMPAD6 66 Numeric keypad 6 key
//0x67,//"NUMPAD7",//VK_NUMPAD7 67 Numeric keypad 7 key
//0x68,//"NUMPAD8",//VK_NUMPAD8 68 Numeric keypad 8 key
//0x69,//"NUMPAD9",//VK_NUMPAD9 69 Numeric keypad 9 key
//0x70,//"F1",//VK_F1 70 F1 key
//0x71,//"F2",//VK_F2 71 F2 key
//0x72,//"F3",//VK_F3 72 F3 key
//0x73,//"F4",//VK_F4 73 F4 key
//0x74,//"F5",//VK_F5 74 F5 key
//0x75,//"F6",//VK_F6 75 F6 key
//0x76,//"F7",//VK_F7 76 F7 key
//0x77,//"F8",//VK_F8 77 F8 key
//0x78,//"F9",//VK_F9 78 F9 key
//0x79,//"F10",//VK_F10 79 F10 key
//0x7a,//"F11",//VK_F11 7A F11 key
//0x7b//"F12",//VK_F12 7B F12 key
龙凤呈祥焱 2007-06-07
  • 打赏
  • 举报
回复
第二十五位的作用不是区别是否区分左右CTRL和SHIFT吗?
w_anthony 2007-06-07
  • 打赏
  • 举报
回复
高人都跑哪去了?快来帮个忙阿!!!网上实在是搜不到了……
hua2136 2007-06-06
  • 打赏
  • 举报
回复
关注一下
w_anthony 2007-06-06
  • 打赏
  • 举报
回复
自己顶!没人做过按键设置的程序吗?那里面的键名是怎么得到的?

16,551

社区成员

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

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

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