在C++中有没有一种方法可以从字符获取虚拟键代码?

9

有没有方法可以实现这个功能?我正在使用 INPUT 类来模拟按键,当想要按下变量类型为 char 的按键时,我需要使用以下方法:

INPUT ip;
ip.type = INPUT_KEYBOARD;

//a bunch of code, and flags...

ip.ki.wVk = toupper(foo);

...其中foo是自定义的char类型。

这很好用,直到用户输入一个不是普通字母的字符,结果会注册完全不同的键(这是可以理解的)。这就是为什么我想知道是否有可能通过变量的值获取十六进制键码的方法。

我知道可以使用大型switch(foo) case '1': //等等...将不支持的字符替换为相应的键码,但实际上,这意味着很多不必要的代码。

那么,有没有办法?非常感谢您的回答,如果没有,我将以更复杂的方式解决它。然而,由于这个问题已经发生了几次,我觉得知道这个方法可能对参考有好处。


1
我认为您想要使用 VkKeyScanEx(...) 方法。该方法的文档链接为:http://msdn.microsoft.com/zh-cn/library/windows/desktop/ms646332(v=vs.85).aspx - clstrfsck
这不是标准的C++,你在使用什么环境?(它类似于SDL,但我不确定) - Mats Petersson
@msandiford 非常感谢!但是,您是否知道如何使该函数正常工作?老实说,我对编程一般都很陌生,这个代码没有起作用:cout << VkKeyScanEx('c', (LoadKeyboardLayout(0x1053)))。显然,该函数无法进行重载,这意味着我需要某种区域设置标识符作为第二个参数...我并不指望它能够正常工作,但是如果您需要知道,它是针对瑞典键盘设计的。 - Max
1
没关系,我使用GetKeyboardLayout(0)解决了它。再次感谢! - Max
GetKeyboardLayout(0) 看起来可以加载程序窗口所在系统的当前键盘布局 :) - jave.web
1个回答

5

要将我的评论转化为答案...

我认为你需要使用VkKeyScanEx(...)函数。这个函数可以将一个TCHAR转换成一个虚拟键码和一组键盘修饰符,你可以将它们与SendInput(...)函数一起使用。


2
首先,您需要一些键盘布局:HKL currentKBL = GetKeyboardLayout(0); 然后您可以调用类似 VkKeyScanEx(YOUR_CHAR, currentKBL); 的东西。 - jave.web

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接