我正在尝试做一些Internet Explorer自动化任务,它要求我使用IViewObject。什么是IViewObject?我在哪里可以找到它的定义?
我一直在google-ing,我找到的所有内容都有不同的IViewObject接口定义。不同的方法或不同的参数进入相同的方法。
我如何知道要使用Internet Explorer的接口定义?
这是我在pinvoke.net
上找到的一个定义[GuidAttribute( "0000010d-0000-0000-C000-000000000046" )]
[InterfaceTypeAttribute( ComInterfaceType.InterfaceIsIUnknown )]
[ComImportAttribute()]
public interface IViewObject
{
void Draw( [MarshalAs( UnmanagedType.U4 )] int dwDrawAspect, int lindex, IntPtr pvAspect, DVTARGETDEVICE ptd, IntPtr hdcTargetDev, IntPtr hdcDraw, COMRECT lprcBounds, COMRECT lprcWBounds, IntPtr pfnContinue, int dwContinue );
int GetColorSet( [MarshalAs( UnmanagedType.U4 )] int dwDrawAspect, int lindex, IntPtr pvAspect, DVTARGETDEVICE ptd, IntPtr hicTargetDev, out tagLOGPALETTE ppColorSet );
int Freeze( [MarshalAs( UnmanagedType.U4 )] int dwDrawAspect, int lindex, IntPtr pvAspect, out IntPtr pdwFreeze );
int Unfreeze( [MarshalAs( UnmanagedType.U4 )] int dwFreeze );
int SetAdvise( [MarshalAs( UnmanagedType.U4 )] int aspects, [MarshalAs( UnmanagedType.U4 )] int advf, [MarshalAs( UnmanagedType.Interface )] IAdviseSink pAdvSink );
void GetAdvise( [MarshalAs( UnmanagedType.LPArray )] out int[] paspects, [MarshalAs( UnmanagedType.LPArray )] out int[] advf, [MarshalAs( UnmanagedType.LPArray )] out IAdviseSink[] pAdvSink );
}
我会尝试这个定义,但我得到一些未知的类型:DVTARGETDEVICE,COMRECT,tagLOGPALETTE。所以我的下一个问题是,需要引用哪些程序集才能使用这些类型?
答案 0 :(得分:3)
DVTARGETDEVICE和COMRECT是结构。你可以在pinvoke.net上找到他们的定义。
tagLOGPALETTE是一个类。 http://blogs.msdn.com/vsod/archive/2008/11/01/resizing-the-embedded-ole-objects-using-net.aspx有一个样本。
此外,IViewObject和三个引用的类型都由.NET Framework内部使用。如果您自己获取Reflector(http://www.red-gate.com/products/reflector/)的副本,则可以在System.Windows.Forms.UnsafeNativeMethods中查看现有实现。