掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
ShellExecuteで終了を待つ方法は? (ID:12069)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
ShellExecuteで起動した子プロセスの終了を知る方法はありますでしょうか? 以前から、CreateProcessで起動させるルーチンは紹介されていますが、 事情により(ショートカットを起動させるため)、CreateProcessは使えず ShellExecuteで起動させています。 子プロセスの起動中は、親フォームを表示せず、 子プロセスの終了を検知して親フォームを可視状態にしようと思っています。(どちらか片方しか表示されない状態) 以下のソースでは子プロセスの起動はできますが、 終了をうまく検知しないためか、両方のフォームが表示されてしまいます。 無理やりShellExecuteの戻り値を取得しようと思ったのがいけないのでしょうか? どなたか知恵を貸してください。 procedure TMastMenu.SpeedButton1Click(Sender: TObject); var s : string; ProgName : PChar; handle : THandle; tpi : TProcessInformation; begin s := 'C:\abcへのショートカット.lnk'; ProgName := PChar(sWorks); //ショートカットプログラムを起動 Handle := ShellExecute(Application.MainForm.Handle, nil,ProgName, nil, nil,SW_SHOW); tpi.hProcess := handle; //プロセスが終了するのを待つ while WaitForSingleObject(tpi.hProcess, INFINITE) = WAIT_TIMEOUT do begin Application.ProcessMessages; Self.Visible := false; end; Self.Visible := true; end;
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.