Liste offener Fenster

Carlo P.

Mitglied
Ich weiß leider nicht, ob das Thema in den Anfängerberreich gehört aber der ein oder andere kann mir sicher helfen ^^

Ist es möglich und wenn ja wie geht es, Informationen über die aktuell geöffneten Fenster zu bekommen? Genau geht es mir um den Titelstring und die Fensterpositionen auf dem Desktop.

Hab noch eine weitere frage die indirekt dazugehört: Kann man screenshots von den jeweiligen Fenstern bekommen, auch wenn sie überlappt sind (im schlimmsten Fall minimiert)? Hab das bisher immer mit nem vorher definiertem rectangle und der üblichen robot-funktion gemacht ... aber damit kann man natürlich keine überlappten Bereiche capturen.

Danke im Voraus, Carlo
 

Marco13

Top Contributor
Man kann sich mit Frame (Java Platform SE 6) zwar alle Frames holen, die von der gleichen Java-Application erstellt wurden, aber keine anderen. Das geht wohl nur mit JNI, und wäre da (und damit) eben höchst spezifisch für Windows, Linux & Co, und ggf. noch deren Unterarten. Auch Screenshots von "beliebigen" Fenstern ginge nur über die besagten Frames aus der gleichen Java-Anwendung. Für beliebige ScreenCaptures von irgendwelchen Fenstern bräuchte man auch wieder JNI.
 

Carlo P.

Mitglied
ok, danke erstmal :p

Das Stichwort JNI sieht auf den ersten Blick so aus, als könnte es mir weiterhelfen. Geht mir nämlich um Fenster die nicht von einer Java-Application stammen ... wie z.B. Browser oder ganz normal mit dem Explorer geöffnete Ordner.
Bin glücklicherweise vor kurzem wieder auf Windows XP als OS umgestiegen, was mir hierbei dann wohl zugutekommt. Allerdings sieht das Thema auch ziemlich kompliziert aus und scheint eng mit der Windows API usw. zusammenzuhängen, womit ich mich leider gar nicht auskenne :/
und da ich auch 'nur' eine Liste der Fensterinformationen haben will und mich gar nicht wirklich tief in die Thematik einarbeiten will, frag ich nochmals nach ein paar Tipps ^^
Hab auf die schnelle auch nichts hier/in andren Foren gefunden, was mich gewundert hat, weil ich mir vorstellen kann, dass man sowas doch öfters brauchen könnte ...

Bin dankbar für alle Arten von Links zu nützlichen Threads oder Homepages, die sich mit was ähnlichem beschäftigen.

EDIT: Dummes Problem bei der Suche ist natürlich noch die Tatsache, dass fenster auf englisch window heißt -.-
 
Zuletzt bearbeitet:

Marco13

Top Contributor
Hm - sorry, for konkreten code müßte ich auch erst suchen und basteln, aber wenn man nach sowas wie "window handle" OR hwnd java jni sucht, findet man schon ein paar Dinge, die in die richtige Richtung gehen.
JNI hat mit Windows bzw. der Windows API erstmal nichts zu tun: JNI ist nur das "Java Native Interface" mit dem man von Java aus z.B. ganz allgemein DLLs ansprechen kann (oder SOs unter Linux oder JNILIBs unter MacOS), und damit natürlich auch an die Windows Handles rankommt...
 

Carlo P.

Mitglied
So, erstmal danke für die Antwort, hat mir auf jeden Fall bei der Suche geholfen.
Nach ein bisschen Lesen und Suchen bin ich auf Beispielcodes gestoßen, welche die JNA Bibliothek benutzen, um die nativen DLLs anzusprechen. Die funktionieren soweit einwandfrei:

Java:
import com.sun.jna.*;
import com.sun.jna.win32.*;

public class Main {

    public interface Kernel32 extends Library {
        public boolean Beep(int FREQUENCY, int DURATION);
        public void Sleep(int DURATION);
    }

    public static void main(String[] args) {
        Kernel32 kernel32lib = (Kernel32) Native.loadLibrary("kernel32", Kernel32.class);
        kernel32lib.Beep(698, 500);
    }

}

