我需要获取Excel 2016 64bit的句柄。
但Application.HwndPtr
会返回一个长号,而且没有Application.HInstancePtr
。
可靠吗?
如果可靠,为什么Microsoft会在64位平台上添加Application.HInstance
而不是使用旧版{{1}}?
窗口句柄是否可能大于32位?
答案 0 :(得分:3)
没关系,操作系统确保窗口句柄永远不会溢出32位值。在桌面上永远不会有超过65535个窗口,因此很容易做到。它可以在COM互操作声明中看到它可以在WTypes.idl SDK文件中看到的远程窗口句柄:
typedef union _RemotableHandle switch( long fContext ) u
{
case WDT_INPROC_CALL: long hInproc;
case WDT_REMOTE_CALL: long hRemote;
} RemotableHandle;
typedef [unique] RemotableHandle * wireHWND;
typedef [unique] RemotableHandle * wireHMENU;
// etc..
请注意进程外调用(32位值)的long
。
HINSTANCE是一种非常不同的句柄,一个内核句柄,它肯定是引擎盖下的64位值。等于模块内存中的基地址,因此他们被迫添加此属性。