K & K Consulting    K & K Consulting

K&K Home VB Guru Home Search VB Site VB Code VB Tips VB Tutorials VB Questions

K&K Home
Up
VB Home

 

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
Private Const SINGLE_INSTANCE_OPEN = 1

 

Sub Main()

Dim MultiInstResult As Integer

  'Call procedure to determine if an instance of the application is already loaded

MultiInstResult = MultiInst

  'Handle the result from the MultiInst function

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
Dim strWindowName       'The Caption on the window

  'Set the caption of the application form

strWindowName = "Form's Caption Here"

  'Get the handle of the application if it is open

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 application minimized, restore, show it on top

     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.
This website is best viewed with a screen resolution of 800*600 or better.
This website is optimized for Microsoft Internet Explorer 6.x
K&K Consulting, Proud to be a Microsoft Business Partner.
Last modified: January 31, 2002