Windows下VC++調用系統軟鍵盤及其需要注意的點
Windows下VC++調用系統軟鍵盤及其需要注意的點
資料來源: https://blog.csdn.net/FlushHip/article/details/83008317
osk.exe
osk.exe位於%SYSTEMROOT%\System32\下,無論是32位或64位的系統都是位於這個路徑下。
那麼如何在你的C++程序中調用系統軟鍵盤osk.exe呢?這裡就要提到兩個Windows系統API了,ShellExcute和WinExec,關於這兩個函數的用法可以參考MSDN。
WinExec
WinExec(“osk.exe”, SW_SHOWNORMAL);
ShellExcute
需要注意的點
從64位windows為什麼不把system32改成system64 ?這個鏈接中,你應該知道了有SysWOW64這個文件夾,這個文件夾的作用如下:
WoW64 (Windows On Windows64)是一個Windows操作系統的子系統,被設計用來處理許多在32-bit Windows和64-bit Windows之間的不同的問題,使得可以在64-bit Windows中運行32-bit程序。
也就是說32位程序在64位操作系統下運行System32下的程序,會被自動重定向到%SYSTEMROOT%\SysWOW64下,在這個目錄下搜尋程序,而SysWOW下沒有osk.exe,於是就會導致失敗。
因此,在執行ShellExcute或WinExec的時候需要取消這個重定向,在運行完後又恢復這個重定向。
這兩個操作,Windows也有對應的API可以使用,Wow64DisableWow64FsRedirection和Wow64RevertWow64FsRedirection。具體使用如下:
Code
PVOID OldValue = NULL; BOOL f = Wow64DisableWow64FsRedirection(&OldValue); WinExec("osk.exe", SW_SHOWNORMAL); if (f) Wow64RevertWow64FsRedirection(OldValue);