【发布时间】:2018-05-18 12:04:07
【问题描述】:
我一直在尝试让屏幕键盘 (osk.exe) 在我的应用程序中的 Windows 10 上出现(和消失)。我的应用程序在 Windows 7 中运行良好。在 osk.exe 上调用 ShellExecute() 会显示那里的键盘,但尝试在 Windows 10 中获得相同的行为被证明是一种痛苦。
为了尝试隐藏键盘,一旦它可见,我尝试了这个:
HANDLE wHandle = FindWindowW(L"OSKMainClass", L"On-Screen Keyboard");
if (wHandle != NULL)
{
long style = GetWindowLong(wHandle, GWL_STYLE);
if (style & WS_VISIBLE)
{
return TRUE;
}
else
{
SetWindowLongPtr(wHandle, GWL_STYLE, WS_VISIBLE);
}
但这没有任何效果。
我也尝试使用TabTip keyboard,但无法检测到它何时可见(我可以检测到它何时不可见,但当它可见时我无法处理它! )。
任何有关此问题的帮助将不胜感激。
更新:osk 最初没有显示的原因是“nCmdShowparameter supplied toShellExecute”,原始代码为此值提供了 NULL,它在 Windows 7 上运行良好,所以我认为问题出在其他软件上.将其从 NULL 更改为 SW_SHOWNORMAL 修复了键盘出现的问题。
Paul Sanders 的评论:在 32 位应用程序中,您还必须做一件事,看,看:https://stackoverflow.com/a/50510526/5743288。
【问题讨论】:
-
style &= WS_VISIBLE是一个作业。这将永远是真的。如果要测试,请使用if (style & WS_VISIBLE)... -
style &= WS_VISIBLE 并不总是返回 true,if 语句按预期工作
-
style &= WS_VISIBLE表示style = style & WS_VISIBLE; if (style)...。你是对的,它可以工作,但是,你不能再使用style,因为它现在只有可见位(或者甚至没有)。 -
@Paul Oglivie,你是对的,这是遗留代码,我不完全理解这是清除样式值谢谢 :)
-
这个问题的标题很糟糕。它应该类似于“如何在 Windows 10 中显示和隐藏屏幕键盘?”。请试着说出你的意思。看看它造成的所有麻烦。
标签: c++ c winapi on-screen-keyboard