Gérer les fenêtres externes en utilisant Java
J'ai besoin de vérifier si une fenêtre externe (un autre programme java, mais pas contrôlée par le programme que je suis en train de travailler sur) est ouvert à l'aide du titre, et si l'ouvrir, puis, soit de maximiser ou de minimiser sur la base de la commande de l'utilisateur en Java (je ne connais que le titre de la fenêtre et rien d'autre) . Google ne dit que je peux utiliser winapi
pour obtenir le handle de fenêtre et de le manipuler à l'aide de la poignée, mais je ne suis pas en mesure de trouver comment faire.
Que j'ai pu trouver des références sur la façon de le faire en utilisant JNI ici:
En Java Swing comment obtenez-vous un Win32 poignée de fenêtre (hwnd) la référence à une fenêtre?. Est-il possible de le faire sans l'aide de JNI?
Quelqu'un pourrait-il m'aider à comprendre comment faire.
Merci et Salutations
source d'informationauteur Balanivash
Vous devez vous connecter pour publier un commentaire.
J'ai juste ajouté un grand nombre de win32 liées fonctions de la fenêtre en JNA. Vous pouvez voir les détails ici.
Vous pouvez également énumérer toutes les fenêtres:
Java n'a pas d'API pour cela, vous devez utiliser JNI. Voir eznme la réponse pour plus de détails.
Vous pouvez utiliser l'API Windows pour obtenir un handle de la fenêtre, puis la redimensionner:
Typique WinAPI de l'interface, un peu maladroit à utiliser mais puissant.
Comme indiqué, ce n'est pas possible en Java pur. Un exemple de le faire nativement (que vous devrez traduire JNI):
Vous avez déjà le nom de la fenêtre, mais vous devez également fournir un nom de classe car cela vous permet plus précisément d'obtenir la fenêtre. Si il y avait plusieurs fenêtres avec la même nomfenêtre alors votre programme pourrait faire quelque chose d'indésirable.
Vous pouvez utiliser quelque chose comme Spy++ pour obtenir le nom de la classe. Ou tout simplement à l'aide de code. S'assurer que votre fenêtre est actuellement la seule fenêtre avec un correspondant nomfenêtre alors vous pouvez faire:
Si il est possible d'obtenir le HWND de la Java processus lui-même avec le code ici alors vous devriez passer en que pour le natif de la partie puisqu'il sera garanti pour être fiable.