1
我需要獲取Excel 2016 64位的句柄。在32位和64位平臺上總是處理32位?
但Application.Hwnd
返回一個很長,並且沒有Application.HwndPtr
。
可靠嗎?
如果可靠,爲什麼微軟添加Application.HInstancePtr
而不是在64位平臺上使用舊的Application.HInstance
?
窗口句柄是否可能大於32位?
我需要獲取Excel 2016 64位的句柄。在32位和64位平臺上總是處理32位?
但Application.Hwnd
返回一個很長,並且沒有Application.HwndPtr
。
可靠嗎?
如果可靠,爲什麼微軟添加Application.HInstancePtr
而不是在64位平臺上使用舊的Application.HInstance
?
窗口句柄是否可能大於32位?
這很好,操作系統確保窗口句柄永遠不會溢出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..
注意它是如何long
過程外的一個電話,一個32位的值。
一個HINSTANCE是一個非常不同的句柄,一個內核句柄,它肯定是引擎蓋下的64位值。等於模塊內存中的基址,所以他們被迫添加這個屬性。
還有一些幫助功能列在[這裏](https://www.viva64.com/en/k/0005/)可用於轉換句柄。 –