CreateProcess(追記)

解決


超初心者  2004-08-30 09:49:59  No: 10690

幾度すみませんがよろしくお願いします。
すこのサイトのレスで以下の内容を参考にしているのですが
データの受け方がどうしてもわかりません。
Edit1.Text
Edit2.Text   
Edit3.Text

この3つのTEXTを外部アプリケーション(ABC.exe)のEdit.textに表示を考えています。

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,
    PChar('C:\ABC.exe'+hoge), // コマンドライン
    nil,                        
    nil,                        
    False,                      
    CREATE_DEFAULT_ERROR_MODE,  
    nil,                        
    nil,
    StartupInfo,
    ProcessInfo                 
  );

{変数を使用}
CloseHandle(ProcessInfo.hProcess);
CloseHandle(ProcessInfo.hThread);
end;


ふじっこ  2004-08-30 20:20:12  No: 10691

質問ですが
CreateProcess呼びだす前にStartupinfoの内容は適切に初期化されてますか?
たとえば、下記のように・・

procedure TForm1.Button1Click(Sender: TObject);
var
  bret: Boolean;
  SI: TStartupInfo;
  PI: TProcessInformation;
  buffcmdLine: String;
begin
  ZeroMemory(@SI, Sizeof(TStartupInfo));
  ZeroMemory(@PI, SizeOf(TProcessInformation));
  wkTitle:='Test!!';
  SI.dwX:=0;
  SI.dwY:=0;
  SI.dwXSize:=100;
  SI.dwYSize:=100;
  SI.lpTitle := PChar(wkTitle);
  SI.dwFlags := STARTF_USESHOWWINDOW;
  SI.cb:=Sizeof(TStartupInfo);
  SI.wShowWindow:=SW_SHOWDEFAULT;
  SI.lpDesktop:=nil;
  SI.lpReserved2:=nil;
  buffcmdLine :='test.exe hoge1 hoge2 hoge3'
  bRet := CreateProcess(nil, Pchar(buffcmdline), nil, nil, False, 0,
      Nil, nil, SI, PI);
  //以下省略  
end;


ふじっこ  2004-08-30 20:21:36  No: 10692

buffcmdLine :='test.exe hoge1 hoge2 hoge3'
の行の後ろに「;」忘れてましたね(汗


Mr.XRAY  URL  2004-08-31 03:53:49  No: 10693

ふじっこ さんが書いていますが,超初心者(この名前はどうもなんとも... )さん
のコードには Startupinfoの初期化部分が抜けているようですね.

例えば簡単に以下のコードでもテストなら十分でしょう.

procedure TForm1.Button1Click(Sender: TObject);
var
     SI: TStartupInfo;
     PI: TProcessInformation;
     Str: String;
begin
     Str:='AAA BBB CCC';
     GetStartupInfo(SI);
     CreateProcess(nil,PChar('C:\ABC.EXE '+Str),nil,nil,False,0,nil,nil,SI,PI);
end;

また,受けとる側のプログラムリストがありませんが,コマンドラインの値
を受取るには,例えば以下のようにします.この場合ABC.EXEというプログ
ラムのOnShowに...

procedure TForm1.FormShow(Sender: TObject);
begin
     if ParamCount>=1 then begin
       Edit1.Text:=ParamStr(1);
       Edit2.Text:=ParamStr(2);
       Edit3.Text:=ParamStr(3);
     end;
end;


超初心者  2004-08-31 05:09:35  No: 10694

ふじっこさん・Mr.XRAY さん貴重ご意見有難うございます。
これからDelphiを極められるようにがんばりますので、
何かありましたらご指導よろしくお願いします。


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

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






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