Announcement

Collapse
No announcement yet.

End if Previous Instance

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Dave Biggs
    replied
    Here's another version based on some code once posted by Semen which will bring the already running program to the fore..
    Code:
    'Function PBMain
    'Mutex check
    Dim WinName As Asciiz * %MAX_PATH
    Dim hMutex As Dword, hForWnd As Dword, hWin As Dword
     
    WinName = $AppTitle
    
    hMutex = CreateMutex(ByVal %NULL, 0, WinName)
      If hMutex = %NULL Then Exit Function
      If GetLastError = %ERROR_ALREADY_EXISTS Then    'already running!
        hWin = FindWindow (ByVal %Null, WinName)      'find handle of target window
        hForWnd = GetForegroundWindow                 'handle of current foreground window
          'Set own window to the top in Z-order with %HWND_TOP
          SetWindowpos hWin, %HWND_TOP, 0, 0, 0, 0, %SWP_NOMOVE Or %SWP_NOSIZE Or %SWP_SHOWWINDOW
          'Disable current foreground window.
          EnableWindow hForWnd, 0 
          'Redirect focus to next window in Z-order / move to foreground and activate
          SetForegroundWindow hWin                    
          'Re-enable previous foreground window
          EnableWindow hForWnd, 1
        Exit Function
      End If

    Leave a comment:


  • Gösta H. Lovgren-2
    replied
    Rudy,

    Here's a Mutex example:
    Code:
    Function PBMain
     
         Mutex_Name$ = "Progam_To_Check_if_Running"
           ' GHL Added Mutex code from PB Forum by ???
                'Check to see if program already running
                   Local hmutex&, smutex$ 'just used for testing program existence
                smutex$ = Mutex_Name$   'Program name 
                hmutex& = CreateMutex(ByVal %Null, 0, ByVal StrPtr(smutex$))'check if running
                If hmutex& <> %Null Then 'Program probably already running
                   If GetLastError() = %error_already_exists Then 'Constant defined in WinAPI
                      MsgBox $CrLf & " is already running",, _
                             SmuTex$
                     Exit Function
                  End If 
                End If
    'Rest of code ...
    End Function
    === http://Www.SwedesDock.Com ===
    "Education is a progressive discovery
    of our own ignorance."
    Will Durant
    === http://Www.SwedesDock.Com ===

    Leave a comment:


  • Michael Mattias
    replied
    There have got to be literally dozens of "previnstance" code snippets here.

    I'd use one which uses a mutex, not one of those which use "FindWindow" but that's probably just a 'panache points' thing....

    MCM

    Leave a comment:


  • Roger Garstang
    replied
    Code:
    Local hWnd As Dword
    
    hWnd= FindWindow(App_ClassName, ByVal %Null)
    If hWnd Then 
          If IsWindowVisible(hWnd)= 0 Then ShowWindow hWnd, %SW_SHOW
          SetForegroundWindow hWnd 
          'End Current Duplicate Instance
    Else
          'Continue with this instance
    End If

    Leave a comment:


  • Rudy Steury
    started a topic End if Previous Instance

    End if Previous Instance

    VB6 has a very convenient way to end a new instance of an application if the application has an instance running.

    The VB code would be : If App.PrevInstance Then End

    I know this could be done with API calls but I am not sure what is the best way to accomplish it in the console and windows powerbasic programs. I think one method would be to detect the window of the running programs or an other way apparantly uses "mutex" API's - which I haven't really investigated enough to understand.

    Right now I need to "end" a couple of console powerbasic programs if they are launched when the programs are already running. If more than one instance of either of these programs runs it will completely corrupt a data base.

    Can anyone point me to the code I need? Or to an explanation of what I need to do to solve the multiple instances problem.

    Thanks

    Rudy Steury
Working...
X