AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi ClassName / Caption von Objekt erhalten
Thema durchsuchen
Ansicht
Themen-Optionen

ClassName / Caption von Objekt erhalten

Ein Thema von Destroyer446 · begonnen am 16. Jun 2012 · letzter Beitrag vom 19. Jun 2012
Antwort Antwort
Seite 1 von 2  1 2      
Destroyer446

Registriert seit: 17. Jan 2011
67 Beiträge
 
#1

ClassName / Caption von Objekt erhalten

  Alt 16. Jun 2012, 19:45
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
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#2

AW: ClassName / Caption von Objekt erhalten

  Alt 16. Jun 2012, 19:55
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;
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: ClassName / Caption von Objekt erhalten

  Alt 16. Jun 2012, 19:56
Wenn es sich um ein Windowselement handelt, solltest du dieses mit der Methode .ControlAtPos() ermitteln können.
Markus Kinzler
  Mit Zitat antworten Zitat
NickelM

Registriert seit: 22. Jul 2007
Ort: Carlsberg
445 Beiträge
 
Delphi 2009 Professional
 
#4

AW: ClassName / Caption von Objekt erhalten

  Alt 16. Jun 2012, 20:02
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:
ChildHWND := ChildWindowFromPoint(ParentHWnd,Pos);
//ParentHWnd = Ist das Fenster-Handle
//Pos = Point von der Pos
Das hättest du aber auch durch bischen google finden können
In der MSDN hier steht unten dabei das du ChildWindows mit ChildWindowFromPoint auslesen kannst. Also Fenster auf diesem Fenster
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
Nickel
"Lebe und denke nicht an morgen"
Zitat aus dem gleichnamigen Bollywoodfilm.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.115 Beiträge
 
Delphi 12 Athens
 
#5

AW: ClassName / Caption von Objekt erhalten

  Alt 16. Jun 2012, 20:03
Delphi-Referenz durchsuchenFindControl, wenn man schon ein Handle hat.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Destroyer446

Registriert seit: 17. Jan 2011
67 Beiträge
 
#6

AW: ClassName / Caption von Objekt erhalten

  Alt 16. Jun 2012, 20:31
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:
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;
... Habt ihr dazu Ideen?
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#7

AW: ClassName / Caption von Objekt erhalten

  Alt 16. Jun 2012, 21:16
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)
Angehängte Dateien
Dateityp: zip Mouse_Handle_und_Mehr.zip (3,5 KB, 11x aufgerufen)
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.115 Beiträge
 
Delphi 12 Athens
 
#8

AW: ClassName / Caption von Objekt erhalten

  Alt 16. Jun 2012, 21:46
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?
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
NickelM

Registriert seit: 22. Jul 2007
Ort: Carlsberg
445 Beiträge
 
Delphi 2009 Professional
 
#9

AW: ClassName / Caption von Objekt erhalten

  Alt 16. Jun 2012, 22:29
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
Nickel
"Lebe und denke nicht an morgen"
Zitat aus dem gleichnamigen Bollywoodfilm.
  Mit Zitat antworten Zitat
Destroyer446

Registriert seit: 17. Jan 2011
67 Beiträge
 
#10

AW: ClassName / Caption von Objekt erhalten

  Alt 17. Jun 2012, 13:09
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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:05 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz