Focus d'applications [Résolu]

Messages postés
600
Date d'inscription
samedi 20 mai 2006
Dernière intervention
8 juillet 2016
- 1 août 2013 à 09:50 - Dernière réponse :
Messages postés
6450
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
17 mai 2018
- 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....


--
Afficher la suite 

Votre réponse

2 réponses

Messages postés
600
Date d'inscription
samedi 20 mai 2006
Dernière intervention
8 juillet 2016
- 2 août 2013 à 09:39
0
Merci
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) )
Commenter la réponse de cormandyr
Messages postés
6450
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
17 mai 2018
- 2 août 2013 à 11:37
0
Merci
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+
Commenter la réponse de cs_Julien39

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.