Autor Beitrag
ShadowCaster
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 312



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2931

XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 312



BeitragVerfasst: 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



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 312



BeitragVerfasst: 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 :oops:
Motzi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2931

XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
BeitragVerfasst: Mo 24.03.03 16:51 
ShadowCaster hat folgendes geschrieben:
Hast mal wieder nicht richtig gelesen :wink:

Doch hab ich! :wink: 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



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 312



BeitragVerfasst: Mo 24.03.03 16:55 
hey thx für die Hilfe :wink: 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. 8)
Popov
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 1655
Erhaltene Danke: 13

WinXP Prof.
Bei Kleinigkeiten D3Pro, bei größeren Sachen D6Pro oder D7
BeitragVerfasst: 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.

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5284
Erhaltene Danke: 27

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: 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*

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 849



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5284
Erhaltene Danke: 27

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: Do 06.01.05 20:22 
mir war langweilig und ich wollte meinen senf dazugeben :mrgreen:
Sprint
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 849



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5284
Erhaltene Danke: 27

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: Do 06.01.05 20:27 
ok hab ich halt ne frage :D

*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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1099
Erhaltene Danke: 2



BeitragVerfasst: Do 06.01.05 21:11 
Suche nach Suche in: Delphi-Forum, Delphi-Library WM_SETTEXT
F34r0fTh3D4rk
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5284
Erhaltene Danke: 27

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: Fr 07.01.05 16:42 
habs scho trotzdem danke :D
F34r0fTh3D4rk
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5284
Erhaltene Danke: 27

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: 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:

ausblenden 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



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5284
Erhaltene Danke: 27

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: 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



BeitragVerfasst: Sa 05.02.05 22:22 
Ist es denn erin TEdit? Prüf mal die Rückgabewerte vom FindWindow und FindWindowEx.