3 Stimmen

Wie erhalte ich das Symbol einer Java-Anwendung?

Ich habe einen Code, der die laufende Anwendung auf einer Win32-Box auflistet und dann ihre Symbole anzeigt.

So weit so gut, ich bekomme die hwnd der App, dann rufen Sie für GetClassLong(hwnd,GCL_HICONSM), und alles ist gut.

Aber der Fall einer Java-Anwendung ist schmerzhaft, da der Prozess, der auf meine Anrufe antwortet, javaw.exe ist, und nicht die glänzend-schicke Java-Anwendung, die ein so schönes Symbol hat...

Ich habe auch GetWindowThreadProcessId ausprobiert, aber leider ist es die PID von javaw, die zurückgegeben wird...

Es gibt jedoch eine Möglichkeit, dies zu tun, da der Task-Manager (alt+tab) das gute Symbol anzeigt.

5voto

Vinzz Punkte 3828

Ich antworte auf meine eigene Frage, dank PhiLho der mich auf die richtige Spur brachte: ein Artikel aus Codeprojekt mit dem richtigen Algorithmus, um ein Fenstersymbol zu erhalten (unabhängig davon, ob es sich um Java handelt oder nicht):

//Versuchen Sie es zuerst:

SendMessageTimeout(WM_GETICON)

//wenn kein Symbol gefunden wird, versuchen

GetClassLong(GCL_HICONSM)

//wenn immer noch kein Symbol, versuchen Sie

SendMessageTimeout(WM_WM_QUERYDRAGICON)

//wenn immer noch kein Icon, bist du verloren, gib einen Fehler zurück, oder ein ungültiges Icon

Aus irgendeinem Grund antwortet eine Java-Anwendung auf den ersten Aufruf, aber nicht auf die anderen, was anscheinend von javaw.exe erledigt wird.

Nochmals vielen Dank PhiLho.

3voto

PhiLho Punkte 39496

Hmm, das ist machbar, denn Prozess-Viewer hat eine Schaltfläche "Anwendungen anzeigen", die genau das tut (auch wenn die Hauptansicht das Java-Symbol anzeigt). Leider ist diese Freeware nicht quelloffen, so dass sie ihr Geheimnis nicht preisgeben wird... :-(

ProcMon von Sysinternals kann das leider nicht.

Ich werde noch ein bisschen graben... :-)

[EDIT] Sowohl ein MS KB-Artikel als auch ein Code Projekt Artikel empfehlen die Verwendung von WM_QUERYDRAGICON, wenn GCL_HICON fehlschlägt...

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X