برای اینکه بخواهید از اجرای مجدد یک برنامه جلوگیری کنید میتوانید از کد زیر استفاده کنید:
Private Sub Form_Load()
If App.PrevInstance Then
MsgBox "This program already in use.", vbCritical
End
End If
End Sub
ولی کد بالا مشکلی که داره اینه که وقتی شما برنامه رو به یک پوشه یا شاخه دیگر کپی میکنید، و یا اسم آن را عوض میکنید برنامه باز هم اجرا میشه و کد کارایی نداره. برای حل این مشکل میتوانید از کد زیر استفاده کنید. البته این کد، کد حرفهای نیست. ولی برای جلوگیری کردن از اجرای مجدد مناسب است:
Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
Private Declare Function GetWindowTextLength Lib "user32" Alias "GetWindowTextLengthA" (ByVal hwnd As Long) As Long
Private Sub Form_Load()
Dim haN As Long, l As Long, s As String
If App.PrevInstance Then
MsgBox "This program already in use.", vbCritical
End
End If
haN = Val(GetSetting("Project1", "Project1", "Project1"))
If haN <> Me.hwnd And haN <> 0 Then
l = GetWindowTextLength(haN) + 1
s = String(l, 0)
GetWindowText haN, s, l
s = Left(s, l - 1)
If s = Me.Caption Then
MsgBox "This program already in use.", vbCritical
End
End If
End If
SaveSetting "Project1", "Project1", "Project1", Str(Me.hwnd)
End Sub
در این کد عنوان فرم خیلی تاثیر داره. باید سعی کنید از عنوانی برای فرم خود استفاده کنید، که در برنامهی دیگری استفاده نشده باشد.