Abrindo um aplicativo só uma vez.
Para verificar se ja existe uma instância de sua aplicação VB rodando geralmente você usa a propriedade PrevInstance.
A propriedade PrevInstance retorna um valor indicando se já existe uma instância de sua aplicação rodando. A sintaxe é a seguinte:
objeto.PrevInstance |
Ex: App.PrevInstance |
onde no lugar de objeto usamos o objeto App.
O objeto App é um objeto gobal que nos dá informação sobre o título, versão , caminho , nome do executavel e arquivo de ajuda e ainda nos informa se uma instância da aplicação já esta sendo rodada.
Geralmente você usa esta instrução no evento Load do formulário que inicia a aplicação e se o valor retornado for verdadeiro você encerra a aplicação que esta sendo carregada pois já existe uma instância da mesma rodando.
Mas e se ao invés de finalizar abruptamente a execução da segunda instância você chamasse a outra instãncia já aberta ? Vejamos como fazer usando as API´s:
1- inicie um novo projeto no VB e no formulário padrão insira as seguintes declarações referentes as API´s usadas:
Private Declare
Function FindWindow Lib "user32" Alias
"FindWindowA" (ByVal lpClassName As String,
ByVal lpWindowName As String) As Long Private Declare Function SetForegroundWindow Lib "user32" (ByVal hwnd As Long) As Long Private Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long |
2- Agora no evento Load do formulário insira o seguinte código:
Private Sub Form_Load() Dim titulo As String Dim vhwnd As Long If App.PrevInstance Then titulo = Me.Caption Me.Caption = "" vhwnd = FindWindow(vbNullString, titulo) Call ShowWindow(vhwnd, 9) Call SetForegroundWindow(vhwnd) End End If End Sub |
Veja que sutilmente chamamos a primeira instância da aplicação em execução antes finalizar a segunda instãncia. Para que isto funcione é preciso que a janela do formulário possua um título.
Até a próxima...