Q&A

  • 재실행 막는 방법 어디가 잘못됬는지 모르겠내요
안녕하세요..
정말 같은 질문을 3번식이나 올리는 바보 초짜입니다 ㅠ ㅠ
지금 재 실행 막는것을 김경록님이 자세히 갈켜주셔서 그걸 토대로
해봤는대 이번에는 실행이 되어있지도 않는대도 실행이 될려다가
안되는 현상이 되어버렸습니다 ㅠ ㅠ

program Project1;

uses
  Forms,Windows,
  Unit1 in 'Unit1.pas' {MainForm},
  Unit2 in 'Unit2.pas' ;

{$R *.res}

var
  Handle : THandle;

begin
  Handle := FindWindow(nil,'HYMemo'); // 여기서 HYMemo 는 MainForm에 Caption 입니다.그런대 이부분에 HYmemo 외에 다른것을 넣으면 재실행방지가 안되고 계속 실행이 되어버리고 HYMemo 를 넣어버리면 아예 실행이 안됩니다 ㅠ ㅠ
  if handle > 0 then
     begin
       exit;
     end;
  Application.Initialize;
  Application.ShowMainForm := False;
  Application.Title := 'HY 쪽지';
  Application.CreateForm(TMainForm, MainForm);
  ShowWindow(Application.Handle,SW_HIDE);
  Application.Run;
end.

이렇게 프로젝트에 소스를 했는대 어떻게 수정을 하면될까요 ㅠ ㅠ
4  COMMENTS
  • Profile
    Mr. Ziker 2002.03.16 09:30
    안녕하세욤

    dpr파일을 수정하는 방법 입니다.
    님의 dpr과 비교 해 보신다면 쉽게 알 수 있습니다.

    ========================================================
    program salman;

    uses
      Forms,windows,
      UnitClient in 'UnitClient.pas' {frmClient},
      UnitChat in 'UnitChat.pas' {frmChat};
      
    var
    Mutex : THandle;
    {$R *.RES}

    begin
      Mutex := CreateMutex(nil, True, 'SALMAN_NO_DOUBLE_EXECUTE');
      if (Mutex <> 0 ) and (GetLastError = 0) then
      begin
        Application.Initialize;
        Application.Title := 메신져';
      Application.CreateForm(TfrmClient, frmClient);
        Application.CreateForm(TfrmChat, frmChat);
        Application.Run;
        if Mutex <> 0 then CloseHandle(Mutex);
    end;


    end.
  • Profile
    김경록 2002.03.16 04:09
    아... 제가 드렸던 답변 같군여..
    먼저 죄송하다는 이야기를 먼저 드려야하겠군여..
    음.. 한참 치다가 alt키를 누르고 쳤나봅니다..   ^^;
    결과적으로..

      if handle > 0 then    -->  이것이 아니구..
                                          if handle <> 0 then
                                          이것입니다...
                                          같지 않다는...  ㅡㅡ^
                                          
    죄송한 마음에..
    제가 직접쓰는 코딩을 아래에 추가해 드립니다..
    참고하십시오..
    물론 실무에 사용하는 것임..
    ================================================================
            hPrevWnd := FindWindow(Nil, 'UMAIN - 팁관리 프로그램');
            If hPrevWnd <> 0 Then
            Begin
                ShowMessage('이미 팁관리 프로그램이 실행중입니다..');
                SetForeGroundWindow(hPrevWnd);
            End
            Else Begin
                Application.Initialize;
                Application.Title := 'UMAIN - 팁관리 프로그램';
                Application.CreateForm(TFMain, FMain);
                Application.Run;
            End;
    ================================================================

      





  • Profile
    델.초 2002.03.16 04:55
    program Project1;

    uses
      Forms,Windows,
      Unit1 in 'Unit1.pas' {MainForm},
      Unit2 in 'Unit2.pas' ;

    {$R *.res}

    var
      Handle : THandle;

    begin
      Handle := FindWindow(nil,'HY 쪽지');
      if Handle <> 0 then
         begin
           Exit;
         end
      else
      begin
      Application.Initialize;
      Application.ShowMainForm := False;
      Application.Title := 'HY 쪽지';
      Application.CreateForm(TMainForm, MainForm);
      ShowWindow(Application.Handle,SW_HIDE);
      Application.Run;
      end;
    end.

    소스를 이런식으로 수정을 했는대요.ㅠ ㅠ
    역시나 그대로인거 같아요...뭔가가 잘못된거 같은느낌이 드는대
    그 뭔가가 뭐지를 잘 모르겠어요 ㅠ ㅠ

  • Profile
    김경록 2002.03.18 11:43
    음.. 뭔가가 빠진듯한 느낌이..
    그렇다면여..
    한번 체크해보심이 좋을 듯하네여..
    우선,
    MainForm의 Caption에 'HY 쪽지'를 넣고 프로그램 실행해 보세여..
    되는지 체크해 보세여..



                                                                              일부러 쓰신것?
                                                                              (MDI? SDI?)