Die Bibliothek wird richtig geladen, die Funktion richtig ausgeführt und ich höre den sound wie es sein soll.

Ich hab dann auf msdn.microsoft.com/en-us/library/ms633497(VS.85).aspx geschaut, welche win32 Funktionen ich verwenden möchte und versucht sie nach dem Code von oben in mein Javaprogramm einzubinden.
Hab dann die entsprechende Bibliotheken geladen (In meinem Fall für alle die User32.dll) und versucht, die Funktionen einzubinden ... da ist mir zum ersten mal aufgefallen, dass die benötigten Argumente (teils auch Rückgabewerte) nicht mehr von einem Typ sind, der ein entsprechendes "Gegenüber" in Java hat (hWnd ist ein Beispiel, das hier oft auftaucht)

Davor hatte ich nur das hier gelesen:
https://jna.dev.java.net/javadoc/overview-summary.html#marshalling
Und leider hab ich keine hilfreichen Programmbeispiele gefunden, die andere Argumente brauchen. Nur noch mehrere mit SYSTEMTIME usw. die eben short-werte usw. brauchen (Open source Java projects: Java Native Access - JavaWorld)

Wäre nett, wenn mir jemand noch ein bisschen behilflich sein könnte. Hab da natürlich noch weiter gelesen, aber versteh das ganze mit functionmapping, callbacks, pointers usw. nich so ganz, bzw. weiß nicht was genau davon ich hierfür brauch.

Falls wer das gleiche Problem hat:
Bin während der Suche noch auf JWinAPI gestoßen. Die Bibliothek liefert direkt Funktionen, mit denen man z.B. fast direkt die Liste der Namen der laufenden Prozesse bekommt. Damit hätte ich mein Problem sicher auch lösen können, wollte mich aber nicht darauf verlassen, da es mit einer .exe kommt, die bevor man die Bibliothek benutzen kann eine eigene .dll in nen Systemordner kopiert ... Würde es gern mit denen hinbekommen, die es schon von Haus aus gibt.
 
Zuletzt bearbeitet:

Marco13

Top Contributor
Wer vertreibt denn ein Projekt auf sourceforge ausschließlich als setup.exe? Das source-Archiv kann ich jedenfalls gerade nicht aufmachen...

Ein HWND ist (wenn ich mich nicht sehr täusche) einfach ein durch etliche #typdef's umgebogener int - man würde also einen (Java) int verwenden.... Beispiele sollte man mit Websuche finden, z.B. In Java Swing how do you get a Win32 window handle (hwnd) reference to a window? - Stack Overflow wo man ein HWND (als int) bekommt, und dort wird auch schon ein bißchen mit den Fenstertiteln rumgedoktert... Ich müßte aber erst in die WinAPI-Dokus gucken, wie man sich die Titel (z.B. als String-Array) abholen kann...
 

Carlo P.

Mitglied
Zu deinem Link: Das ist leider wieder mit JNI, wofür man einen in c geschriebenen Teil braucht und was auch allgemein komplizierter als JNA zu sein scheint. Es muss doch möglich sein, das ganze mit JNA hinzubekommen, nach dem Muster aus meinem vorherigen post. Ich bekomm jedes mal ein Fehler und komm nicht wirklich voran. Hier nochmal ein Teil code nur um zu zeigen wie genau ichs mein/haben will:

Java:
import com.sun.jna.*;
import com.sun.jna.win32.*;

public class Main {
    public interface Kernel32 extends Library {
        public boolean Beep(int FREQUENCY, int DURATION);
    }

    public interface User32 extends Library {
        public int FindWindow(String ClassName, String WindowName);
        public boolean AnyPopup();
    }

    public static void main(String[] args) {
        Kernel32 kernel32lib = (Kernel32) Native.loadLibrary("kernel32", Kernel32.class);
        kernel32lib.Beep(698, 500);
        User32 user32lib = (User32) Native.loadLibrary("user32", User32.class);
        System.out.println(user32lib.AnyPopup());
        System.out.println(user32lib.FindWindow(null, null));
    }    
}


