Microsoft Visual Studio 2005 中的webbrowser浏览器为什么当一个账户登录成功后,却再也不能回到登录页面,总是显示登录成功的页面,除非关掉进程,我反复试过,好像是程序把网页页面缓存住了,请问有没有好的解决办法?最好有代码示例。先谢过了。

解决方案 »

  1.   

    这个,你没把登录信息写入cookice就不会啊。
      

  2.   

    那怎样是登录信息不写入Cookie呢?
      

  3.   

    InternetSetCookieA( 
        IN LPCSTR lpszUrl, 
        IN LPCSTR lpszCookieName, 
        IN LPCSTR lpszCookieData 
        ); 
      

  4.   

    怎么注销?我重新new 一个新的webbrowser都不行。
      

  5.   

    你清一下Cookie不行吗?在你new一个的同时。
      

  6.   

    C# API实现,不知道行不行,共享一下,找了很久才找到的
    using System;
    using System.Runtime.InteropServices;// Visual C# version of Q326201
    namespace Q326201CS
    {
        // Class for deleting the cache.
        class DeleteCache
        {
            // For PInvoke: Contains information about an entry in the Internet cache
            [StructLayout(LayoutKind.Explicit, Size=80)]
            public struct INTERNET_CACHE_ENTRY_INFOA
            {
                [FieldOffset(0)]  public uint dwStructSize;
                [FieldOffset(4)]  public IntPtr lpszSourceUrlName;
                [FieldOffset(8)]  public IntPtr lpszLocalFileName;
                [FieldOffset(12)] public uint CacheEntryType;
                [FieldOffset(16)] public uint dwUseCount;
                [FieldOffset(20)] public uint dwHitRate;
                [FieldOffset(24)] public uint dwSizeLow;
                [FieldOffset(28)] public uint dwSizeHigh;
                [FieldOffset(32)] public FILETIME LastModifiedTime;
                [FieldOffset(40)] public FILETIME ExpireTime;
                [FieldOffset(48)] public FILETIME LastAccessTime;
                [FieldOffset(56)] public FILETIME LastSyncTime;
                [FieldOffset(64)] public IntPtr lpHeaderInfo;
                [FieldOffset(68)] public uint dwHeaderInfoSize;
                [FieldOffset(72)] public IntPtr lpszFileExtension;
                [FieldOffset(76)] public uint dwReserved;
                [FieldOffset(76)] public uint dwExemptDelta;
            }        // For PInvoke: Initiates the enumeration of the cache groups in the Internet cache
            [DllImport(@"wininet",
                SetLastError=true,
                CharSet=CharSet.Auto,
                EntryPoint="FindFirstUrlCacheGroup",
                CallingConvention=CallingConvention.StdCall)]
            public static extern IntPtr FindFirstUrlCacheGroup(
                int dwFlags,
                int dwFilter,
                IntPtr lpSearchCondition,
                int dwSearchCondition,
                ref long lpGroupId,
                IntPtr lpReserved);        // For PInvoke: Retrieves the next cache group in a cache group enumeration
            [DllImport(@"wininet",
                SetLastError=true,
                CharSet=CharSet.Auto,
                EntryPoint="FindNextUrlCacheGroup",
                CallingConvention=CallingConvention.StdCall)]
            public static extern bool FindNextUrlCacheGroup(
                IntPtr hFind,
                ref long lpGroupId,
                IntPtr lpReserved);        // For PInvoke: Releases the specified GROUPID and any associated state in the cache index file
            [DllImport(@"wininet", 
                SetLastError=true, 
                CharSet=CharSet.Auto, 
                EntryPoint="DeleteUrlCacheGroup", 
                CallingConvention=CallingConvention.StdCall)]
            public static extern bool DeleteUrlCacheGroup(
                long GroupId,
                int dwFlags,
                IntPtr lpReserved);        // For PInvoke: Begins the enumeration of the Internet cache
            [DllImport(@"wininet",
                SetLastError=true,
                CharSet=CharSet.Auto,
                EntryPoint="FindFirstUrlCacheEntryA",
                CallingConvention=CallingConvention.StdCall)]
            public static extern IntPtr FindFirstUrlCacheEntry(
                [MarshalAs(UnmanagedType.LPTStr)] string lpszUrlSearchPattern,
                IntPtr lpFirstCacheEntryInfo,
                ref int lpdwFirstCacheEntryInfoBufferSize);        // For PInvoke: Retrieves the next entry in the Internet cache
            [DllImport(@"wininet",
                SetLastError=true,
                CharSet=CharSet.Auto,
                EntryPoint="FindNextUrlCacheEntryA",
                CallingConvention=CallingConvention.StdCall)]
            public static extern bool FindNextUrlCacheEntry(
                IntPtr hFind,
                IntPtr lpNextCacheEntryInfo,
                ref int lpdwNextCacheEntryInfoBufferSize);        // For PInvoke: Removes the file that is associated with the source name from the cache, if the file exists
            [DllImport(@"wininet",
                SetLastError=true,
                CharSet=CharSet.Auto,
                EntryPoint="DeleteUrlCacheEntryA",
                CallingConvention=CallingConvention.StdCall)]
            public static extern bool DeleteUrlCacheEntry(
                IntPtr lpszUrlName);        [STAThread]
            static void Main(string[] args)
            {
                // Indicates that all of the cache groups in the user's system should be enumerated
                const int CACHEGROUP_SEARCH_ALL = 0x0;
                // Indicates that all the cache entries that are associated with the cache group
                // should be deleted, unless the entry belongs to another cache group.
                const int CACHEGROUP_FLAG_FLUSHURL_ONDELETE = 0x2;
                // File not found.
                const int ERROR_FILE_NOT_FOUND = 0x2;
                // No more items have been found.
                const int ERROR_NO_MORE_ITEMS = 259;
                // Pointer to a GROUPID variable
                long groupId = 0;            // Local variables
                int cacheEntryInfoBufferSizeInitial = 0;
                int cacheEntryInfoBufferSize = 0;
                IntPtr cacheEntryInfoBuffer = IntPtr.Zero;
                INTERNET_CACHE_ENTRY_INFOA internetCacheEntry;
                IntPtr enumHandle = IntPtr.Zero;
                bool returnValue = false;            // Delete the groups first.
                // Groups may not always exist on the system.
                // For more information, visit the following Microsoft Web site:
                // http://msdn.microsoft.com/library/?url=/workshop/networking/wininet/overview/cache.asp
                // By default, a URL does not belong to any group. Therefore, that cache may become
                // empty even when the CacheGroup APIs are not used because the existing URL does not belong to any group.
                enumHandle = FindFirstUrlCacheGroup(0, CACHEGROUP_SEARCH_ALL, IntPtr.Zero, 0, ref groupId, IntPtr.Zero);
                // If there are no items in the Cache, you are finished.
                if (enumHandle != IntPtr.Zero && ERROR_NO_MORE_ITEMS == Marshal.GetLastWin32Error())
                    return;            // Loop through Cache Group, and then delete entries.
                while(true)
                {
                    // Delete a particular Cache Group.
                    returnValue = DeleteUrlCacheGroup(groupId, CACHEGROUP_FLAG_FLUSHURL_ONDELETE, IntPtr.Zero);
                    if (!returnValue && ERROR_FILE_NOT_FOUND == Marshal.GetLastWin32Error())
                    {
                        returnValue = FindNextUrlCacheGroup(enumHandle, ref groupId, IntPtr.Zero);
                    }                if (!returnValue && (ERROR_NO_MORE_ITEMS == Marshal.GetLastWin32Error() || ERROR_FILE_NOT_FOUND == Marshal.GetLastWin32Error()))
                        break;
                }            // Start to delete URLs that do not belong to any group.
                enumHandle = FindFirstUrlCacheEntry(null, IntPtr.Zero, ref cacheEntryInfoBufferSizeInitial);
                if (enumHandle == IntPtr.Zero && ERROR_NO_MORE_ITEMS == Marshal.GetLastWin32Error())
                    return;            cacheEntryInfoBufferSize = cacheEntryInfoBufferSizeInitial;
                cacheEntryInfoBuffer = Marshal.AllocHGlobal(cacheEntryInfoBufferSize);
                enumHandle = FindFirstUrlCacheEntry(null, cacheEntryInfoBuffer, ref cacheEntryInfoBufferSizeInitial);            while(true)
                {
                    internetCacheEntry = (INTERNET_CACHE_ENTRY_INFOA)Marshal.PtrToStructure(cacheEntryInfoBuffer, typeof(INTERNET_CACHE_ENTRY_INFOA));                 cacheEntryInfoBufferSizeInitial = cacheEntryInfoBufferSize;
                    returnValue = DeleteUrlCacheEntry(internetCacheEntry.lpszSourceUrlName);
                    if (!returnValue)
                    {
                        returnValue = FindNextUrlCacheEntry(enumHandle, cacheEntryInfoBuffer, ref cacheEntryInfoBufferSizeInitial);
                    }
                    if (!returnValue && ERROR_NO_MORE_ITEMS == Marshal.GetLastWin32Error())
                    {
                        break;
                    }
                    if (!returnValue && cacheEntryInfoBufferSizeInitial > cacheEntryInfoBufferSize)
                    {
                        cacheEntryInfoBufferSize = cacheEntryInfoBufferSizeInitial;
                        cacheEntryInfoBuffer = Marshal.ReAllocHGlobal(cacheEntryInfoBuffer, (IntPtr) cacheEntryInfoBufferSize);
                        returnValue = FindNextUrlCacheEntry(enumHandle, cacheEntryInfoBuffer, ref cacheEntryInfoBufferSizeInitial);
                    }
                }
                Marshal.FreeHGlobal(cacheEntryInfoBuffer);
            }
        }
    }
      

  7.   

    webbrowser 缓存不能清除。想起他思路吧。
      

  8.   

    调用RunDll32.exeRunCmd("RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 8");void RunCmd(string cmd)
    {
    System.Diagnostics.Process p = new System.Diagnostics.Process();
    p.StartInfo.FileName = "cmd.exe";
    // 关闭Shell的使用
    p.StartInfo.UseShellExecute = false;
    // 重定向标准输入
    p.StartInfo.RedirectStandardInput = true;
    // 重定向标准输出
    p.StartInfo.RedirectStandardOutput = true;
    //重定向错误输出
    p.StartInfo.RedirectStandardError = true;
    p.StartInfo.CreateNoWindow = true;
    p.Start();
    p.StandardInput.WriteLine(cmd);
    p.StandardInput.WriteLine("exit");
    }以下是其他一些参数的说明:
    //Temporary Internet Files  (Internet临时文件)
    //RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 8
    //Cookies
    //RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 2
    //History (历史记录)
    //RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 1
    //Form Data (表单数据)
    //RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 16
    //Passwords (密码)
    //RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 32
    //Delete All  (全部删除)
    //RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 255
    //Delete All - "Also delete files and settings stored by add-ons"
    //RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 4351