对于使用C#调用默认浏览器打开网页这个话题,网上资源一般都用的是Registry.ClassesRoot.OpenSubKey(@"http\shell\open\command\");
或者System.Diagnostics.Process.Start("explorer.exe", "...")
之类,但在实践过程中发现前者在Windows 10之后修改默认浏览器并不会修改注册表的这一字节而导致只会调用Microsoft Edge,后者更是有概率直接失效,所以需要换个办法。
思路是:
1、在新的注册表字段HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\Shell\Associations\URLAssociations\(http|https)\UserChoice
读取到默认浏览器,字段值一般为ChromeHTML
,MSEdgeHTM
之类。
2、通过读取到的默认浏览器字段去HKEY_CLASSES_ROOT\...\shell\open\command
获取浏览器path。
3、在此期间出错或是读取到null时使用旧方法,以兼容旧操作系统。
代码如下:
private static void OuterVisit(string url)
{
dynamic? kstr;
string s;
try
{
// 从注册表中读取默认浏览器可执行文件路径
RegistryKey? key2 = Registry.ClassesRoot.OpenSubKey(@"http\shell\open\command\");
RegistryKey? key = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Windows\Shell\Associations\UrlAssociations\http\UserChoice\");
if (key != null)
{
kstr = key.GetValue("ProgId");
if (kstr != null)
{
s = kstr.ToString();
// "ChromeHTML","MSEdgeHTM" etc.
if (Registry.GetValue(@"HKEY_CLASSES_ROOT\" + s + @"\shell\open\command", null, null) is string path)
{
var split = path.Split('"');
path = split.Length >= 2 ? split[1] : "";
if (path != "")
{
Process.Start(path, url);
return;
}
}
}
}
if (key2 != null)
{
kstr = key2.GetValue("");
if (kstr != null)
{
s = kstr.ToString();
var lastIndex = s.IndexOf(".exe", StringComparison.Ordinal);
if (lastIndex == -1)
{
lastIndex = s.IndexOf(".EXE", StringComparison.Ordinal);
}
var path = s.Substring(1, lastIndex + 3);
var result1 = Process.Start(path, url);
if (result1 == null)
{
var result2 = Process.Start("explorer.exe", url);
if (result2 == null)
{
Process.Start(url);
}
}
}
}
else
{
var result2 = Process.Start("explorer.exe", url);
if (result2 == null)
{
Process.Start(url);
}
}
}
catch
{
CommonTools.ShowMsgBox("调用浏览器失败。链接已经被复制到您的剪贴板,请手动操作。");
Clipboard.SetText(url);
}
}
引用:
1、如何获取chrome.exe路径(c#) - 爱码网 (likecs.com)
2、C#打开系统浏览器(默认浏览器,谷歌,火狐等…可以自行扩展)_Lingbug的博客-CSDN博客_c# 打开浏览器文章来源:https://www.toymoban.com/news/detail-549422.html
3、如何通过Windows 10上的注册表查找默认浏览器文章来源地址https://www.toymoban.com/news/detail-549422.html
到了这里,关于C# 在win10/win11调用默认浏览器打开网页的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!