exe から別のプログラムを呼び出そうとしていますが、バックグラウンドでサイレントに実行したいと考えています。(この呼び出しは非常に頻繁に発生するため、ウィンドウのポップアップは受け入れられません。)
それを行う5月の方法はこれです:
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
ので、とにかくプロセスを作成するときに「箱から出して」動作するはずです。