1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > C# 在win10/win11调用默认浏览器打开网页

C# 在win10/win11调用默认浏览器打开网页

时间:2024-07-13 18:09:01

相关推荐

C# 在win10/win11调用默认浏览器打开网页

对于使用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#) - 爱码网 ()

2、C#打开系统浏览器(默认浏览器,谷歌,火狐等…可以自行扩展)_Lingbug的博客-CSDN博客_c# 打开浏览器

3、如何通过Windows 10上的注册表查找默认浏览器

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。