6
votes

Puis-je déplacer la fenêtre d'un autre programme vers l'avant de la mise au point?

Je m'interagie avec une application tierce à l'aide de son API et que vous souhaitez le déplacer vers l'avant de la mise au point (de sorte qu'il soit au-dessus de toutes les autres fenêtres ouvertes) lorsqu'un utilisateur effectue une certaine action. Bien que je puisse déplacer mon application de haut en bas dans la hiérarchie assez facilement, il ne semble pas y avoir un moyen d'interagir avec d'autres fenêtres. Est-il possible de déplacer la fenêtre d'un autre programme vers l'avant avec Java?


0 commentaires

3 Réponses :


1
votes

Ce n'est pas possible dans Pure Java et sur certains OSES, il n'est même pas possible de bien obtenir l'autre position de Windows (par exemple, bonne chance à cela sous OS X 10.4: OS X 10.4 est pas documenté signifie inscription à d'autres événements de Windows ... Il existe des "hacks", mais ils sont vraiment piraqués, comme obliger l'utilisateur à allumer le "Autoriser l'appareil assistif" préférences, ce qui nécessite la OS X admin passord).


0 commentaires

5
votes

Vous ne pouvez pas le faire dans le code Java pur, mais vous pouvez utiliser JNI. Voir Dans Java Swing Comment obtenez-vous une référence de la fenêtre Win32 de la fenêtre (HWND) à une fenêtre? pour obtenir une poignée à la fenêtre. Ensuite, vous pouvez faire quelque chose comme http://msdn.microsoft.com/en-us/ Bibliothèque / MS633545 pour le déplacer vers l'avant.

CAVEAT: Ceci est pour Windows uniquement


0 commentaires

0
votes

Je cherchais une solution à un problème très similaire. Jusqu'à présent, j'ai trouvé un - très fragile! - solution. Cela fonctionne pour mon cas, car mon cas implique la gestion des sessions entières en utilisant java.awt.robot sans interaction utilisateur, de sorte qu'il peut - ou peut ne pas fonctionner pour votre cas.

La solution utilise java.awt.robot Pour envoyer les coups de clé telles que ALT + TAB Pour apporter la fenêtre souhaitée à l'avant. Ceci est fragile bien sûr, en raison de plusieurs raisons:

  • Le robot ne peut pas savoir combien de fois alt + onglet doit être envoyé pour obtenir la fenêtre souhaitée à l'avant. La fenêtre est une dans beaucoup. Cette solution ne fonctionne que si elle est déjà connue quelle fenêtre en termes de alt-onglet -count c'est.
  • en fonction du système d'exploitation, les frappes de frappe requises pourraient en réalité être autre chose.

    Si le système d'exploitation et la séquence de la fenêtre sont connus, c'est-à-dire que le programme peut savoir upfront Combien de ALT-TAB Keystrokes serait nécessaire, cela pourrait parfois être une solution.

    Le programme Java suivant montre comment faire cela. Si cela est appelé sans arguments, il génère exactement un Tab Keystroke. Si appelé avec des arguments, le programme suppose que le premier argument est un nombre et générera autant de touches ALT + TAB comme spécifié par ce numéro.

    Vous voudrez peut-être jouer autour de Un peu avec les valeurs de chronométrage indiquées dans robot.delay () et robot.setautodelay () afin de livrer la meilleure expérience de votre machine. Astuce: au moins sur Linux, robot.setautodelayay () doit certainement être inférieur au délai de répétition du clavier, sinon le système d'exploitation générerait plusieurs ALT-TAB Keystrokes de l'événement du système la file d'attente en raison de la répétition clé. xxx


0 commentaires