如何获取前台窗口的键盘状态?我已经搜索过了,但是没有什么有用的
[DllImport("user32.dll")]
public static extern bool GetKeyboardState(byte[] lpKeyState);
获取当前应用程序键盘状态,而不是外部窗口(活动窗口)
更新我已经按照斜杠说的做了,但仍然没有得到任何东西但是当我按照我理解的做时,仍然没有得到任何东西所以有人能告诉我这段代码有什么问题吗
public static char GetCharFromKey(Key key)
{
char ch = ' ';
int virtualKey = KeyInterop.VirtualKeyFromKey(key);
uint x = GetWindowThreadProcessId(GetForegroundWindow(), IntPtr.Zero);
uint scanCode = MapVirtualKey((uint)virtualKey, MapType.MAPVK_VK_TO_VSC);
StringBuilder stringBuilder = new StringBuilder(2);
int result = ToUnicode((uint)virtualKey, scanCode, Encoding.ASCII.GetBytes(GetKeyboardLayout(x).ToString()), stringBuilder, stringBuilder.Capacity, 0);
switch (result)
{
case -1:
break;
case 0:
break;
case 1:
{
ch = stringBuilder[0];
break;
}
default:
{
ch = stringBuilder[0];
break;
}
}
return ch;
}
仍然得到我的应用程序键盘状态而不是前景
您应该首先获得窗口处理程序,然后找到键盘状态:
Dll导入
[DllImport("user32.dll")]
private static extern IntPtr GetForegroundWindow();
[DllImport("user32.dll")]
static extern uint GetWindowThreadProcessId(IntPtr hWnd, IntPtr ProcessId);
[DllImport("user32.dll")]
static extern IntPtr GetKeyboardLayout(uint idThread);
代码:uint x = GetWindowThreadProcessId(GetForegroundWindow(), IntPtr.Zero);
keyboard = GetKeyboardLayout(x).ToString();//holds the state