|
Prevent Multiple VB application Instances
Often you'll find it beneficial to allow just one instance
of a VB application to run on each PC. To do so, you can use several standard
Win32 api calls before loading an application, such as in a main module. Obtain
the application window's handle from the startup form's caption with the
FindWindow() API call. If this function returns a non-zero value, then the
specified window is open. Below, is
some example code that uses this function to prevent the main module from
starting. Option Explicit Private Declare Function ShowWindow Lib
"user32" (ByVal hwnd As
Long, ByVal nCmdShow As Long) As Long Private Declare Function FindWindow Lib "user32"
Alias "FindWindowA" (ByVal
lpClassName As String, ByVal lpWindowName
As String) As Long Private Declare Function IsIconic Lib
"user32" (ByVal hwnd As
Long) As Long Private Declare Function SetForegroundWindow Lib
"user32" (ByVal hwnd As Long) As Long Const SW_RESTORE = 9 'Conatants used for the return of the MultiInst function Private Const OPEN_APPLICATION = 0 Sub Main() Dim MultiInstResult As Integer MultiInstResult = MultiInst If MultiInstResult = OPEN_APPLICATION Then Form1.Show
'No
instance of the application is already open, 'continue
to load the login form ElseIf MultiInstResult = SINGLE_INSTANCE_OPEN Then 'An
instance already exists cancel the 'current
application load End End If End Sub Private Function MultiInst() As Integer 'This function determines if a single instance of the
'application is already running. Dim hwndFound As Long
'The window handle strWindowName = "Form's Caption Here" hwndFound = FindWindow(vbNullString, strWindowName) If hwndFound Then 'Set
the function return MultiInst
= SINGLE_INSTANCE_OPEN MsgBox
"A instance of the application is already open." & _
vbCrLf & vbCrLf & _
"Only one open instance allowed.", vbOKOnly + _
vbExclamation, "App Name" If
IsIconic(hwndFound) Then
ShowWindow hwndFound, SW_RESTORE
'Show the window infront of all other windows
SetForegroundWindow hwndFound Else
'Bring the application top most on the screen
SetForegroundWindow hwndFound End
If ElseIf hwndFound = 0 Then 'Set
the function return so it will continue loading MultiInst
= OPEN_APPLICATION End If End Function
|
Send mail to WebMaster with
questions or comments about this web site.
|