diff --git a/Internet/Browser.cs b/Internet/Browser.cs index 664e475..598a79f 100644 --- a/Internet/Browser.cs +++ b/Internet/Browser.cs @@ -1,38 +1,81 @@ -using System.Collections.Generic; -using Microsoft.Win32; +using Microsoft.Win32; +using System; +using System.Collections.Generic; +using System.Diagnostics; namespace Common.Internet { public class Browser { + public string Key { get; private set; } public string Name { get; private set; } public string Command { get; private set; } public string DefaultIcon { get; private set; } + public bool SupportsPrivate() + { + return false; + } + public override string ToString() { return Name; } + public bool OpenLink(string url, bool privateMode) + { + // Don't bother with empty links + if (String.IsNullOrEmpty(url)) + return true; + + // Add quotes around the URL for safety + url = string.Format("\"{0}\"", url); + + if (privateMode) + url += " -incognito"; + + // Start the browser + Process.Start(Command, url); + + return true; + } + public static Dictionary DetectInstalledBrowsers() { var browsers = new Dictionary(); - RegistryKey browserKeys = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Clients\StartMenuInternet"); + var browserKeys = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Clients\StartMenuInternet"); + if (browserKeys == null) - browserKeys = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\WOW6432Node\Clients\StartMenuInternet"); + browserKeys = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\WOW6432Node\Clients\StartMenuInternet"); - string[] browserNames = browserKeys.GetSubKeyNames(); + if (browserKeys == null) + return browsers; - foreach (string browserName in browserNames) + var browserNames = browserKeys.GetSubKeyNames(); + + foreach (var browserName in browserNames) { - Browser browser = new Browser(); - RegistryKey browserKey = browserKeys.OpenSubKey(browserName); - browser.Name = (string) browserKey.GetValue(null); - RegistryKey browserKeyPath = browserKey.OpenSubKey(@"shell\open\command"); - browser.Command = (string) browserKeyPath.GetValue(null); - RegistryKey browserIconPath = browserKey.OpenSubKey(@"DefaultIcon"); - browser.DefaultIcon = (string) browserIconPath.GetValue(null); + var browserKey = browserKeys.OpenSubKey(browserName); + + if (browserKey == null) + continue; + + var browserKeyPath = browserKey.OpenSubKey(@"shell\open\command"); + + if (browserKeyPath == null) + continue; + + var browserIconPath = browserKey.OpenSubKey(@"DefaultIcon"); + + var browser = new Browser + { + Key = browserName, + Name = (string) browserKey.GetValue(null), + Command = (string) browserKeyPath.GetValue(null), + DefaultIcon = browserIconPath == null ? null : (string) browserIconPath.GetValue(null) + }; + browsers.Add(browserName, browser); } diff --git a/packages.config b/packages.config index 08bf466..39fedfa 100644 --- a/packages.config +++ b/packages.config @@ -1,5 +1,5 @@  - + \ No newline at end of file