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 button1_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);
}