使用CustomTaskPane.Window区分窗格

时间:2019-07-03 20:15:57

标签: c# excel office-interop

用于Excel的C#加载项。

我想使用 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 :(得分:0)

结果是,您获得了指向IUnknown接口的指针,该接口在那里没有任何意义。

相反,我建议将窗口投射到IOLEWindow界面,然后调用GetWindow方法。资源管理器和检查器窗口均实现指定的接口。然后,您可以比较窗口句柄。

答案 1 :(得分:0)

如何?

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

可以正常工作吗?我试过了并且可以用,但是我想知道这是对的吗?