Entwickler-Ecke
Windows API - Fenster finden ohne EnumWindows
bockwurst - Fr 02.12.05 11:23
Titel: Fenster finden ohne EnumWindows
Fenster finden
Hallo ich suche nach einem Fenster (genauer dem Handle), den Titel kenne ich nicht, nur die Klasse. Leider geht nicht FindWindow. Dazu möchte ich NICHT EnumWindows benutzen. Gibt es eine andere Möglichkeit.
Vielen Dank
Delete - Fr 02.12.05 13:04
Titel: Re: Fenster finden ohne EnumWindows
bockwurst hat folgendes geschrieben: |
Dazu möchte ich NICHT EnumWindows benutzen. |
Und warum bitte sehr nicht? Das ist die einzig sinnvolle Lösung.
bockwurst - Fr 02.12.05 14:08
EnumWindow ist eine CallBackFunktion. Ich selbst muß auf eine Nachricht antworten. Ich suche nach den Windows einträgen (inode-Listen). Wieso soll ich mir jedesmal eine Funktion für jedes Fenster anspringen lassen. Bei 1000 fenster wären das dann 1000 Funtionsaufrufe. Deshalb
Delete - Fr 02.12.05 14:57
1000 Funktionsaufrufe sind heutzutage gar nichts. Und eine andrer sicher Möglichkeit die top-level Fenster zu enumerieren gibt es nicht. Und warum geht FindWindows nun auch nicht? Dort kannst du auch die Klasse angeben von dem fenster, dass du suchst.
bockwurst - Fr 02.12.05 15:11
Findwindow(TKlasse, nil) geht wohl nur bei Applications / das Programmfenster. Bei ganz normalen Fenster geht es nicht (bei mir jedenfalls). Obwohl in der Beschreibung etwas anderes steht.
Vielleicht kannst du mir helfen. Die Fenster ändern sich immer. Also muß ich zur Laufzeit mein Fenster/Handle suchen. Es ist soagr noch einfacher. Es gibt nur ein Fenster mit der Klasse mit unbekanntem Titel.
Ich brauche soetwas
Delphi-Quelltext
1:
| MyHandle := FindWindowHandleOhneTitel('TKlassenName'); |
Delete - Fr 02.12.05 15:24
bockwurst hat folgendes geschrieben: |
Findwindow(TKlasse, nil) geht wohl nur bei Applications / das Programmfenster. |
alle Fenster unter Windows haben einen Klassennamen, das bedingt schon der Aufbau des Fenstersystems unter Windows.
bockwurst - Fr 02.12.05 15:28
nehmen wir mal an, mein Fenster vom Formular heißt TForm. Den Titel kenne ich nicht.
Wüßte ich den Titel würde ich mein Fensterhandle mit
Delphi-Quelltext
1:
| FindWindow('TForm','Titelcaption'); |
finden können.
Wenn ich nun aber
Delphi-Quelltext
1:
| FindWindow('TForm',nil); |
eingebe, bekomme ich immer 0 zurück, auch wenn das Fenster da ist.
alzaimar - Fr 02.12.05 15:33
Ich verwende EnumWindows, um Fenster (z.B. vom IE) zu finden, deren Klasse bekannt, aber deren Titel sich ständig ändert. Das war für einen 'Popup-Blocker'. Klappt gut. Das scannen meiner Fensterliste dauert -weiss nich- 1 ms? Hab dich nich so :mrgreen: , oder arbeitest Du noch mit 286?
Delete - Fr 02.12.05 15:35
Klappt wie vorhergesehen:
Delphi-Quelltext
1: 2: 3: 4:
| procedure TForm1.Button1Click(Sender: TObject); begin ShowMessage(IntToStr(FindWindow('TForm1',nil))); end; |
bockwurst - Fr 02.12.05 15:36
Bei mir nicht! Bei mir handelt sich es um zwei verschiedene Programme. Bei dir auch sicherlich. Ich benutzte Win98 und Delphi5.
Vielleicht, aber warum geht FindWindow nicht. Dann würde mein 286 deinen 986 doch schlagen, oder?!
In der Hilfe sthet folgendes:
The FindWindow function retrieves the handle to the top-level window whose class name and window name match the specified strings. This function does not search child windows.
HWND FindWindow(
LPCTSTR lpClassName, // pointer to class name
LPCTSTR lpWindowName // pointer to window name
);
Parameters
lpClassName
Points to a null-terminated string that specifies the class name or is an atom that identifies the class-name string. If this parameter is an atom, it must be a global atom created by a previous call to the GlobalAddAtom function. The atom, a 16-bit value, must be placed in the low-order word of lpClassName; the high-order word must be zero.
lpWindowName
Points to a null-terminated string that specifies the window name (the window's title). If this parameter is NULL, all window names match.
Return Values
If the function succeeds, the return value is the handle to the window that has the specified class name and window name.
If the function fails, the return value is NULL. To get extended error information, call GetLastError.
Delete - Fr 02.12.05 15:42
bockwurst hat folgendes geschrieben: |
This function does not search child windows.
|
Ist es vielleicht das? Wenn du das Handle eines Kindfensters brauchst musst du
FINDWINDOWEX benutzen.
bockwurst - Fr 02.12.05 15:54
Nein,es ist schon ein Hauptfenster, aber ich habe "meinen Fehler" gefunden.
Mein Hauptprogramm ist noch ein 16bit Programm (delphi 1). Da geht es leider nicht. Dann muß ich wohl enumWindows benutzen. Mal schauen ob, dies klappt! Oder gibt es noch etwas besseres?
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!