현재 제가 하고 싶은것은 통합로그인(A)과 단독로그인(B)이 있다고 하면,
통합로그인(A)에서 로그인한 사람이 A프로그램에서 특정 버튼을 클릭했을 때,
단독로그인(B) 프로그램이 실행하게 하고 싶습니다.
B프로그램이 실행되면서 A프로그램에서 넘어온 파라메터를 읽을수 있는 방법을 알고 싶슴다.
다음은 통합로그인(A)에서 코딩한것임다.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ShellAPI, TFlatButtonUnit;
type
TForm1 = class(TForm)
FlatButton1: TFlatButton;
FlatButton2: TFlatButton;
procedure FlatButton2Click(Sender: TObject);
procedure FlatButton1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
RunProcess: Longint;
implementation
{$R *.dfm}
function ExecNewProcess(ProgramName: String): Longint;
var
StartInfo : TStartupInfo;
ProcInfo : TProcessInformation;
CreateOK : Boolean;
begin
FillChar(StartInfo, SizeOf(TStartupInfo),#0);
FillChar(ProcInfo, SizeOf(TProcessInformation),#0);
StartInfo.cb := SizeOf(TStartupInfo);
if CreateProcess(PChar(ProgramName),nil, nil, nil,False,
CREATE_NEW_PROCESS_GROUP+NORMAL_PRIORITY_CLASS, nil, nil, StartInfo,
ProcInfo) then
Result := ProcInfo.hProcess
else
Result := 0;
end;
procedure KillProcess(hProcess: Longint);
begin
// 명시한 process를 강제 종료시킨다
if TerminateProcess(hProcess, 0) = FALSE then
ShowMessage('TerminateProcess error !')
else
ShowMessage('TerminateProcess successfully !');
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
RunProcess := 0;
end;
procedure TForm1.FlatButton1Click(Sender: TObject);
begin
// 프로그램 실행
RunProcess := ExecNewProcess('ABC.EXE');
{ 실행시킨 프로그램이 종료될때까지 기다리려면 이 주석을 여세요
if RunProcess <> 0 then
WaitForSingleObject(RunProcess, -1);
}
end;
procedure TForm1.FlatButton2Click(Sender: TObject);
begin
// 현재 실행중인 프로그램 죽이기
if RunProcess <> 0 then
begin
KillProcess(RunProcess);
RunProcess := 0;
end;
end;
end.
이렇게 하면 B프로그램이 실행은 되는데, A프로그램에서 파라메터를 어떻게 넘겨야 하며, B프로그램에서는
어떻게 받아야하는지 알고 싶습니다.
CreateProcess함수에 파라미터 집어넣는 부분이 따로 없으니
ProgramName 부분에 같이 넣어주면 될것같네요..
어쩌구.exe param1 param2 param3
이런식으로 한칸띠고 파라미터를 넣어주면 됩니다.
어쩌구.exe의 소스에는 ParamStr(1) 이건가? 음 맞네요.
ParamStr(1) 부터 읽으시면 되구요..
ParamStr(0) 에는 항상 프로그램의 절대 경로가 들어있습니다.
이거 질문하신게 맞는지 모르겠네요..