Q&A

  • 질문 ] 두번 실행 되지 않도록하는 방법이 있나여?
버튼을 누르면 ShellExecute를 이용하여 실행파일을 실행 시키는데

두번 누르면 두개의 창을 통해 실행이 됩니다.

그래서 두번째 실행시에 실행을 하지않고 처음 열었던 실행화일이

열리게 하고 싶은데 잘 안됩니다.

도움을 부탁합니다.

delphi 3, 4 사용

2  COMMENTS
  • Profile
    하얀까마귀 2000.01.28 16:14
    bluesky wrote:

    > 버튼을 누르면 ShellExecute를 이용하여 실행파일을 실행 시키는데

    > 두번 누르면 두개의 창을 통해 실행이 됩니다.

    > 그래서 두번째 실행시에 실행을 하지않고 처음 열었던 실행화일이

    > 열리게 하고 싶은데 잘 안됩니다.

    > 도움을 부탁합니다.

    > delphi 3, 4 사용



    여러가지가 있거든요?

    그중에서 간단한거 몇개만 적을께요..



    첫번째-

    FindWindow(appClass, appTitle);

    우선 같은 프로그램이 실행되었는지 찾으세요..

    그리고 있다면 종료하면 되겠죠?

    그리고 이전의 윈도우를 상위로 올려주면 되고.

    -- 이건 별로 탐탁치 않아서 전 안써요..



    두번째

    Application.Initialize;

    begin

    CreateFileMapping($FFFFFFFF, nil, PAGE_READWRITE, 0,1024, 'SharedExists' );

    if GetLastError=ERROR_ALREADY_EXISTS then

    begin

    ShowMessage('프로그램이 실행되어 있습니다.');

    halt;

    end;

    end;



    세번째... (제가 주로 쓰는 방법입니다.)

    if HPrevInst <> 0 then

    ShowMessage('프로그램이 실행되어 있습니다.')

    else

    begin

    Application.CreateForm(TForm1, Form1);

    Application.Run;

    end;

    HPrevInst는 윈도우가 실행될때 원본 이니까 0가 됩니다.

    두번째가 실행될때는 1이 되겠죠? 그리고 2,3.... 그렇게 늘어갑니다.

    자기가 사용하는 메모리만 늘어나죠





  • Profile
    하얀 까마귀님 다시 2000.01.29 00:44
    bluesky

    답변 고맙구여 하지만 잘 모르겠거든여..

    답변중

    > 세번째... (제가 주로 쓰는 방법입니다.)

    > if HPrevInst <> 0 then

    > ShowMessage('프로그램이 실행되어 있습니다.')

    의 구분에서 말하는 HPrevinst 가 본 실행파일을 말하는것인가여?

    본 프로그램이 종료되던데...



    서브 실행파일의 HPrevinst의 값을 알려면 어떻게 해야 하나여?

    자세하게 부탁합니다.