bonjour
je suis un newbie ultra débutant
je voudrais savoir comment récupérer les coordonnées de la fenêtre active d'une application.
Est-ce possible avec une méthode AWT ou Swing ou une autre ?
bonjour
je suis un newbie ultra débutant
je voudrais savoir comment récupérer les coordonnées de la fenêtre active d'une application.
Est-ce possible avec une méthode AWT ou Swing ou une autre ?
Salut,
Tu peux obtenir la liste des fenêtres avec Frame.getFrames(). Tu parcours cette liste pour déterminer la fenêtre active (en testant frame.isActive(), et tu récupères ses coordonnées par frame.getLocation() (ou frame.getBounds() pour avoir aussi la taille).
L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
Nouveau sur le forum ? Consultez Les Règles du Club.
merci beaucoup Joel
je vais suivre cette piste et voir si je parviens au résultat escompté
@+
bonjour
c'est pas gagné pour moi
je commence par mettre
et j'ai pour résultat
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 import java.awt.* Frame[] frames = Frame.getFrames();
je n'ai donc pas les fenêtres des différentes logiciels ouverts
Code : Sélectionner tout - Visualiser dans une fenêtre à part sun.awt.windows.WEmbeddedFrame[frame0,551,370,0x0,invalid,layout=java.awt.BorderLayout,title=,resizable,normal]
Je précise que j'exécute ce code depuis une exentension de filemaker et que ce sont les fenêtres de filemaker que je cherche et leurs positions sur l'écran.
Oui, bien sûr, tu ne peux accèder aux fenêtres de ta propre application.
Pour récupérer des fenêtres d'autres applications, et en particulier d'application non Java, il faut passer par le système, ce qui n'est pas le propre de Java à la base (qui fait une abstraction du système, pour ne pas en être dépendant dans le code, ou le moins dépendant possible). Il existe toutefois des APIs qui permettent de le faire, comme JNA.
L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
Nouveau sur le forum ? Consultez Les Règles du Club.
je ne vois aucune méthode spécifique aux fenetres et leur localisation dans JNA
https://jna.java.net/javadoc/overvie...ml#global-data
jna sert à utiliser des librairies natives (des dlls en gros). Après, il faut que tu ailles voir dans la doc de windows quelles librairies / méthodes présentes sur le système te permettent de retrouver les informations dont tu as besoin.
Pour référence, ce que tu cherche à faire est très loin d'être accessible à un "newbie ultra débutant"
Oui, certes, utiliser JNA n'est pas accessible facilement à un débutant, mais pour le cas cité, on trouve de nombreux exemples de code en cherchant un peu sur google.
Exemple :
Les liens pour charger les 2 jars nécessaires :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113 public class WIN32GetWindow { public static void main(String[] args) { // pour obtenir la fenêtre en premier plan System.out.println(WIN32GetWindow.getTopLevelWindow()); // pour obtenir la liste des fenetres (tu peux comparer le nom de la fenêtre à celle que tu cherches /*for(Window window : WIN32GetWindow.getWindows()) { System.out.println(window); }*/ } public static class Window { private String name; private Rectangle bounds; private Window(String name, Rectangle bounds) { this.name=name; this.bounds=bounds; } public String getName() { return name; } public Rectangle getBounds() { return bounds; } @Override public String toString() { return String.format("[name: %s, title: %s, bounds: %s", name, bounds); } } private interface User32 extends StdCallLibrary { User32 INSTANCE = (User32) Native.loadLibrary("user32", User32.class, W32APIOptions.DEFAULT_OPTIONS); boolean EnumWindows(WinUser.WNDENUMPROC lpEnumFunc, Pointer arg); int GetWindowRect(HWND handle, int[] rect); int GetWindowTextA(HWND hWnd, byte[] lpString, int nMaxCount); HWND GetActiveWindow(); HWND GetForegroundWindow(); } public static Window getActiveWindow() { HWND hwnd = User32.INSTANCE.GetActiveWindow(); if ( hwnd==null ) { return null; } return getWindow(hwnd); } public static Window getTopLevelWindow() { HWND hwnd = User32.INSTANCE.GetForegroundWindow(); if ( hwnd==null ) { return null; } return getWindow(hwnd); } private static Collection<Window> getWindows() { final Collection<Window> windows = new ArrayList<>(); User32.INSTANCE.EnumWindows(new WNDENUMPROC() { @Override public boolean callback(HWND hwnd, Pointer arg1) { String windowName = getWindowName(hwnd); Window window = getWindow(hwnd); if ( !window.getName().isEmpty() ) { windows.add(new Window(windowName, getWindowBounds(hwnd))); } return true; } }, null); return windows; } private static String getWindowName(HWND hwnd) { byte[] windowText = new byte[512]; User32.INSTANCE.GetWindowTextA(hwnd, windowText, 512); return Native.toString(windowText); } private static Window getWindow(HWND hwnd) { String windowName = getWindowName(hwnd); return new Window(windowName, getWindowBounds(hwnd)); } private static Rectangle getWindowBounds(HWND hwnd) { int[] rect = { 0, 0, 0, 0 }; int result = User32.INSTANCE.GetWindowRect(hwnd, rect); if (result == 0) { return null; } return new Rectangle(rect[0],rect[1],rect[2],rect[3]); } }
L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
Nouveau sur le forum ? Consultez Les Règles du Club.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager