幾度すみませんがよろしくお願いします。
すこのサイトのレスで以下の内容を参考にしているのですが
データの受け方がどうしてもわかりません。
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;
質問ですが
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;
buffcmdLine :='test.exe hoge1 hoge2 hoge3'
の行の後ろに「;」忘れてましたね(汗
ふじっこ さんが書いていますが,超初心者(この名前はどうもなんとも... )さん
のコードには 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;
ふじっこさん・Mr.XRAY さん貴重ご意見有難うございます。
これからDelphiを極められるようにがんばりますので、
何かありましたらご指導よろしくお願いします。
ツイート | ![]() |