Autor |
Beitrag |
ShadowCaster
      
Beiträge: 312
|
Verfasst: Mo 24.03.03 13:00
wo wir gerade dabei sind. Wie ich den Handle auf Fenster ermitteln kann, das weiß ich mittlerweile. Aber wie kann ich den Handle auf einen Button eines Fensters, dessen Handle ich ja jetzt nun kenne ermitteln? Nehmen wir an, ich will mir alle Komponenten auf dem Fenster in eine TList schreiben. Wie mach ich das (nicht das in die TList schreiben  sondern das herausfinden aller Komponenten auf einem Window) ?
|
|
Motzi
      
Beiträge: 2931
XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
|
Verfasst: Mo 24.03.03 13:43
Zum Auflisten von Fenstern:
Szichwörter: EnumWindows(), EnumChildWindows()
_________________ gringo pussy cats - eef i see you i will pull your tail out by eets roots!
|
|
ShadowCaster
      
Beiträge: 312
|
Verfasst: Mo 24.03.03 16:23
die Fenster hab ich doch schon und den Handle des entsprechenden Fensters? Hast mal wieder nicht richtig gelesen  Ich meinte wie krieg ich die Buttons, Listboxen, etc. auf einem Fenster und deren handles raus???
|
|
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mo 24.03.03 16:35
Nee, ShadowCaster, du hast nicht richtig gelesen - oder es nicht verstanden. Motzis Antwort enthält das, was du brauchst.
|
|
ShadowCaster
      
Beiträge: 312
|
Verfasst: Mo 24.03.03 16:40
das heißt, dass das Handle der Fenster auch dem der Buttons auf dem Fenster ist? Aber wenn ich 20 Listboxen drauf habe und und einen Handle, wie soll dann das Programm wissen, mit welcher Listbox was gemacht werden soll? sorry, versteh ich nicht 
|
|
Motzi
      
Beiträge: 2931
XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
|
Verfasst: Mo 24.03.03 16:51
ShadowCaster hat folgendes geschrieben: | Hast mal wieder nicht richtig gelesen  |
Doch hab ich!  Aber nachdem du es anscheinden nicht verstanden hast hier mal eine etwas ausführlichere Erklärung:
Buttons und Listviews sind auch Fenster bzw Child-Fenster. Wenn sie auf einem anderen Fenster "draufliegen", dann ist dieses Fenster der Parent und sie sind die Childs. Mittels EnumChildWindows kannst du dir nun die Child-Fenster eines Fenster auflisten lassen.
_________________ gringo pussy cats - eef i see you i will pull your tail out by eets roots!
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mo 24.03.03 16:54
Das ist das Problem, du brauchst ein eindeutig identifizierbares Merkmal. Eventuell, wenn du Glück hast und es nicht in Delphi geschrieben ist, dann kommst du mit der ID des Kontrolls weiter.
Bei einer WinAPI Anwendung wird automatisch eine eindeutige ID vergeben. Die VCL überläßt das Windows und da wird die ID an Hand das Handles gebildet. Ein Handel ist zwar eindeutig, ändert sich aber bei jedem Programmstart.
Also Vorgehensweise:
Hol die mit EnumChildWindows das Handel, dann bestimmst du mit GetDlgCtrlID die ID. Diese vergleichst du mit der ID, die du vorher mit einem Tool (WinSight, ist bei Delphi dabei oder Spy++ vom VC) bestimmt hast. Hast du dein Controll gefunden, hast du es geschaft.
|
|
ShadowCaster
      
Beiträge: 312
|
Verfasst: Mo 24.03.03 16:55
hey thx für die Hilfe  Jetzt weiß ich auchmal, wie man mit den Fenstern umgehen kann. Wäre nämlich mal ganz funny einen Bildschirmschoner zu schreiben, der irgendwelche Sachen in den formularen auf dem Bildschirm verändert und das alles wieder rückgängig macht wenn er beendet wird. 
|
|
Popov
      