Der sound aus der kernel32 funktion kommt, die AnyPopup funktion gibt auch was aus, aber bei der FindWindow kommt:
Exception in thread "main" java.lang.UnsatisfiedLinkError: Error looking up function 'FindWindow': Die angegebene Prozedur wurde nicht gefunden.
hatte noch andere Funktionen getestet, ein paar haben was geliefert, aber bei den meisten (wichtigen) kam derselbe Fehler.
Hab die Funktionen und deren Argumente alle aus der Auflistung hier:
msdn.microsoft.com/en-us/library/
Liegt das an falschen Argumenten (weil bei dem nicht funktionierendem hab ich jetzt statt hWnd int genommen) oder gibts die Funktionen in der user32.dll vielleicht nicht mehr oder ist der Grund was ganz anderes?


Wer vertreibt denn ein Projekt auf sourceforge ausschließlich als setup.exe? Das source-Archiv kann ich jedenfalls gerade nicht aufmachen...
Hab ich mich auch gefragt, weil ich mal reingucken wollte ... aber wird scheinbar von mehreren benutzt und hat bei mir auch gut funktioniert.
 

andiv

Bekanntes Mitglied
HWND <=> HANDLE <=> PVOID <=> void*
Nach einem kurzen Blick in die JNA-Doku müsstest du also com.sun.jna.Pointer verwenden.
 

Carlo P.

Mitglied
Kommt dieselbe Meldung, des wird aktuell noch an was andrem liegen :/
Ich test grad mit den verschiedenen Funktionen aus der Liste rum, ob ich ein Zusammenhang von denen erkenn, die funktioneren (bzw. nicht funktionieren).
Aber danke für ->com.sun.jna.Pointer ... werd ich wohl spätestens brauchen, wenn ich die Funktionen richtig aufrufen kann.


EDIT: Funktioniert wohl doch nur bei einigen wenigen Funktionen nicht.
EnumWindows und GetWindowText funktionieren wie oben beschrieben wunderbar und des sind die wichtigsten. Danke nochmal an euch beide, ich markier mal als gelöst.

EDIT EDIT: FindWindowA funktioniert :lol: wirklcih vielen Dank
 
Zuletzt bearbeitet:

andiv

Bekanntes Mitglied
Wenn sich herausstellen sollte, dass alle Funktionen bei denen ein String als Parameter vorkommt nicht funktionieren, dann würde ich darauf tippen dass die unterschiedlichen Zeichenkodierungen dran schuld sind.

