Autor |
Beitrag |
bockwurst
      
Beiträge: 191
win98 /XP
D1 D5 Prof DE2005PE
|
Verfasst: Fr 02.12.05 11:23
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
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Fr 02.12.05 13:04
bockwurst hat folgendes geschrieben: | Dazu möchte ich NICHT EnumWindows benutzen. |
Und warum bitte sehr nicht? Das ist die einzig sinnvolle Lösung.
|
|
bockwurst 
      
Beiträge: 191
win98 /XP
D1 D5 Prof DE2005PE
|
Verfasst: 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
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: 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 
      
Beiträge: 191
win98 /XP
D1 D5 Prof DE2005PE
|
Verfasst: 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'); |
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: 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 
      
Beiträge: 191
win98 /XP
D1 D5 Prof DE2005PE
|
Verfasst: 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
      
Beiträge: 2889
Erhaltene Danke: 13
W2000, XP
D6E, BDS2006A, DevExpress
|
Verfasst: 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  , oder arbeitest Du noch mit 286?
_________________ Na denn, dann. Bis dann, denn.
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: 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 
      
Beiträge: 191
win98 /XP
D1 D5 Prof DE2005PE
|
Verfasst: 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.
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: 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 
      
Beiträge: 191
win98 /XP
D1 D5 Prof DE2005PE
|
Verfasst: 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?
|
|