Descobrindo a janela ativa na área de Trabalho.
Precisando saber qual a janela ativa no desktop ???
Vamos mostrar um pequeno projeto que permite encontrar qual a janela ativa. No projeto vamos usar um controle Timer que aciona a cada 10 segundos a API GetForeGround para determina a janela e a seguir faz uma chamada a API GetWindowText para obter o título da janela. Vam os dar uma olhada nas API´s :
GetForeGround - função que retorna o identificador da janela ativa.
- Private Declare Function GetForegroundWindow Lib "user32" () As Long
- Esta função não possui parâmetros
- Library - User32
GetWindowText - Esta função copia o texto do título da janela para um buffer. Se a janela for um controle o texto do controle será copiado.
- Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
- Parâmetros :
- hWnd - Idenfiica a janela ou controle que contém o texto.
- lpString - Aponta para o buffer que irá receber o texto.
- nMaxCount - Define o número máximo de caracteres que será copiado para o buffer incluindo Null. Se o texto exceder este número será truncado.
- Library - User32
Usamos a janela de depuração ( Debug.Print) para exibir os títulos das janelas . Assim Você pode ver facilmente qual a janela esta ativa. Você pode fazer esta monitoração de forma transparente ao usuário.
- Inicie um novo projeto no Visual Basic e no formulário padrão insira um controle Timer
- Faça a declaração para as API´s usadas no formulário conforme o código abaixo:
private Declare Function GetForegroundWindow
Lib "user32" () as
Long private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (byval hwnd as _ Long, byval lpString as string, byval cch as Long) as Long |
- No evento Load do formulário vamos definir o intervalo para a chamada das API´s . Usamos 100 ou seja 10 s.
private Sub Form_Load() Timer1.Interval = 100 End Sub |
- No evento Timer do controle - Timer1 - insira o código que faz a chamada as API´s:
private Sub Timer1_Timer() static lHwnd as Long Dim lCurHwnd as Long Dim sText as string * 255 ' lCurHwnd = GetForegroundWindow If lCurHwnd = lHwnd then Exit Sub lHwnd = lCurHwnd If lHwnd <> hwnd then Caption = "Janela Ativa: " & Left$(sText, GetWindowText(lHwnd, byval sText, 255)) else Caption = "Janela Ativa : Form1" End If End Sub |
Execute o projeto e vá abrindo as janelas , perceba que na janela immediate o nome do titulo da janela esta sendo exibido indicando que esta é a janela ativa.
Só isto , até mais...
José Carlos Macoratti