掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
タスクマネージャーのプロセス表示 (ID:151085)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
私も知らなかったのですが(素人ですいません)、 タスクマネージャーが「まとめて」表示しているのは、親子プロセスだからではないんですね。 どのような場合に、タスクマネージャーが「まとめて」表示するのかは、正確には公開されていないそうです。 1つのパターンとして、親プロセスが子プロセスをデバッグする場合には「まとめて」表示されるみたいです。 CreateProcessAPIでフラグにDEBUG_ONLY_THIS_PROCESS 又は DEBUG_PROCESSを指定するとデバッグして子プロセスを起動できるのですが、 これだけでは子プロセスは停止状態で起動しますので、 WaitForDebugEvent 等を使わなくてはならず、かなり面倒なのですが、以下のような感じで「一応、タスクマネージャーでまとめて表示」できます。 答えになっていかもしれなくてごめんなさい。 procedure TForm1.Button3Click(Sender: TObject); var SInfo : TStartupInfo; ProcInfo : TProcessInformation; FileName:String; pFileName:PChar; de:_DEBUG_EVENT; flag:boolean; dwContinueStatus:DWORD; begin FileName:='notepad.exe'; pFileName:=@FileName[1]; ZeroMemory(@SInfo,SizeOf(SInfo)); SInfo.dwFlags :=STARTF_USESHOWWINDOW; SInfo.wShowWindow := SW_SHOW; SInfo.cb := SizeOf(SInfo); CreateProcess( nil, pFileName, nil, nil, False, NORMAL_PRIORITY_CLASS or DEBUG_ONLY_THIS_PROCESS, //←ココ nil, nil, SInfo, ProcInfo ); dwContinueStatus := DBG_CONTINUE; flag:=true; while flag do begin WaitForDebugEvent(de,INFINITE); case de.dwDebugEventCode of EXIT_PROCESS_DEBUG_EVENT: begin dwContinueStatus:=DBG_TERMINATE_PROCESS; flag:=False; end; end; ContinueDebugEvent(de.dwProcessId, de.dwThreadId, dwContinueStatus); end; end;
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.