none
Chamar aplicação que já está em execução RRS feed

  • Pergunta

  • Bom dia....

    Eu tenho um sistema que é single-instance, mas eu que implementei dentro de applicationEvents, no evento Statup, onde eu pego o processo e comparo, e vejo se já tem um processo com o mesmo nome em execução, então eu fecho a tentativa da segunda abertura do sistema, mas eu gostaria de antes de fechá-la, chamar na tela a execução ativa, já tentei via API alguns códigos, mas como eu dou hide na tela e ela fica apenas no notify, não consigo chamar a tela, se a tela fica apenas minimizada funciona, será que alguém poderia me ajudar, pois precisaria chamar a janela da aplicação que está hide e dar um show nela. O código abaixa funciona quando o form está minimizado, mas no meu sistema não permito que minimize e fique na taskbar, fica apenas o icone do notify.

    'Verifica se o software já está sendo executado
                    'Não é permitido executar mais de uma instância do sistema ao mesmo tempo.
                    Dim emExecucao As Boolean
    
                    emExecucao = Process.GetProcessesByName(Process.GetCurrentProcess.ProcessName).Length > 1
    
                    'Para uso em debug
                    If Process.GetCurrentProcess.ProcessName.ToString.Contains(".vshost") Then emExecucao = False
    
                    If emExecucao Then
                        'Pego o processo atual que está executando, através do nome do meu precesso que estou tentando iniciar
                        Dim pInstance As Process = clsMetodosGerais.GetRunningInstance(Process.GetCurrentProcess().ProcessName)
                        If Not pInstance Is Nothing Then
                            Dim handle As IntPtr = pInstance.MainWindowHandle
                            If Not IntPtr.Zero.Equals(handle) Then
                                clsMetodosGerais.ShowWindow(handle, 1)
                                clsMetodosGerais.SetForegroundWindow(handle)
                            End If
                        End If
    
                    End If

    O problema é que quando o form está minimizado a propriedade MainWindowHandle tem valor, quando está hide vem zerado, alguém sabe como eu poderia resolver este problema, sem a possibilidade de permitir que minimize a tela ficando no taskbar.

    Obrigado.

    segunda-feira, 3 de setembro de 2012 13:39

Respostas

  • Bom como eu já resolvi este problema, vou deixar aqui minha resolução:

    Percebi que o MainWindowHandle de um form só aparece se a propriedade ShowInTaskBar estiver True, então eu guardo esse valor no registro do windows e recupero no ApplicationEvents da utilizando os seguintes metodos:

    ShowWindow(handle, 1)
    SetForegroundWindow(handle)

    segunda-feira, 10 de setembro de 2012 13:12