在我的應用程式的某個地方,我正在創建一個這樣的程序:
STARTUPINFO startupInfo;
ZeroMemory(&startupInfo, sizeof(startupInfo));
startupInfo.cb = sizeof(STARTUPINFO);
PROCESS_INFORMATION processInfo;
ZeroMemory(&processInfo, sizeof(processInfo));
const auto created = CreateProcessW(
pathToExe,
cmdLine,
nullptr,
nullptr,
false,
CREATE_NEW_CONSOLE,
nullptr,
workingDir,
&startupInfo,
&processInfo);
我在這里運行的 exe 是一個控制臺應用程式。
稍后,我想優雅地停止該程序。我可以用 殺死它TerminateProcess,但我想讓它更優雅,因為該行程可能必須將資料保存到某個資料庫或執行一些清理(例如關閉硬體連接)。
我試圖HWND用EnumWindows和來獲得這個程序但沒有成功GetWindowThreadProcessId。事實上,EnumWindows并沒有列出我創建的行程。有了這個HWND,我的想法是發送一條WM_CLOSE訊息。
也許我不應該使用CREATE_NEW_CONSOLE標志?我嘗試了以下啟動資訊:
STARTUPINFO startupInfo;
ZeroMemory(&startupInfo, sizeof(startupInfo));
startupInfo.cb = sizeof(STARTUPINFO);
si.dwFlags = STARTF_USESHOWWINDOW;
si.wShowWindow = SW_SHOW;
但這并沒有向我顯示控制臺視窗(我需要它)。我究竟做錯了什么?我應該如何創建我的流程,然后我如何優雅地停止它?
uj5u.com熱心網友回復:
事實上,在我試圖優雅地殺死我的控制臺時,現在HWND進入控制臺視窗還為時過早。在測驗中,我天真地創建了該行程,然后幾乎立即將其殺死。如果我等待的時間足夠長(即,如果我實際上與我創建的行程互動了一段時間),那么我可以獲得控制臺視窗的句柄并WM_CLOSE成功向它發送訊息。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/364069.html
