虚拟键码数组中的顺序是什么?

时间:2014-05-30 17:41:59

标签: 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.

1 个答案:

答案 0 :(得分:2)

有点显而易见,它们是按虚拟键码排序的。一些可能有用的代码:

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网站上的一个错误,我无法修复它。