Q&A

  • 외부프로그램 핸들명 구하기..
아래의 내용을 보고 실행하니 핸들값이 뭔지 모름니다.

고수님의 지도 부탁 합니다. -꾸벅- (test.exe 의 핸들값은....)



김정일 wrote:

> 예를들어,

> C:Program FilesTestTest.exe

> 라는 파일명을 이용해서,

> 현재 이 프로그램이 실행이 되었는지를 알고 싶습니다.

> 만일 해당 프로그램이 실행되어져 있는경우,

> 해당 프로그램의 핸들을 얻고 싶은데,

> 어찌하면 좋을까요?



이런식으로 코딩을 해보세요.

procedure FormCreate(Sender: TObject);

begin

if DoInstanceExist(Self.Caption) = true then

begin

showmessage('프로그램이 이미 실행중 입니다.');

halt;

end;

End;



function DoInstanceExist(WndTitle: String): Boolean;

var

hsem : THandle;

hWndMe : HWnd;

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

begin

Result := False;

StrPCopy(semNm, 'Test');

StrPCopy(WTtl, WndTitle);

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

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

CloseHandle(hSem);

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;



1  COMMENTS
  • Profile
    타락천사... 2000.09.17 06:53
    안녕하세요.. 타락임다...



    소스를 다시 함 잘 보시는게 좋겠습니다..



    소스안에 이미 핸들값이 있군여..



    조은 함수군여..



    즐푸하세요...^^



    타락천사....





    김남영 wrote:

    > 아래의 내용을 보고 실행하니 핸들값이 뭔지 모름니다.

    > 고수님의 지도 부탁 합니다. -꾸벅- (test.exe 의 핸들값은....)

    >

    > 김정일 wrote:

    > > 예를들어,

    > > C:Program FilesTestTest.exe

    > > 라는 파일명을 이용해서,

    > > 현재 이 프로그램이 실행이 되었는지를 알고 싶습니다.

    > > 만일 해당 프로그램이 실행되어져 있는경우,

    > > 해당 프로그램의 핸들을 얻고 싶은데,

    > > 어찌하면 좋을까요?

    >

    > 이런식으로 코딩을 해보세요.

    > procedure FormCreate(Sender: TObject);

    > begin

    > if DoInstanceExist(Self.Caption) = true then

    > begin

    > showmessage('프로그램이 이미 실행중 입니다.');

    > halt;

    > end;

    > End;

    >

    > function DoInstanceExist(WndTitle: String): Boolean;

    > var

    > hsem : THandle;

    > hWndMe : HWnd;

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

    > begin

    > Result := False;

    > StrPCopy(semNm, 'Test');

    > StrPCopy(WTtl, WndTitle);

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

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

    > CloseHandle(hSem);

    > 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;

    >