Q&A

  • 중복실행시에...
어떤 프로그램이 중복적으로 실행되었을때.



두번째 뜨는 프로그램은 첫번째 뜬 프로그램의 핸들값을 알아서



메세지를 주고 싶거든요. 어떻게 해야 하죠.



findwindow를 쓰면 자기 자신의 핸들값을 가져 와서 ... --;



어떻게 하죠.. 급해요.. !!

2  COMMENTS
  • Profile
    델파이사랑 2001.09.19 02:16
    김씨 wrote:

    > 어떤 프로그램이 중복적으로 실행되었을때.

    >

    > 두번째 뜨는 프로그램은 첫번째 뜬 프로그램의 핸들값을 알아서

    >

    > 메세지를 주고 싶거든요. 어떻게 해야 하죠.

    >

    > findwindow를 쓰면 자기 자신의 핸들값을 가져 와서 ... --;

    >

    > 어떻게 하죠.. 급해요.. !!

    ===============================================================

    중복실행 방지 Function입니다.

    인자의 값이 True이면 showmessage('중복실행 되었습니다..!!');

    로 뿌려주세요..

    원하시는 답이 되었는지..???

    그럼 즐코.





    function DoInstanceExist(WndTitle: String): Boolean;

    var

    hSem: THandle;

    hWndMe, hWndPrev : HWnd;

    semNm, wTtl: array[0..256] of Char;

    begin

    Result := False;



    // Pascal strings 을 Char형 배열로 복사;

    StrPCopy(semNm, 'SemaphoreName');

    StrPCopy(wTtl, WndTitle);



    // 메모리에 Semaphore 생성

    hSem := CreateSemaphore(nil, 0, 1, semNm);



    // semaphore가 이미 존재하는지 검사

    if ((hSem <> 0) and (GetLastError() = ERROR_ALREADY_EXISTS)) then

    begin

    CloseHandle(hSem);



    // 이전 instance 검색

    hWndMe := FindWindow(nil, wTtl);

    if (hWndMe <> 0) then

    begin

    if IsIconic(hWndMe) then

    ShowWindow(hWndMe, SW_SHOWNORMAL)

    else

    SetForegroundWindow(hWndMe);

    end;

    Result := True;

    end;

    end;

  • Profile
    김씨 2001.09.19 02:44
    델파이사랑 wrote:

    > 김씨 wrote:

    > > 어떤 프로그램이 중복적으로 실행되었을때.

    > >

    > > 두번째 뜨는 프로그램은 첫번째 뜬 프로그램의 핸들값을 알아서

    > >

    > > 메세지를 주고 싶거든요. 어떻게 해야 하죠.

    > >

    > > findwindow를 쓰면 자기 자신의 핸들값을 가져 와서 ... --;

    > >

    > > 어떻게 하죠.. 급해요.. !!

    > ===============================================================

    > 중복실행 방지 Function입니다.

    > 인자의 값이 True이면 showmessage('중복실행 되었습니다..!!');

    > 로 뿌려주세요..

    > 원하시는 답이 되었는지..???

    > 그럼 즐코.

    >

    >

    > function DoInstanceExist(WndTitle: String): Boolean;

    > var

    > hSem: THandle;

    > hWndMe, hWndPrev : HWnd;

    > semNm, wTtl: array[0..256] of Char;

    > begin

    > Result := False;

    >

    > // Pascal strings 을 Char형 배열로 복사;

    > StrPCopy(semNm, 'SemaphoreName');

    > StrPCopy(wTtl, WndTitle);

    >

    > // 메모리에 Semaphore 생성

    > hSem := CreateSemaphore(nil, 0, 1, semNm);

    >

    > // semaphore가 이미 존재하는지 검사

    > if ((hSem <> 0) and (GetLastError() = ERROR_ALREADY_EXISTS)) then

    > begin

    > CloseHandle(hSem);

    >

    > // 이전 instance 검색

    > hWndMe := FindWindow(nil, wTtl);

    왜 이렇게 하면 이전 instance를 찾죠?

    이유를 잘 모르겠네요^^;

    createsemaphore와 연관이 있겠죠.. 설명좀 부탁드려요.

    여하간 해결은 되었네요 ..감사합니다.



    > if (hWndMe <> 0) then

    > begin

    > if IsIconic(hWndMe) then

    > ShowWindow(hWndMe, SW_SHOWNORMAL)

    > else

    > SetForegroundWindow(hWndMe);

    > end;

    > Result := True;

    > end;

    > end;