C# 什么';虚拟密钥代码数组中的顺序是什么?

C# 什么';虚拟密钥代码数组中的顺序是什么?,c#,arrays,keyboard,key,C#,Arrays,Keyboard,Key,我需要知道调用GetKeyboardState方法后虚拟键代码数组的顺序 提醒: [DllImport("user32.dll")] [return: MarshalAs(UnmanagedType.Bool)] private static extern bool GetKeyboardState(byte[] lpKeyState); 事实上,我需要将Menu、LMenu、RMenu、Control、LControl和RControl值更改为0。很明显,它们是按虚拟

我需要知道调用
GetKeyboardState
方法后虚拟键代码数组的顺序

提醒:

    [DllImport("user32.dll")]
    [return: MarshalAs(UnmanagedType.Bool)]
    private static extern bool GetKeyboardState(byte[] lpKeyState);

事实上,我需要将Menu、LMenu、RMenu、Control、LControl和RControl值更改为0。

很明显,它们是按虚拟键代码排序的。一些可能有用的代码:

var keys = new byte[256];
if (!GetKeyboardState(keys)) throw new Win32Exception();
keys[(int)Keys.Menu] = keys[(int)Keys.LMenu] = keys[(int)Keys.RMenu] = 0;
keys[(int)Keys.ControlKey] = keys[(int)Keys.LControlKey] = keys[(int)Keys.RControlKey] = 0;
if (!SetKeyboardState(keys)) throw new Win32Exception();

请注意,pinvoke声明缺少必需的SetLastError=true。这是pinvoke.net网站上的一个bug,我无法修复。

谢谢,它似乎可以工作。请注意,这些键需要一个int cast来用作数组索引。