如何取得浏览器的历史记录,读取为字符窜形式
就是读取到以后如何列出来(读取文件夹以后出现的是什么昨天、今天之类的),   如何列出所有浏览过的地址,就像IE   History   Manager(http://www.cleanersoft.com/iehistory/iehistory.htm)作的那样
------解决方案--------------------using System.Runtime.InteropServices;   
 [StructLayout(LayoutKind.Sequential)] 
 public class INTERNET_CACHE_ENTRY_INFOW 
 { 
     public uint dwStructSize; 
     public string lpszSourceUrlName; 
     public string lpszLocalFileName; 
     public uint CacheEntryType; 
     public uint dwUseCount; 
     public uint dwHitRate; 
     public uint dwSizeLow; 
     public uint dwSizeHigh; 
     public FILETIME LastModifiedTime; 
     public FILETIME ExpireTime; 
     public FILETIME LastAccessTime; 
     public FILETIME LastSyncTime; 
     public IntPtr lpHeaderInfo; 
     public uint dwHeaderInfoSize; 
     public string lpszFileExtension; 
     public uint dwReserved; //union uint dwExemptDelta; 
 }   
 [DllImport( "wininet.dll ")] 
 public static extern IntPtr FindFirstUrlCacheEntryEx(   
   string lpszUrlSearchPattern, 
   uint dwFlags, 
   uint dwFilter, 
   Int64 GroupId, 
   IntPtr lpFirstCacheEntryInfo, 
   ref uint lpdwFirstCacheEntryInfoBufferSize, 
   Pointer lpGroupAttributes, 
   Pointer pcbGroupAttributes, 
   Pointer lpReserved 
 );   
 [DllImport( "wininet.dll ")] 
 public static extern bool FindCloseUrlCache(IntPtr hEnumHandle);   
 [DllImport( "wininet.dll ")] 
 public static extern bool FindNextUrlCacheEntryEx( 
     IntPtr hEnumHandle, 
     IntPtr lpFirstCacheEntryInfo, 
     ref uint lpdwFirstCacheEntryInfoBufferSize, 
     Pointer lpGroupAttributes, 
     Pointer pcbGroupAttributes, 
     Pointer lpReserved);   
 public uint NORMAL_CACHE_ENTRY = 0x00000001;   
 private void button4_Click(object sender, EventArgs e) 
 { 
     IntPtr vHandle; 
     INTERNET_CACHE_ENTRY_INFOW vInternetCacheEntryInfo = new INTERNET_CACHE_ENTRY_INFOW(); 
     uint vFirstCacheEntryInfoBufferSize = 0; 
     FindFirstUrlCacheEntryEx(null, 0, NORMAL_CACHE_ENTRY, 0, (IntPtr)null, 
         ref vFirstCacheEntryInfoBufferSize, null, null, null); 
     IntPtr vBuffer = Marshal.AllocHGlobal((int)vFirstCacheEntryInfoBufferSize); 
     vHandle = FindFirstUrlCacheEntryEx(null, 0, NORMAL_CACHE_ENTRY, 0, 
        vBuffer, ref vFirstCacheEntryInfoBufferSize, 
        null, null, null); 
     while (vHandle != null) 
     { 
         Marshal.PtrToStructure(vBuffer, vInternetCacheEntryInfo); 
         richTextBox1.AppendText(vInternetCacheEntryInfo.lpszSourceUrlName +  "\r\n "); 
         Marshal.FreeCoTaskMem(vBuffer);   
         FindNextUrlCacheEntryEx(vHandle, (IntPtr)null, ref vFirstCacheEntryInfoBufferSize, 
           null, null, null); 
         vBuffer = Marshal.AllocHGlobal((int)vFirstCacheEntryInfoBufferSize); 
         if (!FindNextUrlCacheEntryEx(vHandle, vBuffer, 
            ref vFirstCacheEntryInfoBufferSize, null, null, null)) break; 
     } 
     Marshal.FreeCoTaskMem(vBuffer); 
 } 
------解决方案--------------------http://www.xfbbs.com/ArticleShow/84/Article_Show_24841.html 
 http://www.ccwblog.cn/ylsun/post/20061120/13258.htm     
 .net 2.0中的autocomplete正是通过此方法实现的,2.0中实现的原型   
 private void SetAutoComplete(bool reset, bool recreate) 
 { 
     if (base.IsHandleCreated && (this.childEdit != null)) 
     { 
         if (this.AutoCompleteMode != AutoCompleteMode.None) 
         { 
             if ((!this.fromHandleCreate && recreate) && base.IsHandleCreated) 
             {