![]() |
ClassName / Caption von Objekt erhalten
Hey Com,
ich kann mit WindowFromPoint() die Caption und den Klassennamen eines Fensters auslesen, nun will ich aber von einem Objekt auf dem Fenster die Caption + Klasse auslesen... Wie bekomm ich das hin? Gibt es etwas in der Richtung "ObjectFromPoint()"? Das mit allen Objekten anzeigen lassen hat bei mir iwie nicht so richtig funktioniert... Mfg, Destroyer446 |
AW: ClassName / Caption von Objekt erhalten
Aus einem Beispiel rauskopiert, zumindest schon mal die Klasse:
Delphi-Quellcode:
var
hWnd: THandle; aName: array [0..255] of Char; procedure TForm1.ShowHwndAndClassName(CrPos: TPoint); begin hWnd := WindowFromPoint(CrPos); Label1.Caption := 'Handle : ' + IntToStr(hWnd); if Boolean(GetClassName(hWnd, aName, 256)) then Label2.Caption := 'ClassName : ' + String(aName) else Label2.Caption := 'ClassName : not found'; end; procedure TForm1.Timer1Timer(Sender: TObject); var rPos: TPoint; begin if Boolean(GetCursorPos(rPos)) then ShowHwndAndClassName(rPos); end; |
AW: ClassName / Caption von Objekt erhalten
Wenn es sich um ein Windowselement handelt, solltest du dieses mit der Methode
![]() |
AW: ClassName / Caption von Objekt erhalten
Naja was meinst du mit Objekten?
Du kannst nur die sogenannten ChildWindows auslesen. Also Controls, die einen HWND besitzen. Diese kannst du mit ChildWindowFromPoint auslesen. In etwa so:
Delphi-Quellcode:
Das hättest du aber auch durch bischen google finden können :-D
ChildHWND := ChildWindowFromPoint(ParentHWnd,Pos);
//ParentHWnd = Ist das Fenster-Handle //Pos = Point von der Pos In der MSDN ![]() Ist nicht böse gemeint. Nur man findet sowas leicht, wenn man sich die MSDN-Hilfe mal genauer durchliesst. Ist nur ein Tipp fürs nächste mal. Gruß NickelM |
AW: ClassName / Caption von Objekt erhalten
![]() |
AW: ClassName / Caption von Objekt erhalten
Keine Lösung hat bei mir funktioniert... ich mach anscheinend irgendwas falsch...
Meine Lösungen: 1. Popov: Gibt bei dem Fenster, was ich brauche, nur den Parent-Namen usw zurück 2. mkinzler: Bekomme ich AccessViolation Fehler. 3. NickelM: Siehe 1. 4. himitsu: Siehe 2. PS: Code bei 4:
Delphi-Quellcode:
... Habt ihr dazu Ideen?
function getWindowCaption(hWnd:Integer):String;
var tmpInt1:SmallInt; tmpInt2:Word; tmpString1:String; begin if Windows.IsWindow(hWnd) then begin tmpInt1:=Windows.GetWindowTextLength(hWnd); tmpString1:=''; for tmpInt2:=1 to tmpInt1 do begin tmpString1:=System.Concat(tmpString1,'?'); end; Windows.GetWindowText(hWnd, System.Addr(tmpString1[1]),tmpInt1+1); result:=tmpString1; end else begin Result:=''; end; end; procedure TForm1.Button1Click(Sender: TObject); var p: TPoint; Mainbuffer: array [0..255] of Char; MainWndCaption, ChildWndCaption, Childbuffer: String; ParentHWND: THandle; ChildHWND: TControl; begin ShowMessage('Du hast jetzt 5 Sekunden um den Mauszeiger über die Hauptform zu bringen.'); Sleep(5000); GetCursorPos(p); ParentHWND := WindowFromPoint(p); If ParentHWND = 0 then begin ShowMessage('Das Fenster konnte nicht ermittelt werden!'); Exit; end; GetClassName(ParentHWND, Mainbuffer, length(Mainbuffer)); MainWndCaption := GetWindowCaption(ParentHWND); Label1.Caption := 'MainWindow: ClassName: '+string(Mainbuffer)+'; Caption: '+MainWndCaption; ShowMessage('Klassenname: '+string(Mainbuffer)+#10+'Bezeichnung: '+MainWndCaption+#10+'Du hast jetzt 5 Sekunden Zeit um den Mauszeiger über das Objekt zu bringen.'); Sleep(5000); GetCursorPos(p); ChildHWND := FindControl(ParentHWND); Childbuffer := ChildHWND.ClassName; ChildWndCaption := ChildHWND.Name; Label2.Caption := 'ChildWindow: ClassName: '+Childbuffer+'; Caption: '+ChildWndCaption; end; |
AW: ClassName / Caption von Objekt erhalten
Liste der Anhänge anzeigen (Anzahl: 1)
Ich hatte für ein "Fernsteuerprogramm" eine Hilfsprojekt zum Suchen aufgesetzt.
Da ist vieles drin was mit Deinem Problem nichts zu tun hat. Ich habe gerade nicht den Nerv nur das benötigte rauszusuchen und lade einfach mal das Projekt so hoch wie es ist. Aus dem Form werden auf 2 Label die Klassennamen und wenn greifbar die Captions beim überfahren angezeigt (den Rest ignorieren, der funktioniert nur wenn eine spezifische Software läuft) |
AW: ClassName / Caption von Objekt erhalten
FindControl und ControlAtPos, oder was sonst noch am Ende auf FindControl zugreift,
funktioniert natürlich nur programmintern. Andere Programme und auch eigene DLL, solange sie nicht mit Laufzeitpackages kompiliert wurden, können nicht ausgelesen werden. Du versuchst es doch hoffentlich nur programmintern? |
AW: ClassName / Caption von Objekt erhalten
Was willst du den jetzt konkret alles haben?
So wie ich es verstanden habe willst du folgendes, bitte Koregiere mich wenn ich falsch liege. - Mouse auf ein Fenster (Ich denke mal du meinst damit eine Form bzw. ein Fenster mit Titel-Bar) - Fenster Klasse and Caption auslesen (Fensterklasse und Titelbar-Text.) - Mouse auf ein Objekt (Was meinst du mit Objekt? Ein Control, wie z.b. ein Label, ein "Child-Window" wie z.b ein Memo,Edit,ComboBox usw. ,ein Control was halt ein HWND hat. Das Ding ist nämlich, dass VCL-Komponenten nicht zwangsläufig einen HWND haben. - Fenster Klasse and Caption auslesen (Fensterklasse ist klar, aber was meinst du mit Caption? Meinst du z.b. wenn du über ein Label gehst, das Caption davon? Und wenn du über ein Memo gehst, was soll er dir dan geben für Caption? Den Memo-Text? Klassennamen kannst du für alles bekommen was ein HWND (Fenster-Handle, was z.b. ein Edit oder ComboBox oder ein Fenster hat). Wenn wie schon erwähnt,wenn du es nur intern brauchst, benutze ControlAtPos. Wenn du Windowsweit haben willst, kannst du dir nur Fenster-Handles holen und auch nur von denen die Klassennamen auslesen. Gruß NickelM |
AW: ClassName / Caption von Objekt erhalten
Ich habe:
FensterCaption des fremden Fensters Ich will: Button auf anderem Fenster drücken -> Dazu muss ich ja den Namen wissen Und nein, ich will es nicht nur Programmintern machen. PS: Das mit der Maus usw war nur zu Testzwecken, um zu prüfen, wie ich den Namen rausbekommen kann. Mfg, Destroyer446 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:14 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz