现在网上提供的清除历史记录一般都是全部删除,如果有时候只想删除某条记录,可以考虑使用以下方法.
实现对地址栏中的历史记录进行删除的操作,以及运行对话框的历史运行记录的删除.
其实就是找出历史记录在注册表中的位置,然后操作注册表,删除之.
注意:运行对话框的历史记录删除需要注销系统后才起作用.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using Microsoft.Win32;
namespace Zhouzy
{
public partial class ClearNetRecord : Form
{
string CLEARURLRECORD = "Software//Microsoft//Internet Explorer//TypedURLs";
string CLEARRUNRECORD = "Software//Microsoft//Windows//CurrentVersion//Explorer//RunMRU";
public ClearNetRecord()
{
InitializeComponent();
}
private void ClearNetRecord_Load(object sender, EventArgs e)
{
tpClearAddress.Select();
LoadAddressRecord();
LoadRunRecord();
}
private void btClearSelAddress_Click(object sender, EventArgs e)
{
RegistryKey key = Registry.CurrentUser;
RegistryKey subkey = key.CreateSubKey(CLEARURLRECORD);
for (int i = lbAddressList.Items.Count-1; i >= 0; i--)
{
if (lbAddressList.GetSelected(i))
{
string strValue = lbAddressList.Items[i].ToString();
int nPos = strValue.IndexOf(':');
strValue = strValue.Substring(0, nPos);
subkey.DeleteValue(strValue);
lbAddressList.Items.RemoveAt(i);
}
}
key.Close();
}
private void btReverseSelClear_Click(object sender, EventArgs e)
{
RegistryKey key = Registry.CurrentUser;
RegistryKey subkey = key.CreateSubKey(CLEARURLRECORD);
for (int i = lbAddressList.Items.Count - 1; i >= 0; i--)
{
if (!lbAddressList.GetSelected(i))
{
string strValue = lbAddressList.Items[i].ToString();
int nPos = strValue.IndexOf(':');
strValue = strValue.Substring(0, nPos);
subkey.DeleteValue(strValue);
lbAddressList.Items.RemoveAt(i);
}
}
}
private void btClearAddressAll_Click(object sender, EventArgs e)
{
RegistryKey key = Registry.CurrentUser;
key.DeleteValue(CLEARURLRECORD);
lbAddressList.Items.Clear();
key.Close();
}
private void LoadAddressRecord()
{
string[] szName;
//读取注册表中的地址栏信息
RegistryKey key = Registry.CurrentUser;
RegistryKey subkey = key.CreateSubKey(CLEARURLRECORD);
szName = subkey.GetValueNames();
//加载注册表中的信息到列表中
int nCount = subkey.ValueCount;
string listValue = "";
string szValue;
for(int i=0; i<nCount; i++)
{
szValue = szName.GetValue(i).ToString();
szValue = subkey.GetValue(szValue).ToString();
listValue = string.Format("{0}:{1}", szName.GetValue(i), szValue);
lbAddressList.Items.Add(listValue);
}
key.Close();
}
private void LoadRunRecord()
{
string[] szName;
//读取注册表中的地址栏信息
RegistryKey key = Registry.CurrentUser;
RegistryKey subkey = key.CreateSubKey(CLEARRUNRECORD);
szName = subkey.GetValueNames();
//加载注册表中的信息到列表中
int nCount = subkey.ValueCount;
string listValue = "";
string szValue;
for (int i = 0; i < nCount; i++)
{
szValue = szName.GetValue(i).ToString();
if (szValue.Trim() == "MRUList")
continue;
szValue = subkey.GetValue(szValue).ToString();
listValue = string.Format("{0}:{1}", szName.GetValue(i), szValue);
lbRunList.Items.Add(listValue);
}
key.Close();
}
private void btClearRunSel_Click(object sender, EventArgs e)
{
RegistryKey key = Registry.CurrentUser;
RegistryKey subkey = key.CreateSubKey(CLEARRUNRECORD);
for (int i = lbRunList.Items.Count - 1; i >= 0; i--)
{
if (lbRunList.GetSelected(i))
{
string strValue = lbRunList.Items[i].ToString();
int nPos = strValue.IndexOf(':');
strValue = strValue.Substring(0, nPos);
subkey.DeleteValue(strValue);
lbRunList.Items.RemoveAt(i);
}
}
key.Close();
}
private void btClearRunUnSel_Click(object sender, EventArgs e)
{
RegistryKey key = Registry.CurrentUser;
RegistryKey subkey = key.CreateSubKey(CLEARRUNRECORD);
for (int i = lbRunList.Items.Count - 1; i >= 0; i--)
{
if (!lbRunList.GetSelected(i))
{
string strValue = lbRunList.Items[i].ToString();
int nPos = strValue.IndexOf(':');
strValue = strValue.Substring(0, nPos);
subkey.DeleteValue(strValue);
lbRunList.Items.RemoveAt(i);
}
}
}
private void btClearRunAll_Click(object sender, EventArgs e)
{
RegistryKey key = Registry.CurrentUser;
key.DeleteValue(CLEARURLRECORD);
lbRunList.Items.Clear();
key.Close();
}
}
}