Beiträge: 1655
Erhaltene Danke: 13
WinXP Prof.
Bei Kleinigkeiten D3Pro, bei größeren Sachen D6Pro oder D7
|
Verfasst: Mo 24.03.03 17:30
Hier ein kleines Programm mit dem man das Handle eines Fensters unter dem Cursor rausfindet. Für dieses Programm braucht man ein leeres Fenster auf das man einen Timer1 und ein Label1 ablegt.
Unter handle eines Fensters verstehe ich nicht nur die Applikationsfenster, sondern auch Buttons und Edits.
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| procedure TForm1.FormCreate(Sender: TObject); begin Form1.FormStyle := fsStayOnTop; Timer1.Interval := 50; end;
procedure TForm1.Timer1Timer(Sender: TObject); var rPos: TPoint; hWnd: THandle; begin GetCursorPos(rPos); hWnd := WindowFromPoint(rPos);
Label1.Caption := 'Handle: ' + IntToStr(hWnd); end; |
_________________ Popov
|
|
F34r0fTh3D4rk
      
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Do 06.01.05 20:16
ich weiß iss n bisschen veraltet schon *schlagtmichwennihrankommt*
aber so einfach ist das doch gar nich oder ich habe mal ein programmcode gehabt um captions usw zu lesen *kram*
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| procedure TForm1.Timer1Timer(Sender: TObject); const cMaxBuffer = 255; var p: TPoint; h: THandle; buf: array[0..cMaxBuffer] of Char; begin GetCursorPos(p); h := WindowFromPoint(p); if h<>0 then SendMessage(h, WM_GETTEXT, cMaxBuffer, Integer(@Buf)); Label1.Caption := Buf; left:= screen.width - width; end;
procedure TForm1.FormCreate(Sender: TObject); begin left:= screen.width - width; top:= 0; end; |
Damit geht es zum Beispiel nicht 
|
|
Sprint
      
Beiträge: 849
|
Verfasst: Do 06.01.05 20:20
F34r0fTh3D4rk hat folgendes geschrieben: | ich weiß iss n bisschen veraltet schon
aber so einfach ist das doch gar nich oder ich habe mal ein programmcode gehabt um captions usw zu lesen
Damit geht es zum Beispiel nicht |
Hast du jetzt eine Frage dazu?
_________________ Ciao, Sprint.
|
|
F34r0fTh3D4rk
      
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Do 06.01.05 20:22
mir war langweilig und ich wollte meinen senf dazugeben 
|
|
Sprint
      
Beiträge: 849
|
Verfasst: Do 06.01.05 20:24
F34r0fTh3D4rk hat folgendes geschrieben: | mir war langweilig und ich wollte meinen senf dazugeben |
Aha...
PS: Das war jetzt nur ein Posting um die Anzahl meiner Beiträge zu erhöhen.
_________________ Ciao, Sprint.
|
|
F34r0fTh3D4rk
      
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Do 06.01.05 20:27
ok hab ich halt ne frage
*sagichabanich*
doch: wie ist das handle einzutragen ich krieg beim meinem formular beim edit feld das handle 01904C2 wi muss ich das jetzt verwenden (hab grad mit sowas angefangen edit felder lesen schreiben usw (weiß ich zwar auch noch net wie das funzt aber egal))
|
|
toms
      
Beiträge: 1099
Erhaltene Danke: 2
|
Verfasst: Do 06.01.05 21:11
Suche nach WM_SETTEXT
|
|
F34r0fTh3D4rk
      
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Fr 07.01.05 16:42
habs scho trotzdem danke 
|
|
F34r0fTh3D4rk
      
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Sa 05.02.05 16:33
ok ich möchte das thema erneut aufgreifen.
Ich habe ein programm in dem das lösungswort in sternchen in einem edit ist.
der titel beginnt mit 'Galgenmännchen'
also habe ich den code genommen und so benutzt:
Delphi-Quelltext 1:
| CancelPasswordChar(FindWindowEx(findwindow(nil, 'Galgenmännchen'), 0, 'TEdit', 0)); |
aber das funktioniert nicht, wenn ich das mit dem handle mache was unter der maus ist, also alle 50ms abfragen geht das, aber so nicht, wo liegt der fehler (hab auch schon andere variationen ausproiert) 
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Sa 05.02.05 19:03
Liegt das Edit eventuell auf einem Panel oder so? Bzw. allgemeiner: Ist es auch ein direktes Child-Fenster von deinem Hauptfenster?
|
|
F34r0fTh3D4rk
      
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Sa 05.02.05 20:50
es ist direktes child, mit der maus abfrage geht das, aber so net 
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Sa 05.02.05 22:22
Ist es denn erin TEdit? Prüf mal die Rückgabewerte vom FindWindow und FindWindowEx.
|
|