Instance programu   zodpovězená otázka

VB6/VBA

Dobrý den.

Prosím, jde nějak zjistit, jestli již není spuštěna jiná instance programu? Chci znemožnit opětovné spuštění aplikace..

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Ano. Použitím tzv. Mutexu, se kterým lze ve VB6 pracovat bohužel pouze pomocí Windows API.

http://msdn.microsoft.com/en-us/library/...

nahlásit spamnahlásit spam 0 odpovědětodpovědět

This article describes how to avoid loading a second instance of an application when the user already has one instance running. It also sets the focus to the first instance of the Visual Basic application when you attempt to start a second instance of the same application.

'module
Option Explicit

      Public Const GW_HWNDPREV = 3

      Declare Function OpenIcon Lib "user32" (ByVal hwnd As Long) As Long
      Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
        (ByVal lpClassName As String, ByVal lpWindowName As String) _
         As Long
      Declare Function GetWindow Lib "user32" _
        (ByVal hwnd As Long, ByVal wCmd As Long) As Long
      Declare Function SetForegroundWindow Lib "user32" _
        (ByVal hwnd As Long) As Long

'form
      Private Sub Form_Load()
            If App.PrevInstance Then
               ActivatePrevInstance
            End If
         End Sub

      Sub ActivatePrevInstance()
         Dim OldTitle As String
         Dim PrevHndl As Long
         Dim result As Long

         'Save the title of the application.
         OldTitle = App.Title

         'Rename the title of this application so FindWindow
         'will not find this application instance.
         App.Title = "unwanted instance"

         'Attempt to get window handle using VB4 class name.
         PrevHndl = FindWindow("ThunderRTMain", OldTitle)

         'Check for no success.
         If PrevHndl = 0 Then
            'Attempt to get window handle using VB5 class name.
            PrevHndl = FindWindow("ThunderRT5Main", OldTitle)
         End If

         'Check if found
         If PrevHndl = 0 Then
         'Attempt to get window handle using VB6 class name
         PrevHndl = FindWindow("ThunderRT6Main", OldTitle)
         End If

         'Check if found
         If PrevHndl = 0 Then
            'No previous instance found.
            Exit Sub
         End If

         'Get handle to previous window.
         PrevHndl = GetWindow(PrevHndl, GW_HWNDPREV)

         'Restore the program.
         result = OpenIcon(PrevHndl)

         'Activate the application.
         result = SetForegroundWindow(PrevHndl)

         'End the application.
         End
      End Sub
nahlásit spamnahlásit spam 0 odpovědětodpovědět

pre VB6 skús toto :

If App.PrevInstance=True Then

End

end if

Pokiaľ je už ten istý program spustený ukonči jeho druhé spustenie.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět
If App.PrevInstance Then Unload Me 

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

To je přesně vončo! Děkuji :)

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback