Autor Beitrag
Delphi-Laie
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1600
Erhaltene Danke: 232


Delphi 2 - RAD-Studio 10.1 Berlin
BeitragVerfasst: So 09.03.08 12:36 
Hallo, liebe Delphi-Freunde!


Zur Zeit beschäftige (und quäle) ich mich mit folgendem Problem: Es geht darum, zu prüfen, ob ein (das aktive bzw. Vordergrund-)Fenster ein "Element" (Instanz, Variable, was auch immer) der Klassen

- SysListView32 und/oder
- TListView

enthält.

Das kleine und feine Programm "WindowInfo" von Luckie gibt einem die Möglichkeit, diesbezüglich auf aufschlußreiche Entdeckungsreise innerhalb von Windows zu gehen.

Leider ist das Problem komplizierter, als ich zunächst annahm. SysListView32 und TListView sind anscheinend keine Klassen von "Hauptfenstern", sondern von Elementen innerhalb von Fenstern. Und solche Elemente können davon mehrerer in einem Fenster/Window enthalten sein, ich erinnere nur einmal an Outlook Express, das allein 4 "Hauptanzeigeelemente" (die mit weißem Hintergrund) besitzt - von den verschiedenen anderen Elementen der Fensterklassen wie Toolbar, SysHeader & Co. ganz zu schweigen.

