posted by 범벙이 2012. 9. 27. 20:11
If _Singleton("TEST") = 0 Then
    MsgBox(0, 'ERROR', '이미 프로그램이 실행중입니다.')
Else
    MsgBox(0, 'OK', '프로그램이 처음 실행되었습니다.')
EndIf

이 소스를 컴파일하여 Test.exe란 실행파일을 얻었습니다.
처음으로 Test.exe를 실행 시키면 "프로그램이 처음 실행되었습니다." 라는 메시지를 얻을 수 있겠죠...
이 상태에서 메시지 박스를 닫지 않은 상태에서  또 Test.exe 프로그램을 실행시킨다면 '이미 프로그램이 실행중입니다.'
라는 메시지를 얻을 수 있을 것입니다.

위 소스를 조금 수정해 보죠....

While 1
    If _Singleton("TEST") = 0 Then
        Exit
    Else
        Run('notepad.exe')
    EndIf
WEnd

컴파일하고 Test.exe를 실행합니다. 처음 Test.exe를 실행하면 노트패드가 실행되겠지만,

두번째 실행할 경우는노트패드 실행 없이 Test.exe가 종료될 것입니다.

물론 처음 실행된 것은 계속 실행되어 있겠죠...

예제에 조금 더 살을 붙이겠습니다. 우리가 원하는 Test.exe 프로그램은 노트패드가 이미 실행중이라면

더이상 노트패드가 실행되지 않기를 바랍니다.

Test.exe를 통하지 않고 실행된 노트패드까지 포함해서 말이죠...

누군가가 [시작]-[모든 프로그램]-[보조프로그램]-[메모장] 메뉴를 통해

노트패드를 실행하고 창을 숨겨두었습니다. 이경우 Test.exe를 실행하면 어떻게 될까요????
Test.exe가 실행되면서 노트패드를 열게 될것입니다. Test.exe 프로그램이 오류를 일으킨 셈이죠...

이럴 경우 사용 할 수 있는 방법이 ProcessExists()함수를 이용하는 방법입니다.

ProcessExists()함수는 인자로 받은 프로세스명 또는 프로세스ID가 이미 실행프로세스 상에

존재할 경우프로세스ID값을 반환합니다. 프로세스가 존재하지 않는다면 0을 반환하죠....

다음과 아래 예제는 위에서 언급한 문제를 해결한 소스입니다.

If ProcessExists('notepad.exe') = 0 Then
    Run('notepad.exe')

이제 이 소스를 컴파일한 Test.exe파일을 실행하면 이미 메모장이 실행되어 있을 경우

Test.exe는 아무 동작 없이 종료될 것이고 Test.exe를 몇번을 실행하더라도

메모장은 하나만 열려있을 것입니다.

펌(http://www.usboffice.kr/)