在 32 位和 64 位平台上句柄总是 32 位吗?

Is handle always 32bit on both 32bit and 64bit platforms?

我需要获取Excel2016 64bit的句柄

但是Application.Hwndreturns一个long,而且没有Application.HwndPtr.

靠谱吗?

如果可靠,为什么 Microsoft 添加 Application.HInstancePtr 而不是在 64 位平台上使用旧的 Application.HInstance

window 句柄是否可以大于 32 位?

没关系,OS 确保 window 句柄永远不会溢出 32 位值。桌面上的数字永远不会超过 65535 windows,所以这很容易做到。您可以在远程 window 句柄的 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..

请注意进程外调用的 long,一个 32 位值。

HINSTANCE 是一种非常不同的句柄,内核句柄,它在幕后肯定是 64 位值。等于模块内存中的基地址,所以他们被迫添加这个 属性.