我需要知道调用GetKeyboardState
方法后虚拟键代码数组的顺序是什么。
提醒:
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern bool GetKeyboardState(byte[] lpKeyState);
实际上,我需要将Menu,LMenu,RMenu,Control,LControl和RControl值更改为0.
答案 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网站上的一个错误,我无法修复它。