gpt4 book ai didi

c# - 将字符转换为相应的虚拟键码

转载 作者:太空狗 更新时间:2023-10-29 21:25:20 28 4
gpt4 key购买 nike

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

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

谢谢

最佳答案

您应该更清楚您的要求是什么,更具体地说,您认为什么是合适的关键代码。在它的 documentation 中指定的 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

关于c# - 将字符转换为相应的虚拟键码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2934557/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com