如何获取并设置自己的浏览器为默认浏览器
在.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();
}
其中我把注册表的访问,放到了一个独立的注册版访问类中进行处理了,其中包含了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;
}
另外代码中,为了获取到默认的浏览器文件名称,我通过正则表达式来获取内容,
我们看到,那个默认值是:"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
""
;
}
以上是一点关于设置默认浏览器的小技巧,留底,供娱乐,搏一声好,足矣!