Мне нужно получить дескриптор окна Excel 2013 x64 из 64-битного кода VBA, работающего в электронной таблице. Есть несколько вариантов, чтобы сделать это:Является ли приложение Excel Application.Hwnd пригодным для использования с 64-битным VBA?
- Read
Application.Hwnd
(MSDN Application.Hwnd Property (Excel)) - вызова FindWindow, импортированные из user32, например, как описано в принятом ответ здесь: What are the differences between VBA 6.0 and VBA 7.0?:
Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" (_ ByVal lpClassName As String, _ ByVal lpWindowName As String) As LongPtr
Проблема в том, что Application.Hwnd
возвращает Long
, то есть 32 бита (я проверил это с MsgBox TypeName(Application.Hwnd)
в 64 битной среде), в то время как FindWindow
возвращает LongPtr
, который занимает 64 бит в Office x64.
Означает ли это, что объекту Application.Hwnd
нельзя доверять, чтобы быть всегда корректным в 64-битной среде?
Все в порядке, оконные ручки по-прежнему работают как 32-битное значение в 64-битном коде. Верхние 32 бита всегда равны 0. –
true @ HansPassant. Msdn Ref: Последняя ссылка в моем сообщении. –