如何从 Handle 中检索组件名称?

How from an Handle can I retrieve the component name?

在我的应用程序中,我通过 SetWindowsHookEx 捕获所有事件,当用户单击按钮时,我检索到一个 hwnd,我猜它是 Tbutton 的句柄。

typedef struct tagMSG {
  HWND   hwnd;
  UINT   message;
  WPARAM wParam;
  LPARAM lParam;
  DWORD  time;
  POINT  pt;
  DWORD  lPrivate;
} MSG, *P

现在我如何从这个 hwnd 中检索按钮名称(或者更好的 Delphi 代表按钮的对象?)。

也许我也可以通过 POINT pt; ?

检索组件

您可以使用 FindControl,如果 window 是由属于调用该函数的同一 VCL 实例的控件创建的,它将检索对象实例。由于 NameTComponent 中发布,您可以访问 属性 而不管实际的 class 类型。

每个 windowed VCL 控件的对象实例地址都存储在 API window 的 property list 中,连同包含模块地址、进程信息的属性id,线程id。这使得 VCL 可以从它创建的 window 回溯控件。