Есть ли способ проверить, какой браузер является основным на определенной машине в Windows 10? Как я могу найти эту информацию программно? Возможно, Powershell? Или питон? Спасибо за любые предложения.
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"
так далее ...
Дальнейшее чтение
- Индекс AZ командной строки Windows CMD
- Категоризованный список команд Windows CMD
- findstr - поиск строк в файлах.
- ftype - Показать или изменить ссылку между FileType и исполняемой программой.