你好,
感谢您在MSDN论坛发帖提问。
>>如何通过程序(C++语言开发)去将osk隐藏或者关闭??
TerminateProcess函数用于无条件地导致进程退出。此函数停止执行进程中的所有线程,并请求取消所有挂起的I / O. 在完成或取消所有挂起的I / O之前,已终止的进程无法退出。当进程终止时,其内核对象不会被销毁,直到具有进程打开句柄的所有进程都释放了这些句柄。一个过程不能阻止自己被终止。Windows API调用只会向应用程序发送关闭窗口事件,但应用程序可以拒绝这一点 。
因为osk.exe在清单中有uiAccess =“true”,它在令牌中有强制标签\高强制等级。 但是你的应用程序,如果在UAC下运行没有提升,通常会有中等强制级别。将SendMessage或PostMessage用于以更高权限运行的应用程序窗口。
我建议你可以尝试使用FindWindow返回一个有效的窗口句柄,以找到需要关闭/最小化的窗口,SendMessage(hwnd,WM_DESTROY,NULL,NULL); 这样应该可以关闭它。 (我建议你首先尝试发送WM_CLOSE或者WM_QUIT。)
if (HWND hwnd = FindWindow(L"OSKMainClass", 0))
{
SendMessage(hwnd, WM_CLOSE, 0, 0);
}
Best Regards,
Jeanine Zhang