我有两种方法可以获取当前的旅行日志条目,并通过调用GetTravelLogEntry
方法转到检索的日志条目:
public static ITravelLogEntry GetTravelLogEntry(WebBrowser webBrowser)
{
int HRESULT_OK = 0;
SHDocVw.IWebBrowser2 axWebBrowser = (SHDocVw.IWebBrowser2)webBrowser.ActiveXInstance;
IServiceProvider psp = axWebBrowser as IServiceProvider;
if (psp == null) throw new Exception("Could not get IServiceProvider.");
IntPtr oret = IntPtr.Zero;
int hr = psp.QueryService(ref SID_STravelLogCursor, ref IID_ITravelLogStg, out oret);
if ((oret == IntPtr.Zero) || (hr != HRESULT_OK)) throw new Exception("Failed to query service.");
ITravelLogStg tlstg = Marshal.GetObjectForIUnknown(oret) as ITravelLogStg;
if (null == tlstg) throw new Exception("Failed to get ITravelLogStg");
ITravelLogEntry ptle = null;
hr = tlstg.GetRelativeEntry(0, out ptle);
if (hr != HRESULT_OK) MessageBox.Show("Failed to get travel log entry with error " + hr.ToString("X"));
Marshal.ReleaseComObject(tlstg);
return ptle;
}
public static void TravelToTravelLogEntry(WebBrowser webBrowser, ITravelLogEntry travelLogEntry)
{
int HRESULT_OK = 0;
SHDocVw.IWebBrowser2 axWebBrowser = (SHDocVw.IWebBrowser2)webBrowser.ActiveXInstance;
IServiceProvider psp = axWebBrowser as IServiceProvider;
if (psp == null) throw new Exception("Could not get IServiceProvider.");
IntPtr oret = IntPtr.Zero;
int hr = psp.QueryService(ref SID_STravelLogCursor, ref IID_ITravelLogStg, out oret);
if ((oret == IntPtr.Zero) || (hr != HRESULT_OK)) throw new Exception("Failed to query service.");
ITravelLogStg tlstg = Marshal.GetObjectForIUnknown(oret) as ITravelLogStg;
if (null == tlstg) throw new Exception("Failed to get ITravelLogStg");
hr = tlstg.TravelTo(travelLogEntry);
if (hr != HRESULT_OK) MessageBox.Show("Failed to travel to log entry with error " + hr.ToString("X"));
Marshal.ReleaseComObject(tlstg);
}
这里的WebBrowser
是一个.NET WebBrowser
控件。在ITravelLogStg::TravelTo
方法中调用TravelToTravelLogEntry
时,我收到的是0x80004002,根据this页面的错误是Interface not supported
。我做错了吗?
PD:我从here获取了大部分代码。
答案 0 :(得分:1)
那么你正试图导航到旅行日志中的当前条目,因为你已经在那里没有多大意义。我可以为这个特定情况重现错误,并发现它也没有用。
但是使用其他任何内容然后0作为GetRelativeEntry
的第一个参数,然后调用TravelTo
按预期工作。
ITravelLogStg :: GetRelativeEntry返回由...指定的条目 偏移。正偏移量返回当前条目后的条目;一个 负偏移量返回当前条目之前的条目。零 返回当前条目。
(资料来源:MSDN)
尝试修改hr = tlstg.GetRelativeEntry(0, out ptle);
- 第一个参数指定您要导航的方向。使用除0以外的其他值应该起作用,例如你可以使用-1向后移动一个条目。
答案 1 :(得分:0)
我认为您的问题在于您传递给TravelTo
方法的内容。您是否尝试过普通的整数值来查看是否可以通过它?