用于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 。指针值也不同 我的代码是否有问题,或者这些属性不可靠? 两个指针不应该指向同一个窗口吗? 我还能如何比较它们?
谢谢
答案 0 :(得分:0)
结果是,您获得了指向IUnknown
接口的指针,该接口在那里没有任何意义。
相反,我建议将窗口投射到IOLEWindow
界面,然后调用GetWindow
方法。资源管理器和检查器窗口均实现指定的接口。然后,您可以比较窗口句柄。
答案 1 :(得分:0)
如何?
if((Microsoft.Office.Interop.Excel.Window)myPane.Window).Hwnd
==
Globals.ThisAddIn.Application.ActiveWindow.Hwnd)
可以正常工作吗?我试过了并且可以用,但是我想知道这是对的吗?