Com 从Windows句柄获取对象

Com 从Windows句柄获取对象,com,vb6,Com,Vb6,如果您知道对象类型,并且拥有对象句柄(hwnd),有没有办法将其转换为变量?示例:hwnd只是操作系统映射到内部对象的数字(它们可以并且确实得到回收)。你真的不能把它们变成任何东西 Set myObj = Magic(hwnd) 在您的示例中,您希望myObj做什么?所有用于操作窗口的Windows API都使用hWnd。您可以使用GetObject()for COM,但它确实有一些限制——您不能为一个特定的hWnd指定一个 例如,您可以使用GetObject(“,Excel.Applicati

如果您知道对象类型,并且拥有对象句柄(hwnd),有没有办法将其转换为变量?

示例:

hwnd只是操作系统映射到内部对象的数字(它们可以并且确实得到回收)。你真的不能把它们变成任何东西

Set myObj = Magic(hwnd)

在您的示例中,您希望myObj做什么?所有用于操作窗口的Windows API都使用hWnd。

您可以使用GetObject()for COM,但它确实有一些限制——您不能为一个特定的hWnd指定一个


例如,您可以使用GetObject(“,Excel.Application”)获取一个正在运行的Excel实例,但如果有多个正在运行的实例,您将不知道将返回哪个实例,也无法指定。

我真正想做的是响应另一个应用程序中控件中的事件。起初,我想我只是读了一下消息队列(这让我开始走hwnd之路)。但后来我意识到,我必须把它放在某种计时器中,并继续读取队列。所以我想“如果我能得到这个对象,我就可以用withevents来响应它的事件”。如果你想得到另一个窗口的消息,你可以将窗口过程子类化。将SetWindowLongPtr()与GWLP_WINDOWPROC一起使用。它将调用您的windowproc,您可以处理所需的内容,并将其余内容传递给旧的windowproc。请参阅:您应该能够了解如何从VB调用它。“对象”没有HWND,windows有。当然,对象可能有一个或多个窗口,例如“重”ActiveX控件有一个窗口。