0

再会,

我有来自不同非 VLC 对象(如(SysListView32、ToolbarWin32)的不同句柄,我想知道是否有任何方法可以转换这些句柄(HWND)。

例如,我得到了开始按钮(位于桌面左下角)句柄。然后我找到了类名“Button”。

我想投射他并从他那里检索标题属性“开始”。例如:

type 
  TButtonStartMenuFictiveClass = class(TButton)
  public
    Text: string;
  end;

if classname = 'button' then
begin
  ShowMessage((objecthandle as TButtonStartMenuFictiveClass).Text);
end;

我正在寻找挂钩所有对象并显示它们的文本。就像 Windows 中的叙述者。

4

2 回答 2

3

在某些情况下,您可以实例化一个 VCL 对象并将外部分配HWND给它的WindowHandle属性,例如:

var
  S: String;

with TButton.Create(nil) do
try
  WindowHandle := TheButtonWnd;
  try
    S := Caption;
  finally
    WindowHandle := 0; // important
  end;
finally
  Free;
end;
于 2012-06-02T22:45:40.327 回答
2

正如我在上一个问题中解释的那样,您需要使用 Windows API 来访问外部窗口控件的属性。您不能简单地将窗口句柄转换为对象。它们不是指向 Delphi 对象的指针。

我链接的示例不仅显示了您悬停的控件的类名,还显示了控件的标题(文本)。这个函数也可以解决问题:

function GetWndText(const Handle: Hwnd): string;
var
  Len: Integer;
begin
  Len := GetWindowTextLength(Handle) + 1;
  SetLength(Result, Len);
  GetWindowText(Handle, PChar(Result), Len);
end;
于 2012-06-02T19:32:31.567 回答