Functions/GenXdev.Webbrowser/Get-DefaultWebbrowser.cs
|
// ################################################################################
// Part of PowerShell module : GenXdev.Webbrowser // Original cmdlet filename : Get-DefaultWebbrowser.cs // Original author : René Vaessen / GenXdev // Version : 3.26.2026 // ################################################################################ // Copyright (c) 2026 René Vaessen / GenXdev // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // ################################################################################ using System.Collections; using System.Management.Automation; using Microsoft.Win32; namespace GenXdev.Webbrowser { [System.ComponentModel.Description(@" .SYNOPSIS Returns the configured default web browser for the current user. .DESCRIPTION * Retrieves information about the system's default web browser by querying the Windows Registry. * Returns a hashtable containing the browser's name, description, icon path, and executable path. * The function checks both user preferences and system-wide browser registrations to determine the default browser. .EXAMPLE ```powershell Get-DefaultWebbrowser | Format-List ``` Get detailed information about the default browser. .EXAMPLE ```powershell $browser = Get-DefaultWebbrowser & $browser.Path https://www.github.com/ ``` Launch the default browser with a specific URL. ")] [Cmdlet(VerbsCommon.Get, "DefaultWebbrowser")] [OutputType(typeof(Hashtable))] public class GetDefaultWebbrowserCommand : PSGenXdevCmdlet { private string urlHandlerId; /// <summary> /// Begin processing - retrieve default browser URL handler configuration /// </summary> protected override void BeginProcessing() { // Define registry paths for url associations and browser information string urlAssocPath = @"SOFTWARE\Microsoft\Windows\Shell\Associations\UrlAssociations\https\UserChoice"; WriteVerbose("Retrieving default browser URL handler configuration"); // Get the default handler ID for HTTPS URLs from user preferences using (RegistryKey hkcu = RegistryKey.OpenBaseKey(RegistryHive.CurrentUser, RegistryView.Default)) { using (RegistryKey urlAssocKey = hkcu.OpenSubKey(urlAssocPath)) { if (urlAssocKey != null) { urlHandlerId = urlAssocKey.GetValue("ProgId") as string; } } } WriteVerbose($"URL handler ID: {urlHandlerId}"); } /// <summary> /// Process record - scan installed browsers and return default browser info /// </summary> protected override void ProcessRecord() { if (string.IsNullOrEmpty(urlHandlerId)) { return; } WriteVerbose("Scanning installed browsers in registry"); // Iterate through all registered browsers in the system using (RegistryKey browsersKey = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\WOW6432Node\Clients\StartMenuInternet")) { if (browsersKey == null) { return; } foreach (string browserName in browsersKey.GetSubKeyNames()) { using (RegistryKey browserRoot = browsersKey.OpenSubKey(browserName)) { if (browserRoot == null) { continue; } // Construct the full registry path for the current browser string browserRootPath = @"SOFTWARE\WOW6432Node\Clients\StartMenuInternet\" + browserName; // Verify browser has required registry keys for URL handling using (RegistryKey commandKey = browserRoot.OpenSubKey(@"shell\open\command")) { using (RegistryKey urlAssocKey = browserRoot.OpenSubKey(@"Capabilities\URLAssociations")) { if (commandKey == null || urlAssocKey == null) { continue; } // Get the HTTPS handler ID for this browser string browserHandler = urlAssocKey.GetValue("https") as string; // Check if this browser is the default handler if (browserHandler == urlHandlerId) { WriteVerbose($"Found default browser: {browserRootPath}"); // Get browser details using (RegistryKey capabilities = browserRoot.OpenSubKey("Capabilities")) { if (capabilities == null) { continue; } string name = capabilities.GetValue("ApplicationName") as string; string description = capabilities.GetValue("ApplicationDescription") as string; string icon = capabilities.GetValue("ApplicationIcon") as string; string path = (commandKey.GetValue(null) as string)?.Trim('"'); // Return browser details in a hashtable Hashtable result = new Hashtable { ["Name"] = name, ["Description"] = description, ["Icon"] = icon, ["Path"] = path }; WriteObject(result); return; } } } } } } } } /// <summary> /// End processing - no cleanup needed /// </summary> protected override void EndProcessing() { } } } |