Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Buttonbeschriftungen auflisten (https://www.delphipraxis.net/29181-buttonbeschriftungen-auflisten.html)

Zacherl 5. Sep 2004 10:37


Buttonbeschriftungen auflisten
 
Hallo,

hat jemand eine Idee, wie man Buttonbeschriftungen, über denen sich der Cursor befindet auflisten kann?

SirThornberry 5. Sep 2004 10:42

Re: Buttonbeschriftungen auflisten
 
mit WindowFromPoint einfach das Handle des darunterliegenden Controls holen und dann GetClassName aufrufen um zu prüfen ob es ein button ist. Wenn es ein Button ist mit GetWindowText die Caption holen (oder mit SendMessage und wm_getText)

mirage228 5. Sep 2004 10:44

Re: Buttonbeschriftungen auflisten
 
Hi,

meinst du so etwas?

Delphi-Quellcode:
// Edit:
uses TypInfo;

function GetCaptionAtCursor: String;
var
  Pos : TPoint;
  Ctrl: TWinControl;
begin
  GetCursorPos(Pos);
  Ctrl := FindVCLWindow(Pos);
  if (Ctrl <> nil) and (IsPublishedProp(Ctrl, 'Caption')) then
    Result := GetStrProp(Ctrl, 'Caption') else
  Result := '';
end;
Edit: Mist, merke gerade, dass er das in "Windows API" gepostet hat - Dann musst du SirT's Tipp befolgen...

mfG
mirage228

SirThornberry 5. Sep 2004 10:47

Re: Buttonbeschriftungen auflisten
 
@mirage228: funktioniert das nur innerhalb der eigenen Anwendung? Ich denk schon da über Processgrenzen sonst schlecht alle Properties abgefragt werden können.

mirage228 5. Sep 2004 10:48

Re: Buttonbeschriftungen auflisten
 
Zitat:

Zitat von SirThornberry
@mirage228: funktioniert das nur innerhalb der eigenen Anwendung? Ich denk schon da über Processgrenzen sonst schlecht alle Properties abgefragt werden können.

Ja, das funktioniert nur innerhalb der eigenen Anwendung. Und auch nur, falls man die VCL verwendet.

mfG
mirage228

SirThornberry 5. Sep 2004 10:53

Re: Buttonbeschriftungen auflisten
 
Das sollte global funktionieren (aus vorhandenen sourcen zusammengesucht und ungetestet)
Delphi-Quellcode:
var text: PChar;
    tmpint: Integer;
    CursorPos: TPoint;
    Lhwnd: Cardinal;
begin
  GetCursorPos(CursorPos);
  Lhwnd := WindowFromPoint(CursorPos);

  tmpint := SendMessage(Lhwnd, WM_GETTEXTLENGTH, 0, 0) + 1;
  getmem(text, tmpint);
  SendMessage(Lhwnd, WM_GETTEXT, tmpint, Integer(Text));
  Edit1.Text := String(text);
  freemem(text);
Bei diesem Beispiel fehlt noch die Prüfung auf den Klassennamen wenn man nur auf Buttons reagieren möchte.
Diesen erhält man ganze einfach so:
Delphi-Quellcode:
var Classenname: Array[0..255] of Char;
begin
  GetClassName(LHwnd, Classenname, 255);
  Edit2.Text := String(Classenname);


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:01 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