我尝试从我的 exe 调用另一个程序,我希望它在后台静默执行。(由于此调用会非常频繁,因此弹出窗口是不可接受的。)
可能的做法是这样的:
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
andGetWindowThreadProcessId
查找匹配窗口 - 使用获得的
HWND
调用ShowWindow
SW_HIDE
但这很麻烦,无论如何我认为SW_HIDE
在创建过程时应该“开箱即用”。