控件WebBrowser -- 获取并设置自己的浏览器为默认浏览器
在.net里面,有一个WebBrowser控件,这个控件可以用于很多用途,很多人用来定做自己的浏览器,本文谈谈如何获取默认浏览器的设置,并介绍如何设置自己的浏览器为默认浏览器的小技巧。
先看一个小的界面图形,用来更好理解这个功能的用途,如下图我们可以看到需要获取到系统的默认浏览器名称,并提供设置默认浏览器功能。
其实,这些操作都是和注册表相关的内容,这些内容保存在键HKEY_CLASSES_ROOT\http\shell\open\command中的默认值里面,
而默认浏览器的名称保存在HKEY_CLASSES_ROOT\http\shell\open\ddeexec\Application的默认值里面。
基本上我们修改这两个键值就可以实现默认浏览器的设置了。
在上面的默认浏览器界面中,我封装了一些方法,现发布出来,希望对大家有用处。
代码
private void FrmOptions_Load(object sender, EventArgs e)
{
InitDefaultBrowser();
}
private void InitDefaultBrowser()
{
string defaultName = RegistryHelper.GetDefaultBrowerName();
try
{
string browserPath = CRegex.GetText(defaultName, "\"(?<key>.*?)\"", 1);
FileInfo fileInfo = new FileInfo(browserPath);
string fileName = fileInfo.Name.Replace(fileInfo.Extension, "");
this.lblDefaultName.Text = fileName;
}
catch(Exception ex)
{
LogHelper.Error(ex);
}
}
private void btnSetDefault_Click(object sender, EventArgs e)
{
RegistryHelper.SetDefaultBrowser(Application.ExecutablePath);
MessageUtil.ShowTips("设置默认浏览器成功");
InitDefaultBrowser();
}
private void btnReset_Click(object sender, EventArgs e)
{
RegistryHelper.ResetIEDefaultBrowser();
MessageUtil.ShowTips("恢复IE为默认浏览器成功");
InitDefaultBrowser();
}
{
InitDefaultBrowser();
}
private void InitDefaultBrowser()
{
string defaultName = RegistryHelper.GetDefaultBrowerName();
try
{
string browserPath = CRegex.GetText(defaultName, "\"(?<key>.*?)\"", 1);
FileInfo fileInfo = new FileInfo(browserPath);
string fileName = fileInfo.Name.Replace(fileInfo.Extension, "");
this.lblDefaultName.Text = fileName;
}
catch(Exception ex)
{
LogHelper.Error(ex);
}
}
private void btnSetDefault_Click(object sender, EventArgs e)
{
RegistryHelper.SetDefaultBrowser(Application.ExecutablePath);
MessageUtil.ShowTips("设置默认浏览器成功");
InitDefaultBrowser();
}
private void btnReset_Click(object sender, EventArgs e)
{
RegistryHelper.ResetIEDefaultBrowser();
MessageUtil.ShowTips("恢复IE为默认浏览器成功");
InitDefaultBrowser();
}
其中我把注册表的访问,放到了一个独立的注册版访问类中进行处理了,其中包含了3个部分,获取默认浏览器名称,设置自己的浏览器为默认浏览器,恢复IE为默认浏览器功能。下面是该类的代码。
代码
/// <summary>
/// 获取默认浏览器的名称
/// </summary>
/// <returns></returns>
public static string GetDefaultBrowerName()
{
string mainKey = @"http\shell\open\command";
string nameKey = @"http\shell\open\ddeexec\Application";
string strRet = string.Empty;
try
{
RegistryKey regKey = Registry.ClassesRoot.OpenSubKey(mainKey);
strRet = regKey.GetValue("").ToString();
}
catch
{
strRet = "";
}
return strRet;
}
/// <summary>
/// 设置自定义浏览器为默认浏览器
/// </summary>
/// <param name="browserExePath"></param>
/// <returns></returns>
public static bool SetDefaultBrowser(string browserExePath)
{
string mainKey = @"http\shell\open\command";
string nameKey = @"http\shell\open\ddeexec\Application";
bool result = false;
try
{
string value = string.Format("\"{0}\" \"%1\"", browserExePath);
RegistryKey regKey = Registry.ClassesRoot.OpenSubKey(mainKey, true);
regKey.SetValue("", value);
regKey.Close();
FileInfo fileInfo = new FileInfo(browserExePath);
string fileName = fileInfo.Name.Replace(fileInfo.Extension, "");
regKey = Registry.ClassesRoot.OpenSubKey(nameKey, true);
regKey.SetValue("", fileName);
regKey.Close();
result = true;
}
catch(Exception ex)
{
LogHelper.Error(ex);
}
return result;
}
/// <summary>
/// 恢复IE为默认浏览器
/// </summary>
/// <returns></returns>
public static bool ResetIEDefaultBrowser()
{
string mainKey = @"http\shell\open\command";
string nameKey = @"http\shell\open\ddeexec\Application";
string IEPath = @"C:\Program Files\Internet Explorer\iexplore.exe";
bool result = false;
try
{
string value = string.Format("\"{0}\" -- \"%1\"", IEPath);
RegistryKey regKey = Registry.ClassesRoot.OpenSubKey(mainKey, true);
regKey.SetValue("", value);
regKey.Close();
regKey = Registry.ClassesRoot.OpenSubKey(nameKey, true);
regKey.SetValue("", "IExplore");
regKey.Close();
result = true;
}
catch
{
}
return result;
}
/// 获取默认浏览器的名称
/// </summary>
/// <returns></returns>
public static string GetDefaultBrowerName()
{
string mainKey = @"http\shell\open\command";
string nameKey = @"http\shell\open\ddeexec\Application";
string strRet = string.Empty;
try
{
RegistryKey regKey = Registry.ClassesRoot.OpenSubKey(mainKey);
strRet = regKey.GetValue("").ToString();
}
catch
{
strRet = "";
}
return strRet;
}
/// <summary>
/// 设置自定义浏览器为默认浏览器
/// </summary>
/// <param name="browserExePath"></param>
/// <returns></returns>
public static bool SetDefaultBrowser(string browserExePath)
{
string mainKey = @"http\shell\open\command";
string nameKey = @"http\shell\open\ddeexec\Application";
bool result = false;
try
{
string value = string.Format("\"{0}\" \"%1\"", browserExePath);
RegistryKey regKey = Registry.ClassesRoot.OpenSubKey(mainKey, true);
regKey.SetValue("", value);
regKey.Close();
FileInfo fileInfo = new FileInfo(browserExePath);
string fileName = fileInfo.Name.Replace(fileInfo.Extension, "");
regKey = Registry.ClassesRoot.OpenSubKey(nameKey, true);
regKey.SetValue("", fileName);
regKey.Close();
result = true;
}
catch(Exception ex)
{
LogHelper.Error(ex);
}
return result;
}
/// <summary>
/// 恢复IE为默认浏览器
/// </summary>
/// <returns></returns>
public static bool ResetIEDefaultBrowser()
{
string mainKey = @"http\shell\open\command";
string nameKey = @"http\shell\open\ddeexec\Application";
string IEPath = @"C:\Program Files\Internet Explorer\iexplore.exe";
bool result = false;
try
{
string value = string.Format("\"{0}\" -- \"%1\"", IEPath);
RegistryKey regKey = Registry.ClassesRoot.OpenSubKey(mainKey, true);
regKey.SetValue("", value);
regKey.Close();
regKey = Registry.ClassesRoot.OpenSubKey(nameKey, true);
regKey.SetValue("", "IExplore");
regKey.Close();
result = true;
}
catch
{
}
return result;
}
另外代码中,为了获取到默认的浏览器文件名称,我通过正则表达式来获取内容,
我们看到,那个默认值是:"E:\Program Files\Maxthon2\Maxthon.exe" "%1"
为了获得第一部分的内容,我通过正则表达式匹配方式来获取,如代码
string browserPath = CRegex.GetText(defaultName, "\"(?<key>.*?)\"", 1);
该方法的详细内容如下:
代码
/// <summary>
/// 单个匹配内容
/// </summary>
/// <param name="sInput">输入内容</param>
/// <param name="sRegex">表达式字符串</param>
/// <param name="iGroupIndex">分组序号, 从1开始, 0不分组</param>
public static string GetText(string sInput, string sRegex, int iGroupIndex)
{
Regex re = new Regex(sRegex, RegexOptions.IgnoreCase | RegexOptions.IgnorePatternWhitespace | RegexOptions.Multiline);
Match mc = re.Match(sInput);
if (mc.Success)
{
if (iGroupIndex > 0)
return mc.Groups[iGroupIndex].Value;
else
return mc.Value;
}
else
return "";
}
/// 单个匹配内容
/// </summary>
/// <param name="sInput">输入内容</param>
/// <param name="sRegex">表达式字符串</param>
/// <param name="iGroupIndex">分组序号, 从1开始, 0不分组</param>
public static string GetText(string sInput, string sRegex, int iGroupIndex)
{
Regex re = new Regex(sRegex, RegexOptions.IgnoreCase | RegexOptions.IgnorePatternWhitespace | RegexOptions.Multiline);
Match mc = re.Match(sInput);
if (mc.Success)
{
if (iGroupIndex > 0)
return mc.Groups[iGroupIndex].Value;
else
return mc.Value;
}
else
return "";
}
引用自:伍华聪
没有目标的人都只在帮有目标的人完成目标