我嘗試從我的EXE調用另一個程序,我希望它在後臺靜靜地執行。 (由於此調用會發生非常頻繁,一個窗口彈出是不能接受的。)儘管有SW_HIDE和CREATE_NO_WINDOW,爲什麼通過CreateProcess調用的程序的窗口顯示?
做的五月的方法是這樣的:
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
si.dwFlags = STARTF_USESHOWWINDOW;
si.wShowWindow = SW_HIDE;
ZeroMemory(&pi, sizeof(pi));
if (!CreateProcess(NULL, cl, NULL, NULL, FALSE,
CREATE_NO_WINDOW, NULL, NULL, &si, &pi)) return -1;
else
{
WaitForSingleObject(pi.hProcess, INFINITE);
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
return 0;
}
的過程創建所需的程序運行,但不幸的是儘管有CREATE_NO_WINDOW
和SW_HIDE
標誌,窗口仍會顯示。 我錯過了什麼/做錯了什麼?
我想通了,我也許可以去
- 得到進程句柄的進程ID通過
GetProcessId
- 使用
EnumWindows
和GetWindowThreadProcessId
找到匹配的窗口 - 使用獲得
HWND
撥打ShowWindow
與SW_HIDE
但這就是麻煩,我認爲SW_HIDE
應該在創建過程中「開箱即用」,無論如何。
我不不知道,但我想你告訴它被隱藏只會影響'WinMain'的第四個參數,程序可以使用或不使用它。 – chris
因此,沒有辦法真正強迫程序隱藏? – Pixelchemist
即使這樣說,我感覺很糟糕,但如果您是在不同的桌面上啓動它,則它在技術上可能會工作(在找到窗口時閃爍的時候沒有問題),具體取決於它的功能。 *有*是比這更乾淨的東西。 – chris