如何取得浏览器的历史记录,读取为字符窜形式

huing 2007-03-08 04:02:03
就是读取到以后如何列出来(读取文件夹以后出现的是什么昨天、今天之类的), 如何列出所有浏览过的地址,就像IE History Manager(http://www.cleanersoft.com/iehistory/iehistory.htm)作的那样
...全文
759 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
huing 2007-03-13
  • 打赏
  • 举报
回复
这个方法还是有些问题的,而且得到的结果不仅仅是历史,还包括一些cache里的东西。
具体的我已经找到了
http://www.codeproject.com/csharp/ponta.asp?df=100&forumid=67589&exp=0&select=897325
这个是取到所有历史纪录的。
RexZheng 2007-03-13
  • 打赏
  • 举报
回复
既然2005用这个API实现,说明这应该是最合适的实现方法了
RexZheng 2007-03-13
  • 打赏
  • 举报
回复
我提供的方法是2005的内部实现,原本就有的API方法, dotnet出现之前就有了的
RexZheng 2007-03-12
  • 打赏
  • 举报
回复
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)
{
AutoCompleteMode autoCompleteMode = this.AutoCompleteMode;
this.autoCompleteMode = AutoCompleteMode.None;
base.RecreateHandle();
this.autoCompleteMode = autoCompleteMode;
}
if (this.AutoCompleteSource == AutoCompleteSource.CustomSource)
{
if (this.AutoCompleteCustomSource != null)
{
if (this.AutoCompleteCustomSource.Count == 0)
{
int flags = -1610612736;
SafeNativeMethods.SHAutoComplete(new HandleRef(this, this.childEdit.Handle), flags);
}
else if (this.stringSource != null)
{
this.stringSource.RefreshList(this.GetStringsForAutoComplete(this.AutoCompleteCustomSource));
}
else
{
this.stringSource = new StringSource(this.GetStringsForAutoComplete(this.AutoCompleteCustomSource));
if (!this.stringSource.Bind(new HandleRef(this, this.childEdit.Handle), (int) this.AutoCompleteMode))
{
throw new ArgumentException(SR.GetString("AutoCompleteFailure"));
}
}
}
}
else if (this.AutoCompleteSource == AutoCompleteSource.ListItems)
{
if (this.DropDownStyle == ComboBoxStyle.DropDownList)
{
int flags = -1610612736;
SafeNativeMethods.SHAutoComplete(new HandleRef(this, this.childEdit.Handle), flags);
}
else if (this.itemsCollection != null)
{
if (this.itemsCollection.Count == 0)
{
int flags = -1610612736;
SafeNativeMethods.SHAutoComplete(new HandleRef(this, this.childEdit.Handle), flags);
}
else if (this.stringSource != null)
{
this.stringSource.RefreshList(this.GetStringsForAutoComplete(this.Items));
}
else
{
this.stringSource = new StringSource(this.GetStringsForAutoComplete(this.Items));
if (!this.stringSource.Bind(new HandleRef(this, this.childEdit.Handle), (int) this.AutoCompleteMode))
{
throw new ArgumentException(SR.GetString("AutoCompleteFailureListItems"));
}
}
}
}
else
{
try
{
int num4 = 0;
if (this.AutoCompleteMode == AutoCompleteMode.Suggest)
{
num4 |= -1879048192;
}
if (this.AutoCompleteMode == AutoCompleteMode.Append)
{
num4 |= 0x60000000;
}
if (this.AutoCompleteMode == AutoCompleteMode.SuggestAppend)
{
num4 |= 0x10000000;
num4 |= 0x40000000;
}
SafeNativeMethods.SHAutoComplete(new HandleRef(this, this.childEdit.Handle), ((int) this.AutoCompleteSource) | num4);
}
catch (SecurityException)
{
}
}
}
else if (reset)
{
int flags = -1610612736;
SafeNativeMethods.SHAutoComplete(new HandleRef(this, this.childEdit.Handle), flags);
}
}
}


huing 2007-03-12
  • 打赏
  • 举报
回复
AutoCompleteSource好像是2005特有的, 2003怎么获取呢?
huing 2007-03-12
  • 打赏
  • 举报
回复
希望下班前解决
huing 2007-03-12
  • 打赏
  • 举报
回复
up
huing 2007-03-12
  • 打赏
  • 举报
回复
AutoCompleteMode 不是还是2.0的?
楼上的这个方法还是说明2005的吧
WeiWY 2007-03-10
  • 打赏
  • 举报
回复
textBox1.AutoCompleteSource = AutoCompleteSource.HistoryList
huing 2007-03-09
  • 打赏
  • 举报
回复
hongyelzg(风中过客) ( ) 信誉:100 Blog 2007-03-09 12:21:29 得分: 0


不需要这么复杂,有一个com可以实现这种功能


哪一个??请指点一下,谢谢
hongyelzg 2007-03-09
  • 打赏
  • 举报
回复
不需要这么复杂,有一个com可以实现这种功能
RexZheng 2007-03-09
  • 打赏
  • 举报
回复
设置combobox的AutoCompleteSource属性就行
RexZheng 2007-03-09
  • 打赏
  • 举报
回复
2005中不用这么麻烦
王集鹄 2007-03-09
  • 打赏
  • 举报
回复
System.Reflection.Pointer
我的调试环境是2005
Pointer声明在System.Reflection命名空间

你可以这样调试
Pointer -> IntPtr
null -> IntPtr.Zero
huing 2007-03-09
  • 打赏
  • 举报
回复
Pointer是指指针?
需要设置使用不安全代码?
还是需要引用某一个DLL

我这里编译不过阿
huing 2007-03-09
  • 打赏
  • 举报
回复
up
王集鹄 2007-03-08
  • 打赏
  • 举报
回复
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);
}

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