Focus d'applications

Résolu
cormandyr Messages postés 600 Date d'inscription samedi 20 mai 2006 Statut Membre Dernière intervention 8 juillet 2016 - 1 août 2013 à 09:50
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 - 2 août 2013 à 11:37
Bonjour les gens,

Avant de clairement expliquer ma question, je vais donner le contexte...
Je travaille sur un outil d'automatisation de test d'interfaces graphiques JAVA. Pour automatiser les actions sur le GUI, un agent est lancé avec le programme JAVA à contrôler.
Cependant suite au popups et autres fenêtres modales, un vérification est faite pour vérifiée que la fenêtre à contrôler est bien active.
Pour un système simple (un seul process JAVA (de une ou plusieurs fenêtres) ça fonctionne mais des que l'on a deux process java (et donc deux agents), impossible de faire en sorte que les fenêtres des deux process soient activables.

Je cherche un moyen de dire à l'OS "donne le focus à cette application ou à celle là" ou encore "moi, application X, je veux le focus"...
En gros je veux faire la même chose que si un utilisateur clique dans une fenêtre... mais sans souris....

Il y a la solution du ALT-TAB (via robot) mais la il ne sera pas facile (du tout) de savoir si c'est la bonne application qui à le focus....

je sais qu'en JAVA tout seul ce n'est pas possible mais comme je n'ai aucune piste...

au besoin, je peux donner plus d'information ou tenter de mieux expliquer la problématique....


--

2 réponses

cormandyr Messages postés 600 Date d'inscription samedi 20 mai 2006 Statut Membre Dernière intervention 8 juillet 2016 11
2 août 2013 à 09:39
Bon j'ai fini par trouver une solution... si cela intéresse quelqu'un la voici:

pour faire en sorte que le programme java obtienne le focus de la part du système, il faut :

1. faire en sorte qu'une fenetre existente demande le focus
2. créer une nouvelle fenetre, l'afficher puis la supprimer

pour faire simple, avec un bout de code, cela donne :
// la fenetre vide qui va faire en sorte que l'application reprenne le focus système
JFrame newFrame = new JFrame();
newFrame.pack();
newFrame.setVisible(true);
newFrame.toFront();
newFrame.setVisible(false);
newFrame.dispose();

//component est un composant de la fenetre à activer
Component parent = component;
//recherche la fenetre contenant le composant.
// la condition !(parent instanceof Window) permets d'éviter de prendre le parent d'un JDialog par exemple (on veux activer le JDialog par sa fenetre parente)
while ( parent != null && !(parent instanceof Window) )
{
	parent = parent.getParent();
}
//active la fenetre
if ( parent != null )
{
	((Window)parent).toFront();
	((Window)parent).requestFocus();
}


Pour bien faire, ce code doit être utiliser dans la thread swing.... (cfr SwingUtilities.invokeLater(Runnable) )
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
2 août 2013 à 11:37
Salut,

J'avais vu ta question mais je n'avais aucune idée pour la résolution. Merci d'avoir posté le code qui a résolu ton problème.

a+
0
Rejoignez-nous