Files
2025-11-11 11:03:42 +01:00

145 lines
4.5 KiB
C#

using C4IT.Logging;
using Microsoft.Win32;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using static C4IT.Logging.cLogManager;
namespace FasdDesktopUi.Basics
{
public class cBrowsers
{
List<cBrowser> browsers { get; set; }
public cBrowsers()
{
this.browsers = GetBrowsers();
}
private List<cBrowser> GetBrowsers()
{
List<cBrowser> browsers = new List<cBrowser>();
try
{
RegistryKey browserKeys;
browserKeys = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\WOW6432Node\Clients\StartMenuInternet");
if (browserKeys is null)
browserKeys = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Clients\StartMenuInternet");
string[] browserNames = browserKeys.GetSubKeyNames();
foreach (string browserName in browserNames)
{
try
{
cBrowser browser = new cBrowser();
RegistryKey browserKey = browserKeys.OpenSubKey(browserName);
browser.Name = (string)browserKey.GetValue(null);
RegistryKey browserKeyPath = browserKey.OpenSubKey(@"shell\open\command");
browser.Path = browserKeyPath.GetValue(null).ToString().StripQuotes();
if (File.Exists(browser.Path))
{
browsers.Add(browser);
if (browser.Path != null)
try
{
browser.Version = FileVersionInfo.GetVersionInfo(browser.Path).FileVersion;
}
catch
{
browser.Version = "unknown";
}
else
browser.Version = "unknown";
}
}
catch (Exception E)
{
LogException(E);
}
}
}
catch (Exception E)
{
LogException(E);
}
return browsers;
}
public cBrowser GetBrowserByName(string browserName)
{
foreach (cBrowser browser in this.browsers)
{
if (browser.Name.Equals(browserName, StringComparison.InvariantCultureIgnoreCase))
return browser;
}
return new cBrowser("Internet Explorer", "iexplorer.exe");
}
public void Start(string browserName, string Url)
{
try
{
if (browserName is null || browserName.ToLowerInvariant() == "default")
{
Process.Start(Url);
}
else
{
Url = "--single-argument " + Url;
var browser = GetBrowserByName(browserName);
if (!string.IsNullOrEmpty(browser.Path))
Process.Start(browser.Path, Url);
else
Process.Start(Url);
}
}
catch (Exception E)
{
LogException(E);
}
}
}
public class cBrowser
{
public string Name { get; set; }
public string Path { get; set; }
public string Version { get; set; }
public cBrowser(string name = "", string path = "", string version = "")
{
Name = name;
Path = path;
Version = version;
}
}
internal static class Extensions
{
///
/// if string begins and ends with quotes, they are removed
///
internal static String StripQuotes(this String s)
{
if (s.EndsWith("\"") && s.StartsWith("\""))
{
return s.Substring(1, s.Length - 2);
}
else
{
return s;
}
}
}
}