Q&A

  • 같은 프로그램 이중으로 실행을 막으려면?
제목대로 같은 프로그램 이중으로 실행을 막으려면? 어느부분에서 건드려야 하는지...
부탁드립니다.
위에 설명이 이해가 안되시나요...
다름이 아니고 실행화일을 실행하면 또 실행 되는 문제를 막으려고 합니다.
3  COMMENTS
  • Profile
    송재진 2002.10.06 02:48
    제가 보던 책에서 나온건데........
    그책의 말을 인용하면 ㅡㅡ^
    음... 원칙적으로 두번실행이 가능한 윈도우즈 환경에서 두번실행을 금지시키는것은 약간 복잡합니다.
    윈도우즈에서 두번실행을 금지시키는것은 방법은 없는걸루 알고있습니다.
    다만 프로그램이 실행될때 같은 프로그램이 실행중인가를 살펴보고 이미 실행중이면 종료하는 방법을 사용하여 두번 실행되지 않도록 할수있다고 들었습니다.  댈파이로 만든 플그램은 제일 먼저 프로젝트가 제어권을 가지므로, 즉 프로젝트 파일이 엔트리 포이트가 됩니다. 그래서 프로그램이 시작된느 첫지점인 DPR파일을 직접수정해야만 두번 실행을 금지할수있져...
    먼저.. 추가할 부분은 Uses 절, var 선언부 입니다.
    자세한 소스는
    (추가부분은 소스뒤에 **** 표를 해 두었습니다.)

    program Once;

    uses
       Windows,            ****************
       Forms,
       Once_f in 'Once_f.pas' (Form1);

    {$R *.RES}
    var                         ****************
       hPrevWnd;THandle;   *************
    begin
       hPrevWnd := FindWindow(Nil, 'OnceForm');    **********
       if hPrevWnd <> 0 then           ***********
          begin              ***********
             SetForegroundWindow(hPrevWnd);    **********
          end        *************
       else       ***********
          begin       **********
          Application.Initialize;
          Application.CreateForm(TForm1, Form1);
          Application.Run;
          End;       ***********
    End.

    이렇게하면 될겁니다.
  • Profile
    머슴 2002.10.05 00:23
    program Project;

    uses
    Forms,windows,
    Unit1 in 'Unit1.pas' {Form1};

    var
    Mutex : THandle;

    {$R *.RES}

    begin
        Mutex := CreateMutex(nil, True, 'noDuplicate');
        if (Mutex <> 0 ) and (GetLastError = 0) then
         begin

          Application.Initialize;
          Application.CreateForm(TForm1, Form1);
          Application.Run;

          if Mutex <> 0 then CloseHandle(Mutex);
        end;
    end.
  • Profile
    최우영 2002.10.07 19:46
    막는 방법도 여러가지가 있어네요..
    많은 도움이 되었습니다.