Windows下VC++調用系統軟鍵盤及其需要注意的點

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);

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *