public static HashSet <ITravelLogEntry> GetTravelLogEntries(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"); } //Enum the travel log entries IEnumTravelLogEntry penumtle = null; tlstg.EnumEntries((int)TLMENUF.TLEF_ABSOLUTE, out penumtle); hr = 0; ITravelLogEntry ptle = null; int fetched = 0; const int MAX_FETCH_COUNT = 1; hr = penumtle.Next(MAX_FETCH_COUNT, out ptle, out fetched); Marshal.ThrowExceptionForHR(hr); HashSet <ITravelLogEntry> results = new HashSet <ITravelLogEntry>(); for (int i = 0; 0 == hr; i++) { if (ptle != null) { results.Add(ptle); } hr = penumtle.Next(MAX_FETCH_COUNT, out ptle, out fetched); Marshal.ThrowExceptionForHR(hr); } Marshal.ReleaseComObject(penumtle); Marshal.ReleaseComObject(tlstg); return(results); }
//public static void TravelTo(WebBrowser webBrowser, int 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) { throw new Exception("Failed to get travel log entry with error " + hr.ToString("X")); } Marshal.ReleaseComObject(tlstg); return(ptle); }