美好的一天,
我有不同的非VLC对象的不同句柄,如(SysListView32,ToolbarWin32),我想知道是否有任何方法来转换这些句柄(HWND)。
例如,我得到了启动按钮(位于桌面左下方)的句柄。然后我找到了班级名称“按钮”。
我想投他并从他那里取回标题属性“start”。例如:
type
TButtonStartMenuFictiveClass = class(TButton)
public
Text: string;
end;
if classname = 'button' then
begin
ShowMessage((objecthandle as TButtonStartMenuFictiveClass).Text);
end;
我希望挂钩所有对象并显示它们的文本。就像Windows的叙述者一样。
答案 0 :(得分:2)
正如我在previous question中解释的那样,您需要使用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;
答案 1 :(得分:2)
在某些情况下,您可以实例化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;