ID do artigo: 185730 - Última revisão: terça-feira, 3 de maio de 2005 - Revisão: 4.0

Como evitar que várias instâncias de um aplicativo VB de 32 bits

Dica do SistemaEste artigo aplica-se a um sistema operativo diferente do que está a utilizar. Foi desactivado o conteúdo do artigo, que pode não ser relevante para si.

Nesta página

Expandir tudo | Recolher tudo

Sumário

Este artigo descreve como evitar o carregamento uma segunda instância de um aplicativo quando o usuário já tem uma instância em execução. Ele também define o foco para a primeira instância do aplicativo Visual Basic quando você tenta iniciar uma segunda instância do mesmo aplicativo.

Mais Informações

Exemplo passo a passo

  1. Crie um novo projeto Visual Basic.
  2. Vá para propriedades e defina o Startup Object (ou Startup Form na VB4) ser Sub Main.
  3. Adicione um módulo padrão para o projeto.
  4. Cole o código a seguir no módulo:
          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
    
          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.
             Unload Me
          End Sub
    
    						
  5. Compile o projeto em um EXE.
  6. Saia do Visual Basic.
  7. Execute o executável que você criou.
  8. Repita a etapa 7.

    RESULTADO: A primeira instância do programa recebe foco e a segunda instância é fechada. Se a primeira instância do aplicativo foi minimizada, ele será restaurado para uma janela normal automaticamente.

Referências

Para obter mais informações sobre como evitar várias instâncias de um aplicativo de 16 bits do Visual Basic 4.0, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
142937  (http://support.microsoft.com/kb/142937/ ) Como evitar que várias instâncias de um aplicativo VB

A informação contida neste artigo aplica-se a:
  • Microsoft Visual Basic 6.0 Learning Edition
  • Microsoft Visual Basic 6.0 Professional Edition
  • Microsoft Visual Basic Enterprise Edition for Windows 6.0
  • Microsoft Visual Basic Control Creation Edition
  • Microsoft Visual Basic 5.0 Learning Edition
  • Microsoft Visual Basic 5.0 Professional Edition
  • Microsoft Visual Basic 5.0 Enterprise Edition
  • Microsoft Visual Basic 4.0 Standard Edition
  • Microsoft Visual Basic 4.0 Professional Edition
  • Microsoft Visual Basic 4.0 de 32 Bits Enterprise Edition
Palavras-chave: 
kbmt kbhowto KB185730 KbMtpt
Tradução automáticaTradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 185730  (http://support.microsoft.com/kb/185730/en-us/ )