So nimmt es denn nachträglich kein Wunder, daß ich mit GetClassName an die o.g. gesuchten Klassennamen nicht herankomme (was ich zunächst hoffte), denn

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
var 
Windowhandle:THandle;
Klassenname:array[0..256of Char;

begin
WindowHandle:=GetForegroundWindow;
getclassname(WindowHandle,Klassenname,SizeOf(Klassenname));
showmessage(Klassenname);


liefert lediglich (mit jeweils zwei Meldungsfenstern hintereinander) solche Ergebnisse wie

- TMessageForm
- CabinetwClass

oder

-TMessageForm
-TFinder

u.ä. Die erste Meldung scheint übrigens immer TMessageForm zu lauten (hat ein Fenster etwa zwei Klassen?!).

Luckies Programm scheint auch GetClassName zu verwenden, nur hat es den Vorteil, mit dem hineingezogenen Mauscursor auch leicht an die inneren, "eingebetteten" Elemente eines Fensters zu gelangen.

Nun stellt sich die entscheidende Frage: Ist es möglich (und, falls ja, wie), an die Namen der Fensterklassen der Elemente innerhalb der Fenster zu gelangen (ohne einen Maucursor darüber schleifen zu müssen), meinetwegen auch als (mehr oder weniger komplexe, aber auswertbare) Datenstruktur - z.B. eine Liste?

Sollte ich diese Hürde überspringen, dann kann ich ein kleines, aber feines Programm (das vermutlich viele von Euch nützlich fänden) von seinem Ur- in sein - erstmalig vorzeigbares - Frühstadium überführen.


Wenn mir jemand weiterhelfen kann, wäre ich sehr erfreut.


Besten Dank im voaus für Eure Aufmerksamkeit und Euer Bemühen!

Netter Gruß

Delphi-Laie
toms
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1099
Erhaltene Danke: 2



BeitragVerfasst: So 09.03.08 13:18 
Hallo,

Die API EnumChildWindows ermittelt alle Kindfenster eines Elternfensters und gibt deren Fensterhandle zurück. GetClassName liefert dann denn Klassennamen
des Handles.
Delphi-Laie Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1600
Erhaltene Danke: 232


Delphi 2 - RAD-Studio 10.1 Berlin
BeitragVerfasst: So 09.03.08 13:47 
Hallo toms!

Ich habe das gute Gefühl, daß diese - eigentlich klitzekleine - Information die entscheidende (und damit für mich eben doch riesengroße) ist.

Sei herzlichst gedankt!

Nette Grüße

Delphi-Laie

Postscritpum: Ich habe diese Frage als beantwortet markiert, wer aber zu ihrer Beantwortung trotzdem noch etwas beizutragen hat, dem danke ich im voraus!
Delphi-Laie Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1600
Erhaltene Danke: 232


Delphi 2 - RAD-Studio 10.1 Berlin
BeitragVerfasst: Mo 10.03.08 20:17 
Hallo Leute, ich bin es wieder!

Die obige Hilfe hat mir weitergeholfen, wie überhaupt dieses Forum (und andere) - dafür noch einmal tausend Dank(s)!

Als kleines Dankeschön stelle ich hier die erste m.E. vorzeigbare Frühversion meines Programmes vor. Es läuft bei mir stabil und zeigt zumindest die grundsätzliche Funktionalität (mehr nicht). Einfach die .exe starten, belassen und dann in den Fenstern beobachten, was passiert (ist nicht immer gleich offensichtlich).

Bitte keine Verbesserungsvorschläge und keine Bugreports, ich weiß selbst, daß ich an diesem Programm noch etliches zu tun habe (Systray mit Icon und mit Menü mit einigen Optionen (welche Hooks, Autostart ja/nein, Deaktivierung ja/nein, Beendigung, auszuschließende Programme, vielleicht sogar mal als Dienst usw.)). Über Meinungen, daß dieses Programm grundsätzlich nützlich (oder auch völliger Mist) ist, würde ich mich aber natürlich schon freuen.

Die grundsätzliche Funktionalität stellt übrigens Windows seit einigen Versionen mit der Tastenkombination Strg + [+] (auf dem Ziffernblock) zur Verfügung. Nur ist das eben nur eine halbautomatische Variante. Die vollautomatische (die sich auch nur dieser Tastenkombination bedient) hat Mikroweich bis heut nicht hinbekommen (stattdessen werden Mikroweichprogrammierer dazu verdonnert, Büroklammer auf dem Bildschirm tanzen zu lassen). Neuerdings, so meine Beobachtung, stellt Windows in Form der Vista-Version diese Automatik im Spaltenmenü zur Verfügung (also immerhin offiziell, kein inoffizieller Tip aus dem Internet), gilt dann aber auch nur für den Augenblick, nicht jedoch mehr beim Verzeichniswechsel, bei neuen Fenstern oder bei anderem Spaltenbreitenbedarf (neue Datei mit längerem Namen, Datei mit dem längsten Namen gelöscht etc.). Also, eine weiterhin eindeutig halbautomatische Angelegenheit, die mit ihren Mausklicks fast lästiger ist, als beide Hände zur Tastatur zu bewegen. Diese Lästigkeit, die mir seit Jahren sehr auf die Nerven geht (wie so vieles in Windows) gebar meine Programmidee, das vollautomatisch tun zu lassen. Ich habe auch noch nie ein Programm mit dieser Funktionalität im Internet entdeckt, vermutlich gibt es weltweit noch keines (was mich eigentlich wundert).

Zwei Programme habe ich bereits gefunden, die ausgeschlossen werden müssen: Bei eMule werden alle Spalten derart zusammengschoben, daß man nichts mehr sieht, und Acrobat (nur Reader?), bei mir in der 5. Version, reagiert auch auf diese Tastenkombination mit exorbitantem Vergrößerungszoom.

Nette Grüße

Delphi-Laie
Hidden
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2242
Erhaltene Danke: 55

Win10
VS Code, Delphi 2010 Prof.
BeitragVerfasst: Mo 10.03.08 20:25 
Hi,

Es ist üblich, für jedes Thema einen neuen Thread aufzumachen.
Kopiere doch einfach deine Nachricht(wenn du willst mit verweis auf diesen hier) und stelle dein Prog in einem seperaten Thread vor.

mfG,

_________________
Centaur spears can block many spells, but no one tries to block if they see that the spell is a certain shade of green. For this purpose it is useful to know some green stunning hexes. (HPMoR)