CreateProcessのコマンドラインに変数いれるには?


あこ  2004-02-25 02:43:20  No: 7331

みなさん、こんにちは。
きのうから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 
としたいのですが、このあたりの記述もあいまいで。。

説明も不十分かと思いますので、意味不明な点はご指摘ください。
すみませんがよろしくお願いします。


るるとん@K  2004-02-25 03:44:22  No: 7332

HENSU11 = Edit1.Text
HENSU12 = Edit2.Text
HENSU13 = Edit3.Text

HENSU11 := Edit1.Text;
HENSU12 := Edit2.Text;
HENSU13 := Edit3.Text;
です


るるとん@K  2004-02-25 03:49:34  No: 7333

CreateProcessが何なのか解りませんが、
'C:\sample.exe・HENSU1・HENSU12・HENSU13'
ではなく
'C:\sample.exe '+HENSU1+' '+HENSU12+' '+HENSU13
ですね
というか、beginがないですね


  2004-02-25 03:55:18  No: 7334

ここが参考になると思います。
http://www.wwlnk.com/boheme/delphi/tips/tec0260.htm

CreateProcessの各引数
1....起動するプログラムパス
2....コマンドライン引数

//例
CreateProcess (PChar('〜〜.exe'), ここにコマンドライン引数,〜〜


るるとん@K  2004-02-25 03:57:55  No: 7335

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;

ですね


るるとん@K  2004-02-25 03:59:46  No: 7336

すみません
>'C:\sample.exe'+hoge, // コマンドライン

PChar('C:\sample.exe'+hoge), // コマンドライン
の間違いです
PCharでしたね


るるとん@K  2004-02-25 04:08:22  No: 7337

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;


にしの  2004-02-25 04:18:13  No: 7338

StartupInfo,ProcessInfoは初期化したほうがよいかと思います。


jok  2004-02-25 04:42:45  No: 7339

> StartupInfo,ProcessInfoは初期化したほうがよいかと思います。

これは必須。

CloseHandle(ProcessInfo.hProcess); 
CloseHandle(ProcessInfo.hThread);

これも忘れずに。


あこ  2004-02-25 05:29:08  No: 7340

みなさま、いっぱい教えてくださって、どうもありがとうございます!!

-----------略
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), // 引数
    
なんかややこしいのですが、、、
どなたかお分かりの方いましたら、お願いします。


あこ  2004-02-25 05:33:10  No: 7341

あ!ごめんなさい!↑↑↑
sample.exeだとかsample2.exeとかごっちゃになっていますけど、
おなじものです。
すべてsample.exeです。


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

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






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