Enviando um clique do mouse para um botão na barra de tarefas usando C#
Pergunta
Em um aplicativo no qual estou trabalhando atualmente, um requisito é trazer para primeiro plano uma janela de um aplicativo externo.Fazer chamadas de API do Win32, como a janela BringWindowToTop e SetForeground, não funciona o tempo todo.Isso se deve a algumas restrições do Windows XP.O que eu gostaria de fazer é enviar simular um clique do mouse no botão da janela na barra de tarefas, o que espero que traga a janela para a frente.Alguém sabe como isso é possível?
Solução
Confira a seção "Como roubar o foco em 2K/XP" em http://www.codeproject.com/KB/dialog/dlgboxtricks.aspx, pois é exatamente isso que você precisa.Eu não seguiria o caminho da barra de tarefas, pois ela poderia estar oculta ou simplesmente não estar lá.
Outras dicas
É possível.Mas é extremamente superficial.Seu aplicativo também pode falhar com a próxima versão do Windows, pois não está documentado.O que você precisa fazer é encontrar o identificador da janela da barra de tarefas, encontrar o identificador da janela filho que representa o botão e enviar uma mensagem WM_MOUSEDOWN (eu acho).
Aqui está um pouco sobre como encontrar o identificador da janela da barra de tarefas:
FWIW, as restrições em BringWindowToTop/SetForeground existem porque é irritante quando uma janela rouba o foco.Isso pode não importar se você estiver trabalhando em um ambiente corporativo.Apenas tenha isso em mente.:)
Usei isso em um programa onde precisava simular cliques e movimentos do mouse;
Para ser honesto, nunca tive problemas em trazer uma janela para o primeiro plano no XP/Vista/2003/2000.
Você precisa ter certeza de fazer o seguinte:
- Verifique se IsIconic (minimizado)
- Se o número 1 resultar em True, ligue para o ShowWindow Passando SW_RESTORE
- Então chame SetForegroundWindow
Nunca tive problemas em pensar em fazer isso com essas etapas.