WinExecAndWait32


function WinExecAndWait32(FileName: string; Visibility: Integer;
  ProcessMsg: Boolean): Integer;
var
  zAppName: array[0..512] of Char;
  zCurDir: array[0..255] of Char;
  WorkDir: string;
  StartupInfo: TStartupInfo;
  ProcessInfo: TProcessInformation;
begin
  StrPCopy(zAppName, FileName);
  GetDir(0, WorkDir);
  StrPCopy(zCurDir, WorkDir);
  FillChar(StartupInfo, SizeOf(StartupInfo), #0);
  StartupInfo.cb := SizeOf(StartupInfo);
  StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
  StartupInfo.wShowWindow := Visibility;
  if not CreateProcess(nil,
    zAppName, { pointer to command line string }
    nil, { pointer to process security attributes }
    nil, { pointer to thread security attributes }
    False, { handle inheritance flag }
    CREATE_NEW_CONSOLE or { creation flags }
    NORMAL_PRIORITY_CLASS,
    nil, { pointer to new environment block }
    nil, { pointer to current directory name }
    StartupInfo, { pointer to STARTUPINFO }
    ProcessInfo) then
    Result := -1 { pointer to PROCESS_INF }
  else
  begin
    if ProcessMsg then
    begin
      repeat
        Application.ProcessMessages;
        GetExitCodeProcess(ProcessInfo.hProcess, Cardinal(Result));
      until (Result <> STILL_ACTIVE) or Application.Terminated;
    end
    else
    begin
      WaitforSingleObject(ProcessInfo.hProcess, INFINITE);
      GetExitCodeProcess(ProcessInfo.hProcess, Cardinal(Result));
    end;
  end;
end;

ここでパラメータ[can shu]Visibilityは、行番号パラメータ[can shu]の意味0 SW_HIDEはこのフォーム[chuang ti]を非表示にし、[ji huo]の他のフォーム[chuang ti]をアクティブにします.2 SW_MAXIMIZEは指定されたフォームを最大化する[chuang ti].3 SW_MINIMIZEは指定したフォーム[chuang ti]を最小化し、[ji huo]最上位のフォーム[chuang ti]を順番にアクティブにします.4 SW_RESTOREは[ji huo]をアクティブにし、[xian shi]フォーム[chuang ti]を表示します.フォーム[chuang ti]が最小化または最大化されている場合、フォーム[chuang ti]は元の大小和に戻ります.[ying yong]プログラム[ying yong cheng xu]を適用すると、最小化されたフォーム[chuang ti]を復元すると、タグ[biao ji]が指定されます.5 SW_SHOWは現在のサイズと位置[wei zhi]で[ji huo]をアクティブにして[xian shi]フォーム[chuang ti]を表示します.6 SW_SHOWDEFAULT 7 SW_SHOWMAXIMIZEDは[ji huo]をアクティブにし、[xian shi]フォーム[chuang ti]を最大化して表示します.8 SW_SHOWMINIMIZEDは[ji huo]をアクティブにし、現実のフォームを最小化する[chuang ti].9 SW_SHOWMINNOACTIVEはフォーム[chuang ti]を最小化し、[ji huo]状態[zhuang tai]を維持する.10 SW_SHOWNAは現在の状態[zhuang tai]で[xian shi]フォーム[chuang ti]を表示し、[ji huo]状態[zhuang tai]を維持します.11 SW_SHOWNOACTIVATEは、現在のサイズと位置[wei zhi]で[xian shi]フォーム[chuang ti]を表示し、[ji huo]状態[zhuang tai]を維持します.12 SW_SHOWNORMALは[ji huo]をアクティブにし、[xian shi]フォーム[chuang ti]を表示します.フォーム[chuang ti]が最大化または最小化されている場合、フォーム[chuang ti]は元のサイズと位置に復元される[wei zhi].フォーム[chuang ti]が初めて[xian shi]を表示すると、[ying yong]プログラム[ying yong cheng xu]レコードタグ[biao ji]が適用される.
引用[yin yong]2あなたのソフトウェア[ruan jian]にあなたのホームページ[wang ye]アドレス[di zhi][ye di zhi]とメール[you jian]アドレス[di zhi]が残っている場合は、[xi wang]人々がクリックすると[qi dong]ブラウズ[liu lan qi]または電子メール[you jian][dian zi you jian]ソフトウェア[ruan jian]を起動することを望んでいるに違いありません.これは実はどのように[qi dong]外部ソフトウェア[ruan jian]を起動するかの問題で、簡単ではないでしょうか.しかし、「qi dong」外部プログラムを起動して「deng dai」が終わるのを待つ方法を聞いたら、教えてくれませんか?実は、これは「古い」話題で、WIN 95時代に議論されました.しかし、こんなに多くの人が知らない以上、もう一度議論する必要があると思います.一、なぜ[qi dong]外部プログラムを起動するのか、あなたのプログラムにすべての機能を完成させたいのかもしれません.しかし、物力や人力にかかわらず、資源を共有する習慣を身につけなければならない.より良い考えは、既存のプログラムを十分に利用し、あなたのプログラムをある方面の機能に集中させることです.例えば、ブラウズ[liu lan]器[liu lan qi]はウェブページを開き、人々に[liu lan]をブラウズさせ、[xia zai]をダウンロードするタスク[ren wu]に遭遇した場合、より専門的なダウンロード[xia zai]ソフトウェア[ruan jian][xia zai ruan jian]に任せることができる.あなたのプログラムにはホームページ[zhu ye]とメールアドレス[di zhi]が残っているかもしれませんが、[xi wang]がクリックしたときに[qi dong]ブラウズ[liu lan]器[liu lan qi]と電子メール[you jian][dian zi you jian]を起動することを望んでいます.場合によっては[qing kuang]で外部プログラムの処理が必要になり、次の作業を行うと、[qi dong]外部プログラムを起動して[deng dai]の終了を待つ問題に直面します[wen ti].二、予備知識[zhi shi]が[qi dong]外部プログラムを起動するには、関数[han shu]Winexec、ShellExecute、ShellExecuteを使用することができます.柔軟で簡単なので、関数[han shu]ShellExecuteをお勧めします.次の例を見ると、使い方がわかります.*:[qi dong]プログラムShellExecute(Handle,'open',PChar('c:estapp.exe'),nil,nil,SW_を起動します.SHOW); * [qi dong]メモ帳を起動します(メモ帳はシステム[xi tong]パス[lu jing]の下にあるので、完全なパス[lu jing]名[lu jing ming]を書く必要はありません):ShellExecute(Handle,'open',PChar('notepad'),nil,nil,SW_SHOW); * [qi dong]メモ帳を起動し、純粋なテキスト[wen ben]ファイル[wen jian]:ShellExecute(Handle,'open',PChar('notepad')をロードします.