将字符转换为相应的虚拟键代码

目前,我正在使用Win32 API中的方法VkKeyScan将字符转换为其虚拟键代码。 但这似乎有的问题是,当我传递小字母时,它工作正常,而当我传入大写字母时,它不返回适当的密钥代码,类似于“(”或“}等特殊字符”。

我该怎么做呢? 无论如何我是否可以直接将字符串转换为虚拟等效字符而不考虑它是否包含大写字符或特殊字符?

谢谢

您应该更清楚地了解您的要求,更具体地说,您认为是适当的密钥代码。 其VkKeyScan中指定的VkKeyScan返回低位字节中的虚拟键代码和返回值的高字节中的移位状态。

这在下面的代码片段中进行了演示,该代码片段使用'('字符作为VkKeyScan方法的输入。

 [DllImport("user32.dll")]static extern short VkKeyScan(char ch); static void Main(string[] args) { var helper = new Helper { Value = VkKeyScan('(') }; byte virtualKeyCode = helper.Low; byte shiftState = helper.High; Console.WriteLine("{0}|{1}", virtualKeyCode, (Keys)virtualKeyCode); Console.WriteLine("SHIFT pressed: {0}", (shiftState & 1) != 0); Console.WriteLine("CTRL pressed: {0}", (shiftState & 2) != 0); Console.WriteLine("ALT pressed: {0}", (shiftState & 4) != 0); Console.WriteLine(); Keys key = (Keys)virtualKeyCode; key |= (shiftState & 1) != 0 ? Keys.Shift : Keys.None; key |= (shiftState & 2) != 0 ? Keys.Control : Keys.None; key |= (shiftState & 4) != 0 ? Keys.Alt : Keys.None; Console.WriteLine(key); Console.WriteLine(new KeysConverter().ConvertToString(key)); } [StructLayout(LayoutKind.Explicit)] struct Helper { [FieldOffset(0)]public short Value; [FieldOffset(0)]public byte Low; [FieldOffset(1)]public byte High; } 

运行此代码段将导致以下输出:

 // 56|D8 // SHIFT pressed: True // CTRL pressed: False // ALT pressed: False // // D8, Shift // Shift+8