みなさん、こんにちは。
きのうからdelphiをはじめて、たいぶ初歩的かと思いますが教えてください。
外部アプリを起動させて、その際に渡すコマンドラインに変数を入れたいのですが可能でしょうか?
コマンドラインに、
C:\sample.exe 変数1 変数2 変数3
と入力し変数をパラメータとして外部アプリを実行させたいのです。
CreateProcessを使っていて、
procedure TForm1.Button1Click(Sender: TObject);
var
ret: Boolean;
StartupInfo: TStartupInfo;
ProcessInfo: TProcessInformation;
ret := CreateProcess(
nil,
'C:\sample.exe HENSU1 HENSU12 HENSU13', // コマンドライン
nil,
nil,
False,
CREATE_DEFAULT_ERROR_MODE,
nil,
nil,
StartupInfo,
ProcessInfo
);
とこんな感じにしたいのですが、
なんだかうまくいかず記述の方法もよく分かりません。。。
ちなみに、
HENSU11 = Edit1.Text
HENSU12 = Edit2.Text
HENSU13 = Edit3.Text
としたいのですが、このあたりの記述もあいまいで。。
説明も不十分かと思いますので、意味不明な点はご指摘ください。
すみませんがよろしくお願いします。
HENSU11 = Edit1.Text
HENSU12 = Edit2.Text
HENSU13 = Edit3.Text
は
HENSU11 := Edit1.Text;
HENSU12 := Edit2.Text;
HENSU13 := Edit3.Text;
です
CreateProcessが何なのか解りませんが、
'C:\sample.exe・HENSU1・HENSU12・HENSU13'
ではなく
'C:\sample.exe '+HENSU1+' '+HENSU12+' '+HENSU13
ですね
というか、beginがないですね
ここが参考になると思います。
http://www.wwlnk.com/boheme/delphi/tips/tec0260.htm
CreateProcessの各引数
1....起動するプログラムパス
2....コマンドライン引数
//例
CreateProcess (PChar('〜〜.exe'), ここにコマンドライン引数,〜〜
procedure TForm1.Button1Click(Sender: TObject);
var
hoge:string;
ret: Boolean;
StartupInfo: TStartupInfo;
ProcessInfo: TProcessInformation;
begin
hoge:=' '+Edit1.Text+' '+Edit2.Text+' '+Edit3.Text;
ret := CreateProcess(
nil,
'C:\sample.exe'+hoge, // コマンドライン
nil,
nil,
False,
CREATE_DEFAULT_ERROR_MODE,
nil,
nil,
StartupInfo,
ProcessInfo
);
{変数を使用}
end;
ですね
すみません
>'C:\sample.exe'+hoge, // コマンドライン
は
PChar('C:\sample.exe'+hoge), // コマンドライン
の間違いです
PCharでしたね
var
hoge:string;
ret: Boolean;
StartupInfo: TStartupInfo;
ProcessInfo: TProcessInformation;
begin
hoge:=' '+Edit1.Text+' '+Edit2.Text+' '+Edit3.Text;
ret := CreateProcess(
PChar('C:\sample.exe'), // パス
PChar(hoge), // 引数
nil,
nil,
False,
0,
nil,
nil, // カレントディレクトリ
StartupInfo,
ProcessInfo
);
{処理}
end;
StartupInfo,ProcessInfoは初期化したほうがよいかと思います。
> StartupInfo,ProcessInfoは初期化したほうがよいかと思います。
これは必須。
CloseHandle(ProcessInfo.hProcess);
CloseHandle(ProcessInfo.hThread);
これも忘れずに。
みなさま、いっぱい教えてくださって、どうもありがとうございます!!
-----------略
hoge:= 'C:\sample2.exe'+ ' '+Edit1.Text+' '+Edit2.Text+' '+Edit3.Text;
ret := CreateProcess(
nil,
PChar(hoge), // 引数
-----------略
で起動されました。ご丁寧にありがとうございます。
…ただ、引数(C:\sample2.exe 以降の値)をよんで実行してくれないのです...
普通にコマンドプロンプトで
C:\sample.exe 引数1 引数2 引数3 と書くと引数を反映して実行されるのですが…
delphiから起動しても引数が反映して実行しません。
ちなみにこのC:\sample.exeは、perlのEXEです。
(perl処理をバッチで実行させるのでなく、EXEに変換したもの)
このEXEがまずいのでしょうか??
このEXEの元になるperlファイルを下記のように指定すると、ちゃんと反映して実行されるのに、、、なんでだろう?
↓引数反映される
hoge:= 'perl C:\sample.pl'+ ' '+Edit1.Text+' '+Edit2.Text+' '+Edit3.Text;
ret := CreateProcess(
nil,
PChar(hoge), // 引数
なんかややこしいのですが、、、
どなたかお分かりの方いましたら、お願いします。
あ!ごめんなさい!↑↑↑
sample.exeだとかsample2.exeとかごっちゃになっていますけど、
おなじものです。
すべてsample.exeです。
ツイート | ![]() |