You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows 10 中osk.exe屏幕键盘显示与隐藏问题求助

Windows 10 屏幕键盘(osk.exe)显示/隐藏问题求助

我最近一直在折腾一个功能:让自己的应用能控制Windows 10系统自带的屏幕键盘(osk.exe)的显示和隐藏。这个功能在Windows 7里实现起来很简单,调用ShellExecute()启动osk.exe就能正常弹出键盘,但到了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键盘的检测难题

我还尝试过改用TabTip键盘,但又遇到了新问题:没法准确检测它是否处于可见状态——只有当它隐藏的时候能获取到窗口句柄,一旦显示出来,反而拿不到句柄了,根本没法判断状态。

已解决的显示问题更新

后来我终于找到最初osk.exe无法显示的原因了!问题出在传给ShellExecute的nCmdShow参数上:原来代码里传的是NULL,这在Windows 7里能正常运行,我之前一直误以为是其他地方的问题,改成SW_SHOWNORMAL之后,显示键盘的问题就顺利解决了。

另外Paul Sanders提到:如果是32位应用的话,还需要额外做一些操作来适配。

内容的提问来源于stack exchange,提问作者stuicidle

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:28:29