Pegando a Janela que esta em execução no Windows com C#

Olá,

Estarei demonstrando nestes post como pegar uma janela de um programa que esteja em execução no Windows. Neste exemplo para demostrar a janela eu irei usar o Caption da Janela ( Texto da Barra Superior). Crie um Form com os seguintes campos, 5 labels e 1 button e 1 Timer, deixe o formulário desta forma:

clip_image002
Imagem 01 – Form Principal

Para que nossa demo funcione precisamos importar o namespace System.Runtime.InteropServices conforme a tabela abaixo:

usingSystem.Runtime.InteropServices;

Agora precisamos chamar dois métodos estáticos externos da DLL User32

[ DllImport("user32.dll") ]
static extern int GetForegroundWindow();

[ DllImport("user32.dll") ]
static extern int GetWindowText(int hWnd,
StringBuilder text,int count);

O GetForegroundWindows retorna um handle para a janela com o qual o usuário está trabalhando atualmente.

O GetWindowText copia o texto da barra de titudo da janela especificada para um buffer.

Uma vez feito isso iremos implementar os métodos para pegar a Janela especificada, ficando assim:

private void BuscarJanelaAtiva()
        {

            const int nChars = 256;
            int handle = 0;
            StringBuilder Buff = new StringBuilder(nChars);

            handle = GetForegroundWindow();

            if ( GetWindowText(handle, Buff, nChars) > 0 )
            {
                this.captionWindowLabel.Text = Buff.ToString();
                this.IDWindowLabel.Text = handle.ToString();
            }

        }

Agora no Timer que vc inseriu na pagina faça a chamada para o método BuscarJanelaAtiva

private void timer1_Tick(object sender, System.EventArgs e)
 {
     BuscaJanelaAtiva();
 }

Nota: Eu deixe o Timer com a configuração no Intervalo de 100 m/s.

Agora implemente no Botão Sair o código abaixo para fechar o formulário

private void sair_Click(object sender, System.EventArgs e)
{
    this.Close();
}

Pronto, já pode rodar seu programa e efetuar os testes, parece bem simples mas acredite este pequeno exemplo é muito perguntado nos fóruns de desenvolvimento em .NET.

Leave a Reply