Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi ClassName / Caption von Objekt erhalten (https://www.delphipraxis.net/168891-classname-caption-von-objekt-erhalten.html)

DeddyH 17. Jun 2012 13:30

AW: ClassName / Caption von Objekt erhalten
 
Lass Dir doch den Code zum Ermitteln des Button-Handles von WinSpy generieren. Dem schickst Du dann ein BM_CLICK (oder BN_CLICKED, ich weiß es gerade nicht genau, Code sollte im Forum zu finden sein).

NickelM 17. Jun 2012 16:28

AW: ClassName / Caption von Objekt erhalten
 
Hier der Link zum Thread, für die faulen :-D
http://www.delphipraxis.net/15388-wi...6-09-08-a.html

Bummi 17. Jun 2012 18:15

AW: ClassName / Caption von Objekt erhalten
 
das was ich hochgeladen hatte tut unter anderem genau dies....

NickelM 18. Jun 2012 01:20

AW: ClassName / Caption von Objekt erhalten
 
Gut, wenn du das Caption des Fensters schon hast, musst du das Fenster mit FindWindow suchen, dort kannst du das Caption als "Suchparameter" eingeben. Damit bekommst du das HWND, womit du weitermachen kannst.
Für den Button zufinden gibt es 2 Möglichkeiten:
- Einmal, mit FindWindowEx, falls du Klasse oder Button-Text hast. Klasse wird schwer, da man Subclassing machen kann, und somit der Button keinen "festen" Klassenname hat. Button-Text, falls du einen Button mit einem bestimmten Text drücken willst, der sich nicht ändert.
- Das zweite wäre, dass du mit EnumChildWindows, alle Child-Handles (also sozusagen "Controls") durchgehst und überprüfst, indem du dir zu jedem den Klasennamen oder Text geben lässt. Das würde dann so funktionieren:
Delphi-Quellcode:
function EnumChildProc(hHandle : HWND; lParam : Integer) : Boolean; stdcall;
begin
  //Überprüfe hier, was du brauchst. Du kannst alle Infos von diesem Child mit dem Parameter hHandle holen.
  //Wenn du das Fenster gefunden hast, gib False zurück, wenn nicht True.
end;

//Aufruf
EnumChildWindows(hParentHWND,@EnumChildProc,0); //In den letzen Parameter kannst du eine eigene Zahl, Pointer übergeben. Diesen Wert findest du in der EnumChildProc im lParam wieder. Funktioniert wie mit SendMessage.
So damit solltest du das denk ich jetzt hinbekommen. Dies ist alles aus dem Kopf geschrieben, hoffe das funkt so.

Gruß NickelM

Destroyer446 18. Jun 2012 14:19

AW: ClassName / Caption von Objekt erhalten
 
Ich weiß nicht was ich falsch mache, aber bei dem "EnumChildWindows" passiert bei mir einfach nichts...
Code:
Delphi-Quellcode:
function EnumChildProc(hHandle : HWND; lParam : Integer) : Boolean; stdcall;
begin
 ShowMessage('-');
end;

procedure TForm1.FormCreate(Sender: TObject);
var
 hParentHWND: HWND;
begin
 hParentHWND := FindWindow(nil, 'Fenstername');
 if hParentHWND = 0 then
 begin
  ShowMessage('Fenster nicht gefunden.');
  Application.Terminate;
 end;
 EnumChildWindows(hParentHWND, @EnumChildProc,0); //In den letzen Parameter kannst du eine eigene Zahl, Pointer übergeben. Diesen Wert findest du in der EnumChildProc im lParam wieder. Funktioniert wie mit SendMessage.
end;
Ist am Code irgendwas falsch?! ...

Mfg, Destroyer446

Bummi 18. Jun 2012 14:48

AW: ClassName / Caption von Objekt erhalten
 
Beispiel mit Notepad und enthaltenem Text
Delphi-Quellcode:
Function GetTextFromHandle(hwd:THandle):String;
const
  MyMaxText = 10000;
begin
  SetLength(Result, MyMaxText);
  SetLength(Result, SendMessage(hwd, WM_GETTEXT, MyMaxText, lParam(PChar(Result))));
end;

function EnumChildProc(hHandle : HWND; lParam : Integer) : Boolean; stdcall;
const
  MyMaxName = 255;
  MyMaxText = 255;
var
  ClassName: string;

begin
  Result := True;
  SetLength(ClassName, MyMaxName);
  SetLength(ClassName, GetClassName(hHandle, PChar(ClassName), MyMaxName));
  Showmessage(ClassName+' - '+GetTextFromHandle(hHandle));
end;
procedure TForm5.Button1Click(Sender: TObject);
var
 hParentHWND: HWND;
begin
 hParentHWND := FindWindow(nil,'Unbenannt - Editor');
 if hParentHWND = 0 then
 begin
  ShowMessage('Fenster nicht gefunden.');
 end else
 EnumChildWindows(hParentHWND, @EnumChildProc,0);
end;

Destroyer446 19. Jun 2012 08:06

AW: ClassName / Caption von Objekt erhalten
 
Bei Notepad gibts kein Problem, nur bei dem Programm schon, aber das liegt nicht am Code.. denk ich mal...
Naja, bei dem Proggi gehts wohl nicht.

Danke,

Destroyer446


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:03 Uhr.
Seite 2 von 2     12   

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