kam*_*msu 6 c# virtual keycode
目前,我正在使用VkKeyScanWin32 API中的方法将字符转换为其虚拟键代码.但这似乎有的问题是,当我传递小字母时,它工作正常,而当我传入大写字母时,它不返回适当的密钥代码,类似于"("或"}等特殊字符".
我该怎么做呢?无论如何我是否直接将字符串转换为其虚拟等价物而不考虑它是否包含大写字母或特殊字符?
谢谢
您应该更清楚地了解您的要求,更具体地说,您认为是适当的密钥代码.的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;
}
Run Code Online (Sandbox Code Playgroud)
运行此代码段将导致以下输出:
// 56|D8
// SHIFT pressed: True
// CTRL pressed: False
// ALT pressed: False
//
// D8, Shift
// Shift+8
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8818 次 |
| 最近记录: |