/* 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
メンバーをに設定してみることができます。STARTUPINFO
STARTF_USESHOWWINDOW
wShowWindow
SW_HIDE
これにより、のパラメータCreateProcess()
としてパス0が作成されます。ただし、すべてのWindowsアプリケーションが正常に動作するわけではなく、この値をの最初の呼び出しに使用します。nCmdShow
WinMain
ShowWindow()
新しいプロセスをタスクバーに登録するのは、新しいプロセスの作成者であるあなたではありません。これは、タスクバーに表示するかどうかを決定するトップレベルのウィンドウを作成する新しいプロセスです。この決定は、新しいプロセスによって決定される、そのトップレベルウィンドウの拡張スタイルに基づいています。
つまり、これを行うには、この他のプロセスのトップレベルウィンドウを突く必要があります。
開始されたプロセスに関連付けられたウィンドウを見つけて (FindWindow
およびを参照)、 で関数をEnumWindows
呼び出すことができます。または、 を削除および追加して、ウィンドウの拡張スタイルを変更することもできます。ShowWindow
SW_HIDE
WS_EX_APPWINDOW
WS_EX_TOOLWINDOW
最も簡単な方法は、開始されたプロセスが設定を尊重する場合、最初の回答で説明されているように STARTUPINFO を使用することです。