Tip/Visual Basic2009. 5. 7. 22:00
이 글의 주소 : http://winpe.pe.kr/entry/VB-No-Duplicate (복사)
불펌을 금지합니다.
VB로 프로그래밍을 짜다보면 프로그램이 중복실행이 되지 않게 하고 싶을 경우가 있습니다.
그럴때 사용하는 코드는 아래와 같습니다.

Private Sub Form_Load()
    If App.PrevInstance = True Then
        MsgBox "프로그램이 이미 구동중입니다", vbExclamation, "이미 구동중"
        End
    End If
End Sub
이 방법으로는 간단하게 중복실행을 방지할수 있습니다만, 어느 정도 한계가 있습니다.
예를 들면 파일이름을 바꾸거나 프로그램을 다른 위치에 복사해놓고 실행하면 중복실행이 됩니다.

이를 방지하려면 API를 사용 하려면 됩니다.

모듈을 하나 추가해서 아래 코드를 넣습니다.
'// API Needed
Private Declare Function CreateWindowEx Lib "user32" Alias "CreateWindowExA" (ByVal dwExStyle As Long, ByVal lpClassName As String, ByVal lpWindowName As String, ByVal dwStyle As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hWndParent As Long, ByVal hMenu As Long, ByVal hInstance As Long, lpParam As Any) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

'// Instance Code
Private Const InstanceCode = "A8F500EA:D54F:210F:ED0A:F4A5A20C038B"

Public Function PrevInstance() As Boolean
    '*** This function checks if there is another instance running ***
    
    '// Check for a window containing the InstanceCode
    '// If it is found, then return true (another instance is running)
    If FindWindow(vbNullString, ByVal InstanceCode) Then
        PrevInstance = True
        Exit Function
    End If
    
    '// Else, create the window with the InstanceCode
    CreateWindowEx 0&, "STATIC", InstanceCode, 0&, 0&, 0&, 0&, 0&, 0&, 0&, App.hInstance, 0&
    PrevInstance = False
End Function


그다음에 form_load부분에 아리의 코드를 넣습니다.

Private Sub Form_Load()
    If PrevInstance Then
        MsgBox "프로그램이 이미 구동중입니다", vbExclamation, "이미 구동중"
        End
    End If
End Sub


이렇게 하시면 프로그램 파일 이름을 변경하거나 위치를 이동해서 실행해도 중복실행이 되지 않습니다.
자료 출처: http://www.vbfrance.com/forum/sujet-PROGRAMME-DEJA-OUVERT_559534.aspx

'Tip > Visual Basic' 카테고리의 다른 글

간편히 IP확인하는 프로그램 만들기  (3) 2009.04.13


Posted by Hirano