/* CreateProcess initialization */
STARTUPINFO si;
PROCESS_INFORMATION pi;
memset(&si, 0, sizeof(si));
memset(&pi, 0, sizeof(pi));
si.cb = sizeof(si);
long ret;
// si.wShowWindow = SW_HIDE;
// hide process window.... // run in background..
si.dwFlags = STARTF_USESHOWWINDOW;
si.wShowWindow = SW_HIDE;
if (!CreateProcess(0, exe,
0, 0, 1, NORMAL_PRIORITY_CLASS, 0, 0, &si, &pi)) {
return;
}
//int prez = WaitForSingleObject(pi.hProcess, INFINITE);
//CloseHandle(pi.hProcess);
3 に答える
構造体のメンバーをに、dwFlagsメンバーをに設定してみることができます。STARTUPINFOSTARTF_USESHOWWINDOWwShowWindowSW_HIDE
これにより、のパラメータCreateProcess()としてパス0が作成されます。ただし、すべてのWindowsアプリケーションが正常に動作するわけではなく、この値をの最初の呼び出しに使用します。nCmdShowWinMainShowWindow()
新しいプロセスをタスクバーに登録するのは、新しいプロセスの作成者であるあなたではありません。これは、タスクバーに表示するかどうかを決定するトップレベルのウィンドウを作成する新しいプロセスです。この決定は、新しいプロセスによって決定される、そのトップレベルウィンドウの拡張スタイルに基づいています。
つまり、これを行うには、この他のプロセスのトップレベルウィンドウを突く必要があります。
開始されたプロセスに関連付けられたウィンドウを見つけて (FindWindowおよびを参照)、 で関数をEnumWindows呼び出すことができます。または、 を削除および追加して、ウィンドウの拡張スタイルを変更することもできます。ShowWindowSW_HIDEWS_EX_APPWINDOWWS_EX_TOOLWINDOW
最も簡単な方法は、開始されたプロセスが設定を尊重する場合、最初の回答で説明されているように STARTUPINFO を使用することです。