Ste*_*ris 45
当Internet Explorer设置为默认浏览器时,当前接受的答案对我不起作用.在我的Windows 7 PC上HKEY_CLASSES_ROOT\http\shell\open\command,IE没有更新.这背后的原因可能是从Windows Vista开始引入的默认程序处理方式的变化.
您可以在注册表项中找到默认选择的浏览器 Software\Microsoft\Windows\Shell\Associations\UrlAssociations\http\UserChoice,并带有值Progid.(感谢Broken Pixels)
const string userChoice = @"Software\Microsoft\Windows\Shell\Associations\UrlAssociations\http\UserChoice";
string progId;
BrowserApplication browser;
using ( RegistryKey userChoiceKey = Registry.CurrentUser.OpenSubKey( userChoice ) )
{
if ( userChoiceKey == null )
{
browser = BrowserApplication.Unknown;
break;
}
object progIdValue = userChoiceKey.GetValue( "Progid" );
if ( progIdValue == null )
{
browser = BrowserApplication.Unknown;
break;
}
progId = progIdValue.ToString();
switch ( progId )
{
case "IE.HTTP":
browser = BrowserApplication.InternetExplorer;
break;
case "FirefoxURL":
browser = BrowserApplication.Firefox;
break;
case "ChromeHTML":
browser = BrowserApplication.Chrome;
break;
case "OperaStable":
browser = BrowserApplication.Opera;
break;
case "SafariHTML":
browser = BrowserApplication.Safari;
break;
case "AppXq0fevzme2pys62n3e0fbqa7peapykr8v":
browser = BrowserApplication.Edge;
break;
default:
browser = BrowserApplication.Unknown;
break;
}
}
Run Code Online (Sandbox Code Playgroud)
如果您还需要浏览器可执行文件的路径,您可以按如下方式访问它,使用Progid从中检索它ClassesRoot.
const string exeSuffix = ".exe";
string path = progId + @"\shell\open\command";
FileInfo browserPath;
using ( RegistryKey pathKey = Registry.ClassesRoot.OpenSubKey( path ) )
{
if ( pathKey == null )
{
return;
}
// Trim parameters.
try
{
path = pathKey.GetValue( null ).ToString().ToLower().Replace( "\"", "" );
if ( !path.EndsWith( exeSuffix ) )
{
path = path.Substring( 0, path.LastIndexOf( exeSuffix, StringComparison.Ordinal ) + exeSuffix.Length );
browserPath = new FileInfo( path );
}
}
catch
{
// Assume the registry value is set incorrectly, or some funky browser is used which currently is unknown.
}
}
Run Code Online (Sandbox Code Playgroud)
Mar*_*num 22
你可以在这里看一个例子,但主要可以这样做:
internal string GetSystemDefaultBrowser()
{
string name = string.Empty;
RegistryKey regKey = null;
try
{
//set the registry key we want to open
regKey = Registry.ClassesRoot.OpenSubKey("HTTP\\shell\\open\\command", false);
//get rid of the enclosing quotes
name = regKey.GetValue(null).ToString().ToLower().Replace("" + (char)34, "");
//check to see if the value ends with .exe (this way we can remove any command line arguments)
if (!name.EndsWith("exe"))
//get rid of all command line arguments (anything after the .exe must go)
name = name.Substring(0, name.LastIndexOf(".exe") + 4);
}
catch (Exception ex)
{
name = string.Format("ERROR: An exception of type: {0} occurred in method: {1} in the following module: {2}", ex.GetType(), ex.TargetSite, this.GetType());
}
finally
{
//check and see if the key is still open, if so
//then close it
if (regKey != null)
regKey.Close();
}
//return the value
return name;
}
Run Code Online (Sandbox Code Playgroud)
小智 10
我刚刚为此做了一个函数:
public void launchBrowser(string url)
{
string browserName = "iexplore.exe";
using (RegistryKey userChoiceKey = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Windows\Shell\Associations\UrlAssociations\http\UserChoice"))
{
if (userChoiceKey != null)
{
object progIdValue = userChoiceKey.GetValue("Progid");
if (progIdValue != null)
{
if(progIdValue.ToString().ToLower().Contains("chrome"))
browserName = "chrome.exe";
else if(progIdValue.ToString().ToLower().Contains("firefox"))
browserName = "firefox.exe";
else if (progIdValue.ToString().ToLower().Contains("safari"))
browserName = "safari.exe";
else if (progIdValue.ToString().ToLower().Contains("opera"))
browserName = "opera.exe";
}
}
}
Process.Start(new ProcessStartInfo(browserName, url));
}
Run Code Online (Sandbox Code Playgroud)
小智 6
这已经过时了,但我只会添加我自己的发现供其他人使用。的值HKEY_CURRENT_USER\Software\Clients\StartMenuInternet应该为您提供此用户的默认浏览器名称。
如果要枚举所有已安装的浏览器,请使用
HKEY_LOCAL_MACHINE\SOFTWARE\Clients\StartMenuInternet
您可以使用找到的名称HKEY_CURRENT_USER来标识默认浏览器HKEY_LOCAL_MACHINE,然后以这种方式找到路径。
小智 5
视窗10
internal string GetSystemDefaultBrowser()
{
string name = string.Empty;
RegistryKey regKey = null;
try
{
var regDefault = Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\FileExts\\.htm\\UserChoice", false);
var stringDefault = regDefault.GetValue("ProgId");
regKey = Registry.ClassesRoot.OpenSubKey(stringDefault + "\\shell\\open\\command", false);
name = regKey.GetValue(null).ToString().ToLower().Replace("" + (char)34, "");
if (!name.EndsWith("exe"))
name = name.Substring(0, name.LastIndexOf(".exe") + 4);
}
catch (Exception ex)
{
name = string.Format("ERROR: An exception of type: {0} occurred in method: {1} in the following module: {2}", ex.GetType(), ex.TargetSite, this.GetType());
}
finally
{
if (regKey != null)
regKey.Close();
}
return name;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
21285 次 |
| 最近记录: |