1

Есть ли способ проверить, какой браузер является основным на определенной машине в Windows 10? Как я могу найти эту информацию программно? Возможно, Powershell? Или питон? Спасибо за любые предложения.

2 ответа2

0
reg query "HKCU\Software\Microsoft\Windows\Shell\Associations\UrlAssociations" -v Progid -s

из командной строки Windows должен вернуть (удобочитаемый для человека, например, FirefoxURL , ChromeHTML , IE.HTTP) значения Progid для большинства протоколов (в основном ftp , http , https и т. д.), например, следующим образом

==> reg query "HKCU\Software\Microsoft\Windows\Shell\Associations\UrlAssociations" -v Progid -s

HKEY_CURRENT_USER\Software\Microsoft\Windows\Shell\Associations\UrlAssociations\ftp\UserChoice
    ProgId    REG_SZ    ChromeHTML

HKEY_CURRENT_USER\Software\Microsoft\Windows\Shell\Associations\UrlAssociations\http\UserChoice
    ProgId    REG_SZ    ChromeHTML

HKEY_CURRENT_USER\Software\Microsoft\Windows\Shell\Associations\UrlAssociations\https\UserChoice
    ProgId    REG_SZ    ChromeHTML

HKEY_CURRENT_USER\Software\Microsoft\Windows\Shell\Associations\UrlAssociations\irc\UserChoice
    ProgId    REG_SZ    ChromeHTML

HKEY_CURRENT_USER\Software\Microsoft\Windows\Shell\Associations\UrlAssociations\mailto\UserChoice
    ProgId    REG_SZ    ChromeHTML

…

Обновлено: скрипт powershell - больше способов решения.

'### by …\Shell\Associations\UrlAssociations'
$ProgidHash = @{}
$RegPath = "HKCU:\Software\Microsoft\Windows\Shell\Associations\UrlAssociations"
Get-ChildItem "$RegPath\*\UserChoice\" -ErrorAction SilentlyContinue | 
    ForEach-Object { 
        $ProgidHash.Add( (get-item $_.PSParentPath).PSChildName, 
                         $_.GetValue('progId')) }
if ( $ProgidHash.Count -gt 0 ) {Write-Output $ProgidHash}

'### by URL protocol (incomplete list)'
$ProtoHash = @{}
$RegPathCU = 'HKCU:\Software\Classes'
$regPathLM = 'HKLM:\SOFTWARE\Classes'
'ftp', 'http', 'https', 'mailto', 'ms-mail', 'news' | 
    ForEach-Object {
        if       ( Test-Path "$RegPathCU\$_\shell\open\command" ) {
            $ProtoHash.Add( "$_", 
            ('HKCU', ('"' + $((Get-Item "$RegPathCU\$_\shell\open\command").GetValue('') | 
                Split-Path -Leaf))))
        } elseif ( Test-Path "$RegPathLM\$_\shell\open\command" ) {
            $ProtoHash.Add( "$_", 
            ('HKLM', ('"' + $((Get-Item "$RegPathLM\$_\shell\open\command").GetValue('') | 
                Split-Path -Leaf))))
        } else {
            $ProtoHash.Add( "$_", ('none', [string]::Empty))
        }
    }
if ( $ProtoHash.Count -gt 0) { Write-Output $ProtoHash }

'### by file extension (incomplete list)'
$ExtenHash = @{}
$RegPathCU = 'HKCU:\Software\Classes'
$regPathLM = 'HKLM:\SOFTWARE\Classes'
'.htm', '.html', '.shtml', '.xhtml', '.xml' | 
    ForEach-Object {
        if       ( Test-Path -LiteralPath "$RegPathCU\$_" ) {
            $aux = (Get-Item "$RegPathCU\$_").GetValue('')
            $ExtenHash.Add( "$_", 
            ('HKCU', $aux, ('"' +  $((Get-Item "$RegPathLM\$aux\shell\open\command").GetValue('') | 
                Split-Path -Leaf))))

        } elseif ( Test-Path -LiteralPath "$RegPathLM\$_" ) {
            $aux = (Get-Item "$RegPathLM\$_").GetValue('')
            $ExtenHash.Add( "$_", 
            ('HKLM', $aux, ('"' + $((Get-Item "$RegPathLM\$aux\shell\open\command").GetValue('') | 
                Split-Path -Leaf))))
        } else {
            $ExtenHash.Add( "$_", ('none', 'none', [string]::Empty))
        }
    }
