在對話框程式中加一個按鈕的點擊事件函式
int ret = 0;
ret = WinExec("osk.exe", SW_SHOWNORMAL);
//ret = WinExec("C:\\Program Files\\Common Files\\microsoft shared\\ink\\tabtip.exe", SW_SHOWNORMAL);
HINSTANCE hNewExe;
//hNewExe = ShellExecute(NULL, _T("open"), _T("osk.exe"), NULL, NULL, SW_SHOWNORMAL);
//hNewExe = ShellExecute(NULL, _T("open"), _T("C:\\Program Files\\Common Files\\microsoft shared\\ink\\tabtip.exe"), NULL, NULL, SW_SHOW);
//hNewExe = ShellExecute(NULL, _T("open"), _T("http://www.csdn.net"), NULL, NULL, SW_SHOWNORMAL);
CString strMsg;
strMsg.Format(_T("%d"), ret);
MessageBox(strMsg);
WinExec "osk.exe" 在win7虛擬機運行 回傳值是0
WinExec tabtip.exe 在win10運行 回傳值是0
ShellExecute osk.exe 在win7虛擬機運行 提示“無法啟動螢屏鍵盤” 回傳值是42
ShellExecute tabtip.exe 在win10運行 沒反應 回傳值是 42
ShellExecute http 正常,回傳值是42
我想要在win10打開tabtip.exe 不知道為啥不行呢
uj5u.com熱心網友回復:
win10手動在任務管理器找到tabtip.exe 觸摸鍵盤和手寫面板 行程,就能正常打開了
請問我如何判斷tabtip.exe的這個行程是否是運行狀態,又如何關閉這個執行緒呢
uj5u.com熱心網友回復:
試試 CreateProcess,另外感覺osk并沒比tabtips差啊?打開osk行嗎uj5u.com熱心網友回復:
請問 win10 打開osk 的完整地址怎么寫
uj5u.com熱心網友回復:
https://docs.microsoft.com/en-us/windows/win32/procthread/creating-processesuj5u.com熱心網友回復:
這讓問題復雜化了
我的問題是在win10 中使用軟鍵盤
用osk時,可能是64位win10 打開 32位 osk程式的bug,
WinExec "C:\\Windows\\System32\\osk.exe" 運行不了,雙擊這個檔案就正常運行,單獨把osk.exe拷貝出來也運行不了
用tabtip時,這個行程已經運行了,就是任務管理器中的 觸摸鍵盤和手寫面板 這個行程,當這個行程運行的時候
winexec tabtip 的時,回傳0 提示記憶體不足,我需要關閉這個行程再打開,這里有一個異步的問題
所以用create行程的函式大概率不能解決win10中打開osk.exe的問題
uj5u.com熱心網友回復:
PVOID OldValue = NULL;
BOOL bRet = Wow64DisableWow64FsRedirection(&OldValue);
//ret = WinExec("osk.exe", SW_SHOW); //這個打不開
hNewExe = ShellExecute(NULL, _T("open"), _T("osk.exe"), NULL, NULL, SW_SHOW);
if (bRet)
{
Wow64RevertWow64FsRedirection(OldValue);
}
打開tabtip.exe的問題誰能指導我一下
當任務管理器有 ”觸摸鍵盤和手寫面板“ 這個行程的時候,顯示不出來,手動關閉這個行程才能顯示,請問這個如何解決
uj5u.com熱心網友回復:
我試了在桌面環境直接執行tabtip 這個關閉之后有時候執行不能再次彈出視窗 這應該屬于輸入法的問題跟32位應該無關 64位可以跑32位軟體 除非安騰
印象中,輸入法有很多彈不出/不能切換之類的情況,可能與此有關吧
后來我關閉tabtip再運行就能彈出了
所以你可以在程式中重復執行之前執行一條 taskkill /im taptip.exe /f 需要管理員權限
另外我這邊沒有提示過記憶體不足,這個軟體只占10多M
uj5u.com熱心網友回復:
我測驗的WIN1064位系統,程式編譯成32位時回傳2 (ERROR_FILE_NOT_FOUND )
編譯成X64位時 OK的
void CdlgTDlg::OnBnClickedButton1()
{
HINSTANCE hr = ShellExecuteW(0, 0, L"osk.exe", 0, 0, SW_SHOWNORMAL);
ASSERT((int)hr >= 32);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/235121.html
標籤:界面
