掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
プロセス起動、終了後にイベントを発生させるには (ID:32850)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
スレッドなら スレッドの Execute 内で CreateProcess で実行して WaitForSingleObject(ProcessInfo.hProcess, $FFFFFFFF); で終了まで待つだけで プロセスが終了するとスレッドが終了するので OnTerminateがスレッド終了のイベントとなる TProcessThread = class(TThread) private public procedure Execute;override; private end; procedure TForm8.ProcessOnTerminate(Sender: TObject); begin //スレッド終了 = プロセス終了 end; procedure TProcessThread.Execute; var ret: Boolean; ecode: Integer; StartupInfo: TStartupInfo; ProcessInfo: TProcessInformation; begin with StartupInfo do begin cb := SizeOf(TStartupInfo); dwX := 0; dwY := 0; dwXSize := 640; dwYSize := 480; wShowWindow := SW_SHOWNORMAL; dwFlags := STARTF_USESHOWWINDOW or STARTF_USESIZE or STARTF_USEPOSITION; lpReserved := nil; lpDesktop := nil; lpTitle := nil; cbReserved2 := 0; lpReserved2 := nil; end; ret := CreateProcess( nil, // 実行ファイル名 'notepad.exe', // コマンドライン nil, // プロセスのセキュリティ属性 nil, // スレッドのセキュリティ属性 False, // 親プロセスからハンドルを継承するか CREATE_DEFAULT_ERROR_MODE, // 優先順位とプロセスの制作制御 nil, // 環境変数ブロックへのポインタ nil, // カレントディレクトリ StartupInfo, // ウィンドウの属性 ProcessInfo // 新しいプロセスの情報を受け取る構造体 ); WaitForSingleObject(ProcessInfo.hProcess, $FFFFFFFF); end; procedure TForm1.Button1Click(Sender: TObject); begin ProcessThread := TProcessThread.Create(True); ProcessThread.OnTerminate := ProcessOnTerminate; ProcessThread.Resume; end;
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.