Использование CustomTaskPane.Window для различения панелей - PullRequest
0 голосов
/ 03 июля 2019

C # Надстройка для Excel.

Я хочу использовать свойство CustomTaskPane.Window , чтобы узнать, принадлежит ли панель активной книге. Это мой код:

var activeWnd = Globals.ThisAddIn.Application.ActiveWindow;
var pane = this.CustomTaskPanes.Add(myUSerCtrl, "title", activeWnd);
IntPtr panePtr = Marshal.GetIUnknownForObject(pane.Window);
IntPtr activeWndPtr= Marshal.GetIUnknownForObject(activeWnd);    
bool sameWindows = panePtr.Equals(activeWndPtr);

Когда я проверяю sameWindows , это false . И значения указателя тоже разные Есть ли проблема с моим кодом, или эти свойства не надежны? Разве оба указателя не должны указывать на одно и то же окно? Как еще их можно сравнить?

Спасибо

Ответы [ 2 ]

0 голосов
/ 04 июля 2019

Как насчет этого:

if((Microsoft.Office.Interop.Excel.Window)myPane.Window).Hwnd     
== 
Globals.ThisAddIn.Application.ActiveWindow.Hwnd)

Будет ли это работать нормально? Я пытался, и это работает, но мне интересно, правильно ли это делать?

0 голосов
/ 03 июля 2019

В результате вы получаете указатели на интерфейс IUnknown, который не имеет никакого смысла.

Вместо этого я бы рекомендовал привести окно к интерфейсу IOLEWindow, а затем вызвать метод GetWindow.И окна обозревателя, и окна инспектора реализуют указанный интерфейс.Тогда вы можете сравнить дескрипторы окон.

...