Q&A

  • 외부프로그램 실행하기에서..
현재 제가 하고 싶은것은 통합로그인(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프로그램에서는
어떻게 받아야하는지 알고 싶습니다.
3  COMMENTS
  • Profile
    모영철 2005.08.26 00:16
    일반 도스용 프로그램들 생각하면 됩니다.

    CreateProcess함수에 파라미터 집어넣는 부분이 따로 없으니

    ProgramName 부분에 같이 넣어주면 될것같네요..

    어쩌구.exe param1 param2 param3

    이런식으로 한칸띠고 파라미터를 넣어주면 됩니다.

    어쩌구.exe의 소스에는 ParamStr(1) 이건가? 음 맞네요.

    ParamStr(1) 부터 읽으시면 되구요..

    ParamStr(0) 에는 항상 프로그램의 절대 경로가 들어있습니다.

    이거 질문하신게 맞는지 모르겠네요..

  • Profile
    권형근 2005.08.27 01:08



    답변 감사합니다.
    다른 질문을 또 하고자 합니다.

    테스트1, 테스트2 프로그램이 있고, 테스트2는 테스트1에서 파라메타를 받을수도 있고, 아닐수도 있습니다.
    제가 알고 싶은것은 테스트1에서 넘어온 파라메타가 있을경우 테스트2에서 로그인창이 안뜨고
    테스트2가 바로 실행이 되었으면 하는데 잘 안되서요..
    소스는 파일에 추가를 합니다..

    많은 답변 부탁드립니다.
  • Profile
    TeamB 2005.08.30 04:15

    메인폼의 OnActive 나 OnShow 에서 적절히 처리 해주시면 될듯 한데요..

    메인폼이 열릴때...

    ParamCount 와 Params 로 파라미터를 검증하고 파라미터값이 적절하다면 로그인처리하시고 그렇지 않으면 로그인 폼을 띄워주시면 되겟죠...

    그럼..

    • 마이크로김
      2005.08.30 02:43
      form create 적어주면 화면이 clear 됩니다 AForm.Brush.Style := bsClear;
    • 최용일
      2005.08.26 08:25
      안녕하세요. 최용일입니다. HTML로 파일 저장하실때 그냥 텍스트문서를 확장자만 html로 만들어서 저장...
    • 프로글래머
      2005.08.26 01:43
      SpeedButton 의 Flat 를 True 로 하여 필요한 부분에 내려놓고 사용하면 될 것 같은데요 ? 마우스가 가면 ...
    • 나도초급
      2005.08.26 02:38
      답변 감사합니다.. 그런데, 사각 이미지 가 아니라 스피드 버튼으로 처리가 어려워요. 그리고 투명폼을...
    • 권형근
    • 2005.08.26 00:07
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 모영철
      2005.08.26 00:16
      일반 도스용 프로그램들 생각하면 됩니다. CreateProcess함수에 파라미터 집어넣는 부분이 따로 없으니 ...
    • 권형근
      2005.08.27 01:08
      답변 감사합니다. 다른 질문을 또 하고자 합니다. 테스트1, 테스트2 프로그램이 있고, 테스트2는...
    • TeamB
      2005.08.30 04:15
      메인폼의 OnActive 나 OnShow 에서 적절히 처리 해주시면 될듯 한데요.. 메인폼이 열릴때... Param...
    • 토픽
    • 2005.08.25 21:35
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 윤경미
    • 2005.08.25 21:15
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 모영철
      2005.08.26 00:08
      아실지 모르겠습니다만.. 그 에러코드를 더블 클릭하면 알아서 어디서 났는지 찾아줍니다. 아마 이전...
    • 데빠이
      2005.08.25 23:15
      위에 선언한건 procedure buttoncontrol(ntag:integer; bflag:boolean); 이구... 아래 소스상에는 procedu...
    • 최용일
      2005.08.26 08:16
      안녕하세요. 최용일입니다. 델파이의 Source폴더에 보시면 각각의 소스가 있으니 그걸 보시고 새로 함수...
    • 허 강
    • 2005.08.25 12:34
    • 2 COMMENTS
    • /
    • 0 LIKES
    • TeamB
      2005.08.25 18:22
      델 7의 ADO 콤포를 사용해보지 않아서 모르겟는데, 아마도 DisableControls, EnableControls 라는 메소드...
    • 허 강
      2005.08.26 08:35
      답변 감사합니다. 모든것이 해결되었습니다. > >델 7의 ADO 콤포를 사용해보지 않아서 모르겟는데, 아...
    • 김상균
    • 2005.08.25 07:29
    • 5 COMMENTS
    • /
    • 0 LIKES
    • 박홍재
      2005.08.27 11:14
      안녕하세요. 문제는 두개의 필드를 합친 것에 대한 조회에 있는거 같군요. Select 문에서 두개의 Field를...
    • TeamB
      2005.08.26 10:07
      흠...데이터는 검색되지 않습니다. 디비가 MySQL이라고 하셨죠? out_date 가 date 형이나 datetime 형일...
    • 김상균
      2005.08.26 04:36
      out_date 는 날짜형이고 lend_su 는 숫자형입니다. 검색하고자 하는것은 out_date(대여일자)+lend_su(대여...
    • 박홍재
      2005.08.25 23:49
      out_date와 lend_su를 더하는 이유가 무엇인가요.  out_date는 Table의 Field 일거 같은데요.&...
    • 조진희
      2005.08.25 20:28
      저도 잘은 모르지만.. 아마도.. out_date는 형식이 데이터 일꺼 같고.. lend_su는 숫자 일꺼 같은데....
    • 모영철
      2005.08.25 17:58
      이렇게 하면 됩니다 SendMessage(Form2.handle, WM_MOUSEWHEEL, WheelDelta * 256 * 256, MousePos.X + ...
    • 기타맨
    • 2005.08.25 01:50
    • 1 COMMENTS
    • /
    • 0 LIKES
    • TeamB
      2005.08.25 19:13
      Level 과 GetPrev 를 사용하면 될듯합니다. <!-- CodeS --> var   nNode: TTreeNod...
    • 모영철
      2005.08.25 20:30
      메인폼을 없앨순 없습니다. 퀵리포트 폼을 메인으로 바꾸면 가능하겠지만요.. 이런방법이 있는진 모...
    • 장재림
      2005.08.26 08:36
      제가 바라는건 반대로 인데요 메인에서 반대로 프리뷰를 끌수 있는 지 없는지를 알고싶어서 그런건데 ...
    • nilriri™
      2005.08.30 05:48
      가능합니다.. 프리뷰창의 닫기버튼 클릭시 정말로 닫을까요?  라고 confirm메시지 처리를 하...
    • 김성진
      2005.08.25 02:40
      소켓팅이라는 것이 서버와 클라이언트간의 통신이것을 아실겁니다. 그럼 일반적으로 서버쪽은 오픈되어 있...
    • 델파이-델짱
      2005.08.26 18:09
      네 그렇군요.^^; 도움글 감사 드립니다. 관련 해서 한가지 더 질문 할께요^:^ 그러면 혹시 서버소켓...
    • 꼬미사랑
      2005.08.31 02:39
      안녕하세요^^* 가비지나 사용하지 않는 클라이언트 소켓을 찾는 방법보다는 일정 시간 규약된 시간내에 아...
    • 조현태
    • 2005.08.24 12:55
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 꼬미사랑
      2005.08.24 22:22
      클라이언트에서 사용하신 DB랑 원격 서버에 있는 DB의 종류에 따라서 틀리겠죠..방식에 대해서는.. 클라이...
    • 천희택
      2005.08.24 17:59
      안 돌아갑니다. Kernel 자체가 틀린데 안 돌아갑니다. 유닉스의 소스를 리눅스로 옮겨서 컴파일, 링...
    • 임형준
      2005.08.24 19:10
      제가 TStringList, TList, TStream같은 VCL 관련 오브젝트를 사용해서 보통의 표준 파스칼에서는 컴파...
    • ez.J
      2005.08.24 22:39
      유닉스용 델파이는 없습니다. 터보파스칼과 어느정도 호환되는 pascal을 사용해보시기 바랍니다. 수...
    • 임형준
      2005.08.24 08:26
      자문자답입니다만... 제가 만드려는 건 콘솔프로그램인데, 콘솔프로그램은 실행이 되더군요. ^^
    • 윤경미
    • 2005.08.24 02:33
    • 1 COMMENTS
    • /
    • 0 LIKES
    • Runo
      2005.08.24 03:02
      Table Properties 가시면 TableName 항목이 있습니다. 오른쪽에 있는 화살표를 누르면 Table 리스트가 나...
    • 조진희
    • 2005.08.23 23:04
    • 5 COMMENTS
    • /
    • 0 LIKES
    • 프로글래머
      2005.08.24 00:01
      크리스탈리포트에서 Formulas 는 배열입니다. 그러므로 Crpe1.Formulas[0]:='''+Edit1.text+'''; 형식으로...
    • 조진희
      2005.08.24 01:17
      영~ 모르겠어서 다시 질문드립니다.. Crpe1.Formulas[0]:='''+Edit1.text+'''; 이렇게 고쳐서 해 봤는데...
    • 프로글래머
      2005.08.24 01:55
      가물가물 한데요 ...... 기억을 더듬어 가면서 한번 설명을 해 보도록 하지요. 나의 공부도 되니까. ...
    • 조진희
      2005.08.24 04:46
      답변 정말 감사드립니다.. 정말로 많은 도움이 되고있습니다. 그런데,,제가 아직도 잘 모르겠어서..(너무...
    • 프로글래머
      2005.08.24 18:23
      말씀하시는것을 보니 쓰고계시는 버전 9와 6이 엄청난 차이가 있는것 같군요. 죄송합니다만 버전 9를 구...
    • 모영철
      2005.08.23 03:08
      ㅁㅁ
    • 권태훈
      2005.08.23 03:09
    • 민스맘
    • 2005.08.22 23:54
    • 0 COMMENTS
    • /
    • 0 LIKES