CreateProcessの引数

解決


RYO  2010-01-16 18:49:41  No: 37040

アプリケーションから他のアプリケーションを起動するためにこんなことをやっています。

var
  Si: TStartupInfo;
  Pi: TProcessInformation;
  Res: boolean;
begin
  if Exename[TButton(sender).Tag] = '' then begin
    MessageDlg('アプリケーションが登録されていません。',mtInformation,[mbOk],0);
    Exit;
  end
  else begin
    GetStartupInfo(Si);
    Res := CreateProcess(PChar(APPLICAIONNAME),
                      nil,
                      nil,
                      nil,
                      False,
                      CREATE_DEFAULT_ERROR_MODE,
                      nil,
                      nil,
                      SI,
                      PI);
    if Res then begin
      while WaitForSingleObject(PI.hProcess, 0) = WAIT_TIMEOUT do begin
        Application.HandleMessage;
      end;
    end else
    ShowMessage('起動に失敗しました');
  end;
end;
ここで「APPLICATION」にコマンドライン引数を与えるにはどうしたらいいでしょうか?  例えば画像ビュアViXを使用するすると、「D:\Vix\Vix.exe D:\Foldername」のようにして、ViXでFolderamaeを開いた状態で起動したいのですが。
よろしくお願いいたします。


RYO  2010-01-16 18:50:41  No: 37041

すみません、操作ミスで二重投稿してしまいました。


Kenny  2010-01-16 19:22:45  No: 37042

CreateProcessの第二引数がコマンドライン引数です。この場合でしたら、
    Res := CreateProcess(PChar(APPLICAIONNAME),
                      pChar('指定したい引数'),
                      nil,
                      nil,
                      False,
                      CREATE_DEFAULT_ERROR_MODE,
                      nil,
                      nil,
                      SI,
                      PI);

引数: stringで、Vix.exeの書式に従って試してみてください。


RYO  2010-01-16 19:27:10  No: 37043

ありがとうございます。第二引数への渡し方がまずかったようです。
  GetStartupInfo(Si);
    bo := CreateProcess(nil,
                      PChar('"' + ViewerName + '" "' + BaseDir + '\' + StringGrid1.Cells[2,Row] + '"'),
                    nil,
                    nil,
                    False,
                    CREATE_DEFAULT_ERROR_MODE,
                    nil,
                    nil,
                    SI,
                    PI);
これでうまくいきました。


RYO  2010-01-18 19:54:26  No: 37044

第二引数に全部部渡しているのが気になっていて、試してみましたがうまくいきませんでした。

  GetStartupInfo(Si);
      bo := CreateProcess(Pchar(Viewername),
                    Pchar(BaseDir + '\' + StringGrid1.Cells[2,Row]),

そこで、第二引数で渡される文字列の前にスペースを入れてみたたらすっきり動きました。このスペースがポイントでした。

  GetStartupInfo(Si);
      bo := CreateProcess(Pchar(Viewername),
                    Pchar(' ' + BaseDir + '\' + StringGrid1.Cells[2,Row]),


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加