preciso capturar a janela de um aplicativo que está aberta no desktop (Ex: documento do Word aberto, documento do Lotus Notes, etc…). Com Visual Basic eu consigo isto passando como parâmetro o nome da janela. Alguém conhece algo pronto para fazer isto, ou teriam a idéia de algo não complicado para realizar isto.
Em dia que abro poucas janelas como hoje tenho 17 janelas abertas entre outlook, eclipse, vários notepads, varios windows explorer e vários Internet explorer. Como um aplicativo pode saber qual janela deve capturar?
Serve Alt+Esc e Alt+PrintScreen para enviar uma das janelas para o clipboard. Do clipboard dá para pegar com:
java.awt.datatransfer.Clipboard
public Transferable getContents(Object requestor)
(Retorna um objeto transferable representando o conteúdo atual do clipboard, veja a interface Transferable em java.awt.datatransfer )
Quando você abre um aplicativo, na parte de cima da janela fica um título e por este título que o VB consegue encontrar a janela e torná-la ativa. Não necessito do conteúdo da janela, o que preciso é o seguinte:
encontrar a janela pelo título;
torná-la ativa;
Enviar comandos de tecla que executem um item de menu do aplicativo.
Consigo fazer isto com o VB, para fazer com Java talvez tivesse que fazer alguma integração com APIs do windows, mas imagino que gastaria muito tempo para fazer isto. Se algué tiver alguma idéia melhor, por favor me envie.
Para o que vc quer realmente é necessário acessar a API do Windows via JNI. Não é dificil. Se você sabe fazer em VB na verdade usa a mesma DLL que vai acessar por JNI. Precisa de JNI e um tiquinho de C para fazer a chamada à DLL da API o Windows. Não deixe de pesquisar na MSDN pois as vezes vai encontrar a parte de C já quase pronta.
Complementando. É possível pegar o handle da janela. Me lembro que já fiz isto.
Mas revendo sua mensagem vi que quer executar funções do menu da outra janela. Acho que vai precisar saber que funções são chamadas pelo menu para poder chamar também.