Ich hab in der JNA-Doku auch einen Typ WString explizit für Unicode-Strings gesehen. Außerdem meine ich, dass in den ganzen WinAPI-Headern abhängig von einem Makro UNICODE (weiß nicht obs auf FindWindow zutrifft) auf unterschiedliche Funktionen FindWindowA und FindWindowW weiterverwiesen wird. Vielleicht probierst du es ja mal mit denen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
R Liste in Variable speichern Java Basics - Anfänger-Themen 6
R Liste und Arrays Java Basics - Anfänger-Themen 12
D 2 ArrayListen gleich sortieren bzw. eine Liste anhand einer anderen Sortieren Java Basics - Anfänger-Themen 6
J Ähnlichen String in Liste finden Java Basics - Anfänger-Themen 6
M Verkettete Liste Java Basics - Anfänger-Themen 1
M Vergleichen, ob eine Liste länger als andere ist Java Basics - Anfänger-Themen 6
H Liste nach String-Länge sortieren Java Basics - Anfänger-Themen 1
D remove Object von einer Liste von Obejcts Java Basics - Anfänger-Themen 3
E Elemente aus Liste entfernen und hinzufügen Java Basics - Anfänger-Themen 3
M Nullpointer beim befüllen meiner Liste im Object Java Basics - Anfänger-Themen 3
D Länge einer Liste aufrufen. Java Basics - Anfänger-Themen 19
B Objekt aus generalisierter Liste entfernen Java Basics - Anfänger-Themen 11
H Liste Knoten NullPointerException Java Basics - Anfänger-Themen 7
W Liste mit Listen in JTable darstellen Java Basics - Anfänger-Themen 1
N Was Passiert mit dem Namen einer Variable, wenn man diese einer Liste Hinzufügt Java Basics - Anfänger-Themen 16
E Suchfunktion in einer Liste Java Basics - Anfänger-Themen 39
T ungeordnete Werte-Paare in einer Liste Java Basics - Anfänger-Themen 7
L Hilfe! Liste mit Items werden ausgegeben aber nicht in zufälliger Reihenfolge Java Basics - Anfänger-Themen 6
berserkerdq2 Warum soll ich shuffle nutzen, um bei Rückgabewert Collection eine Liste zurückzugeben? Java Basics - Anfänger-Themen 3
sserio Wieso werden nicht alle Primzahlen bis 1000 in meine Liste gepackt ? Java Basics - Anfänger-Themen 8
sserio Liste erstellt und ein Problem mit dem Index Java Basics - Anfänger-Themen 8
f3mys Objektwerte in Liste speichern und wieder abrufen Java Basics - Anfänger-Themen 23
H Java verkettete Liste, Wert eines Index zurückgeben Java Basics - Anfänger-Themen 1
K Warum ist die binäre Suche bei der verketteten Liste nicht so effektiv? Java Basics - Anfänger-Themen 3
I 2D-Array Position der Liste ausgeben. Java Basics - Anfänger-Themen 2
I Liste von Infos von einer eigenen Annotation in Liste speichern Java Basics - Anfänger-Themen 0
P Doppelte werte in einer Liste zählen Java Basics - Anfänger-Themen 11
Dorfschmied Kartesisches Produkt von zwei Liste mit Hashmaps<String,String> erstellen Java Basics - Anfänger-Themen 4
Igig1 Autoparkplatz verkettete Liste erstes und letztes Auto Java Basics - Anfänger-Themen 13
thor_norsk Verkette Liste Java Basics - Anfänger-Themen 27
R Rückgabe: verkettete Liste Java Basics - Anfänger-Themen 2
R einfach verkettete Liste Java Basics - Anfänger-Themen 1
R einfach verkettete Liste Java Basics - Anfänger-Themen 12
O Doppelt verkette Liste Element löschen Java Basics - Anfänger-Themen 15
B GUI extension mit einer Liste verbinden Java Basics - Anfänger-Themen 1
B Verkettete Liste durchgehen und einzelne Elemente in neue Liste tun Java Basics - Anfänger-Themen 9
B Bin komplett am verzweifeln :( Verkettete Liste die Objekte hat Attribut auslesen Java Basics - Anfänger-Themen 14
M Java Liste streamen Java Basics - Anfänger-Themen 10
AmsananKING Aussortierung einer Liste Java Basics - Anfänger-Themen 8
A Objekte mit Parametern in eine Liste packen Java Basics - Anfänger-Themen 19
A Korrigierte <String> Liste zurückgeben Java Basics - Anfänger-Themen 22
S Kann nicht auf die Liste zugreifen mit der Methode!? Java Basics - Anfänger-Themen 3
B Datentyp für Einzelnes Objekt oder Liste Java Basics - Anfänger-Themen 9
alice98 Erste Schritte Liste erstellen ohne vorgefertigte Klassen Java Basics - Anfänger-Themen 1
J Doppelt verkette Liste ich bitte um Hilfe Java Basics - Anfänger-Themen 4
I Liste gruppieren nach Monat? Java Basics - Anfänger-Themen 5
districon Element in Liste einfügen Java Basics - Anfänger-Themen 1
B Hilfe bei Map Liste erstellen Java Basics - Anfänger-Themen 10
Y Einfügen in eine doppelt verkettete Liste Java Basics - Anfänger-Themen 8
Y Knoten an einem gegebenen Index aus einer Liste entfernen. Java Basics - Anfänger-Themen 6
H Daten aus einer Datei in eine Liste speichern Java Basics - Anfänger-Themen 23
Gaudimagspam Linked Liste Java Basics - Anfänger-Themen 4
Z Liste umkehren Java Basics - Anfänger-Themen 1
S Eine Liste kopieren Java Basics - Anfänger-Themen 13
java3690 Java- liste füllen ud die werte addieren Java Basics - Anfänger-Themen 13
java3690 Liste mit zufälligen zahlen füllen Java Basics - Anfänger-Themen 27
java3690 eine liste sortieren Java Basics - Anfänger-Themen 12
J Element aus Liste nehmen Java Basics - Anfänger-Themen 3
B JUnit 4: Wie man die eigene Liste testen kann [TDD] Java Basics - Anfänger-Themen 46
B Interface List - Objekt übergeben? Einzelnes Objekt geht, aber Liste nicht? Java Basics - Anfänger-Themen 4
P Was genau bringt mir es ein Array in eine Liste zu bringen Java Basics - Anfänger-Themen 3
A Doppelt verkettete Liste rückwärts ausgeben Java Basics - Anfänger-Themen 17
P Verschachtelte Array Liste Java Basics - Anfänger-Themen 2
H Liste speichern. Was lässt sich verbessern? Java Basics - Anfänger-Themen 7
P Performance Array und Liste Java Basics - Anfänger-Themen 13
M QuickSort und Liste Java Basics - Anfänger-Themen 6
N Methode um Objekte einer Liste hinzuzufügen Java Basics - Anfänger-Themen 1
B Summe von Property innerhalb einer Liste via Lambda Java Basics - Anfänger-Themen 1
V Collections int Werte in einer Liste sortieren Java Basics - Anfänger-Themen 23
B Neue Liste erstellen, wenn Objekte bestimmte Referenz hat / Gruppierung von Einträgen Java Basics - Anfänger-Themen 12
V_Fynn03 Beliebiges Element in einer Liste löschen (Java)(Lineare Datenstrukturen) Java Basics - Anfänger-Themen 9
L Baum aus Integer Liste erstellen Java Basics - Anfänger-Themen 0
CptK Koordinate in Liste suchen Java Basics - Anfänger-Themen 20
C Verschiedene Objekte in einer Liste speichern Java Basics - Anfänger-Themen 6
M Ausgabe einer Liste welche mehrere Stacks enthält Java Basics - Anfänger-Themen 3
D Doppelt Verkettete Zirkular-Liste Java Basics - Anfänger-Themen 1
L Liste in anderem Thread laden Java Basics - Anfänger-Themen 1
M Array liste Verdrehen Java Basics - Anfänger-Themen 8
A Verkettete Liste Java Basics - Anfänger-Themen 2
J Strings untereinander in einer Liste vergleichen Java Basics - Anfänger-Themen 18
B Liste von Tagen generieren ab einem bestimmten Datum und Endedatum Java Basics - Anfänger-Themen 4
S IndexOutOfBoundsException beim hinzufügen eines Elements zu einer Liste Java Basics - Anfänger-Themen 11
B Liste sortieren? Java Basics - Anfänger-Themen 4
O Anonyme Klasse einer Liste erstellen Java Basics - Anfänger-Themen 7
B SWAP List; Liste neu anordnen Java Basics - Anfänger-Themen 4
B CSS Klassen in eine Liste schreiben Java Basics - Anfänger-Themen 4
B Doppelt verkettete Liste implementieren Java Basics - Anfänger-Themen 8
L verkettete Liste Java Basics - Anfänger-Themen 15
scratchy1 doppelt verkettete Liste testen Java Basics - Anfänger-Themen 8
O ADT Liste z. B. Java Basics - Anfänger-Themen 15
B sortierte Liste Java Basics - Anfänger-Themen 4
O Knoten und Liste verarbeitung Java Basics - Anfänger-Themen 20
R Methoden Entferne alle identische Knoten (Typ String) aus verkettete Liste Java Basics - Anfänger-Themen 8
C Methoden Über eine einfach verkettete Liste Java Basics - Anfänger-Themen 8
J Eine Liste von Listen erstellen Java Basics - Anfänger-Themen 11
A Einträge aus Tupeln nach Regeln in Liste speichern Java Basics - Anfänger-Themen 8
Queiser Liste zurückgeben Java Basics - Anfänger-Themen 7
T Collections Geeignete Collection/Liste/Datenbank Java Basics - Anfänger-Themen 17
S spezielle Wörter aus Liste entfernen Java Basics - Anfänger-Themen 2
H Verkettete Liste Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Neue Themen


Oben