【发布时间】:2018-04-21 14:00:09
【问题描述】:
我正在尝试确定 Windows 10 虚拟触摸键盘是否可见,以了解是否从我的应用程序中打开它。在最新的 Windows 10 更新 15063 或之前的更新之前,以下代码一直运行良好。似乎微软可能对窗口样式进行了一些更改,但我无法弄清楚。
public static bool IsKeyboardVisible()
{
IntPtr keyboardHandle = GetKeyboardWindowHandle();
// Specifies we wish to retrieve window styles.
int GWL_STYLE = -16;
//The window is disabled. See http://msdn.microsoft.com/en-gb/library/windows/desktop/ms632600(v=vs.85).aspx.
UInt32 WS_VISIBLE = 0x10000000;
UInt32 WS_DISABLED = 0x08000000;
UInt32 WS_POPUP = 0x80000000;
bool visible = false;
bool disabled = false;
if (keyboardHandle != IntPtr.Zero)
{
UInt32 style = GetWindowLong(keyboardHandle, GWL_STYLE);
visible = ((style & WS_VISIBLE) == WS_VISIBLE);
disabled = ((style & WS_DISABLED) == WS_DISABLED); // ref https://stackoverflow.com/questions/11065026/get-window-state-of-another-process
log.InfoFormat("style:{0:X4} visible:{1} disabled:{2}", style, visible, disabled);
}
return visible && !disabled ;
}
这与:Show touch keyboard (TabTip.exe) in Windows 10 Anniversary edition
【问题讨论】:
-
已经打开了,打开会不会疼?
-
也许
GetKeyboardWindowHandle失败了。我们不知道它是什么。此外,您对WS_VISIBLE的定义并不完全符合应有的定义(参见window styles)。 -
是的,肯定是你的
WS_VISIBLE错了。你的实际上是WS_POPUP | WS_VISIBLE | WS_CLIPSIBLINGS,但在 15063 中,键盘窗口不再有WS_POPUP。无论如何,您应该只测试WS_VISIBLE即0x10000000 -
好电话。我将代码更改为上面的代码,但 Win 10 正在返回
0x84000000,即使在我打开键盘并在屏幕上看到键盘后也不可见。 -
@JonathanPotter 没有可靠的方法来“打开”它。只有切换有效。见stackoverflow.com/a/40921638/332528
标签: c# windows winapi touch virtual-keyboard