アプリケーションから他のアプリケーションを起動するためにこんなことをやっています。
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を開いた状態で起動したいのですが。
よろしくお願いいたします。
すみません、操作ミスで二重投稿してしまいました。
CreateProcessの第二引数がコマンドライン引数です。この場合でしたら、
Res := CreateProcess(PChar(APPLICAIONNAME),
pChar('指定したい引数'),
nil,
nil,
False,
CREATE_DEFAULT_ERROR_MODE,
nil,
nil,
SI,
PI);
引数: stringで、Vix.exeの書式に従って試してみてください。
ありがとうございます。第二引数への渡し方がまずかったようです。
GetStartupInfo(Si);
bo := CreateProcess(nil,
PChar('"' + ViewerName + '" "' + BaseDir + '\' + StringGrid1.Cells[2,Row] + '"'),
nil,
nil,
False,
CREATE_DEFAULT_ERROR_MODE,
nil,
nil,
SI,
PI);
これでうまくいきました。
第二引数に全部部渡しているのが気になっていて、試してみましたがうまくいきませんでした。
GetStartupInfo(Si);
bo := CreateProcess(Pchar(Viewername),
Pchar(BaseDir + '\' + StringGrid1.Cells[2,Row]),
そこで、第二引数で渡される文字列の前にスペースを入れてみたたらすっきり動きました。このスペースがポイントでした。
GetStartupInfo(Si);
bo := CreateProcess(Pchar(Viewername),
Pchar(' ' + BaseDir + '\' + StringGrid1.Cells[2,Row]),
ツイート | ![]() |