if ( $ExtenHash.Count -gt 0) { $ExtenHash }

'### TODO: by mime type'

Пример вывода (частично усеченный):

PS D:\PShell> D:\PShell\SU\1268295.ps1
### by …\Shell\Associations\UrlAssociations

Name                           Value                                               
----                           -----                                               
urn                            ChromeHTML                                          
news                           ChromeHTML                                          
http                           ChromeHTML                                          
mms                            ChromeHTML                                          
nntp                           ChromeHTML                                          
ftp                            ChromeHTML                                          
mailto                         ChromeHTML                                          
https                          ChromeHTML                                          
smsto                          ChromeHTML                                          
sms                            ChromeHTML                                          
### by URL protocol (incomplete list)
http                           {HKCU, "chrome.exe" -- "%1"}                        
ftp                            {HKCU, "chrome.exe" -- "%1"}                        
news                           {none, }                                            
mailto                         {HKCU, "chrome.exe" -- "%1"}                        
https                          {HKCU, "chrome.exe" -- "%1"}                        
ms-mail                        {none, }                                            
### by file extension (incomplete list)
.xhtml                         {HKCU, ChromeHTML, "chrome.exe" -- "%1"}            
.html                          {HKCU, ChromeHTML, "chrome.exe" -- "%1"}            
.htm                           {HKCU, ChromeHTML, "chrome.exe" -- "%1"}            
.shtml                         {HKCU, ChromeHTML, "chrome.exe" -- "%1"}            
.xml                           {HKLM, xmlfile, "iexplore.exe" %1}                  
### TODO: by mime type

Обновление 2 - вывод после установки Firefox умолчанию:

PS D:\PShell> D:\PShell\SU\1268295.ps1
### by …\Shell\Associations\UrlAssociations

Name                           Value                                               
----                           -----                                               
urn                            ChromeHTML                                          
news                           ChromeHTML                                          
http                           FirefoxURL-308046B0AF4A39CB                         
mms                            ChromeHTML                                          
nntp                           ChromeHTML                                          
ftp                            FirefoxURL-308046B0AF4A39CB                         
mailto                         ChromeHTML                                          
https                          FirefoxURL-308046B0AF4A39CB                         
smsto                          ChromeHTML                                          
sms                            ChromeHTML                                          
### by URL protocol (incomplete list)
http                           {HKCU, "firefox.exe" -osint -url "%1"}              
ftp                            {HKCU, "firefox.exe" -osint -url "%1"}              
news                           {none, }                                            
mailto                         {HKCU, "chrome.exe" -- "%1"}                        
https                          {HKCU, "firefox.exe" -osint -url "%1"}              
ms-mail                        {none, }                                            
### by file extension (incomplete list)
.xhtml                         {HKCU, FirefoxHTML-308046B0AF4A39CB, "firefox.exe...
.html                          {HKCU, FirefoxHTML-308046B0AF4A39CB, "firefox.exe...
.htm                           {HKCU, FirefoxHTML-308046B0AF4A39CB, "firefox.exe...
.shtml                         {HKCU, FirefoxHTML-308046B0AF4A39CB, "firefox.exe...
.xml                           {HKLM, xmlfile, "iexplore.exe" %1}                  
### TODO: by mime type
0

Есть ли способ проверить, какой браузер является основным на конкретной машине?

Основной браузер может отличаться в зависимости от того, на какой протокол вы ссылаетесь.

Вы можете использовать ftype в оболочке cmd для проверки различных протоколов.

Примеры:

> ftype | findstr http
http="C:\apps\Firefox\firefox.exe" -osint -url "%1"
https="C:\apps\Firefox\firefox.exe" -osint -url "%1"

> ftype | findstr ftp
ftp="C:\apps\Firefox\firefox.exe" -osint -url "%1"

так далее ...


Дальнейшее чтение

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .