如何从 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 实例的控件创建的,它将检索对象实例。由于 Name
在 TComponent
中发布,您可以访问 属性 而不管实际的 class 类型。
每个 windowed VCL 控件的对象实例地址都存储在 API window 的 property list 中,连同包含模块地址、进程信息的属性id,线程id。这使得 VCL 可以从它创建的 window 回溯控件。
在我的应用程序中,我通过 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 实例的控件创建的,它将检索对象实例。由于 Name
在 TComponent
中发布,您可以访问 属性 而不管实际的 class 类型。
每个 windowed VCL 控件的对象实例地址都存储在 API window 的 property list 中,连同包含模块地址、进程信息的属性id,线程id。这使得 VCL 可以从它创建的 window 回溯控件。