2012-03-23 17 views
5

Makinemde (ve kullanıcı başına) yüklenen tüm web tarayıcılarını (ad, yürütülebilir, varsayılan evet/hayır) listelemek için yaygın yöntem/api var mı ve nasıl yapılır varsayılan web tarayıcısı hangisi olduğunu öğrenmek?Bir Windows makinesinde yüklü tüm web tarayıcılarını listeleme

Ve MSDN'deki How to find all the browsers installed on a machine: How to Register an Internet Browser or Email Client With the Windows Start Menu web tarayıcıları altında kendilerini kayıt gerektiğini bildiren HKLM\SOFTWARE\Clients\StartMenuInternet (ve HKCU)

gerçekten ortak/doğru bir yaklaşım mı

Ben bu soruyu gördük? (Ve evet, herhangi bir katı uygulama dışarıda mı?)


Amacım (varsayılan gösterir) kullanıcının makinesinde yüklü tüm web tarayıcıların bir listesini içeren bir açılır menü oluşturmak ve izin vermektir Kullanıcı, HTML dosyasını/URL'lerini mevcut harici web tarayıcısından biriyle tarayacak.

+1

Muhtemelen varsayılan tarayıcıyı alabilirsiniz .url dosyaları ve http/https urls, ancak pencerelerde hiçbir şey söylenmeyecek "bu uygulama bir tarayıcı "veya" bu uygulama bir tarayıcı katıştırır " –

+0

@David, Ben programcılar (yukarıda * uygulanmış olabilir *) sağlam bir cevap arıyorum. lütfen etiketlerini olduğu gibi bırakın. – kobik

+0

Pekala, sorunun özel programlama dilleriyle ne ilgisi olduğunu göremiyorum. Bilgilendirilmiş bir C# programcıdan haber almak istemediğinizi mi kastediyorsunuz? –

cevap

6

Bunu

procedure ListRegisteredBrowsers(List: TStrings); 
var 
    reg: TRegistry; 
    ki: TRegKeyInfo; 
    i: Integer; 
    keyname: string; 
    len: DWORD; 
begin 
    reg := TRegistry.Create; 
    try 
    reg.RootKey := HKEY_LOCAL_MACHINE; 
    if not Reg.KeyExists('\SOFTWARE\Clients\StartMenuInternet') then Exit; 
    if not Reg.OpenKey('\SOFTWARE\Clients\StartMenuInternet', false) then 
     raise Exception.Create('ListRegisteredBrowsers: Could not open registry key.'); 
    if not reg.GetKeyInfo(ki) then 
     raise Exception.Create('ListRegisteredBrowsers: Could not obtain registry key information.'); 
    List.Clear; 
    SetLength(keyname, len); 
    for i := 0 to ki.NumSubKeys - 1 do 
    begin 
     len := ki.MaxSubKeyLen + 1; 
     if RegEnumKeyEx(reg.CurrentKey, i, PChar(keyname), len, nil, nil, nil, nil) <> ERROR_SUCCESS then 
     RaiseLastOSError; 
     if reg.OpenKey('\SOFTWARE\Clients\StartMenuInternet\' + keyname, false) then 
     List.Add(reg.ReadString('')); 
     Reg.OpenKey('\SOFTWARE\Clients\StartMenuInternet', true); 
    end; 
    finally 
    reg.Free; 
    end; 
end; 

ve

function GetDefaultBrowser: string; 
var 
    reg: TRegistry; 
begin 
    result := ''; 
    reg := TRegistry.Create; 
    try 
    reg.RootKey := HKEY_CURRENT_USER; 
    if Reg.OpenKey('\SOFTWARE\Clients\StartMenuInternet', false) then 
     result := reg.ReadString('') 
    else 
    begin 
     reg.RootKey := HKEY_LOCAL_MACHINE; 
     if Reg.OpenKey('\SOFTWARE\Clients\StartMenuInternet', false) then 
     result := reg.ReadString('') 
    end; 
    reg.RootKey := HKEY_LOCAL_MACHINE; 
    if Reg.OpenKey('\SOFTWARE\Clients\StartMenuInternet\' + result, false) then 
     result := reg.ReadString(''); 
    finally 
    reg.Free; 
    end; 
end; 

Testi gibi bir şey yapabileceğini: işlemek için kurulan her ne dayalı

procedure TForm1.Button1Click(Sender: TObject); 
var 
    sl: TStringList; 
    i: Integer; 
    DefBrw: string; 
begin 
    DefBrw := GetDefaultBrowser; 
    sl := TStringList.Create; 
    try 
    ListRegisteredBrowsers(sl); 
    Memo1.Lines.BeginUpdate; 
    for i := 0 to sl.Count - 1 do 
     if SameText(sl[i], DefBrw) then 
     Memo1.Lines.Add(sl[i] + ' (Default)') 
     else 
     Memo1.Lines.Add(sl[i]); 
    Memo1.Lines.EndUpdate; 
    finally 
    sl.Free; 
    end; 
end; 
+0

Teşekkürler. Kodu henüz test edemiyorum. ama listelenen 'ListRegisteredBrowsers' 'HKCU' yok ve' GetDefaultBrowser''da 'HKCU' için öncelik verin. bu kararın herhangi bir sebebi var mı? – kobik

+1

Anlayışım, yüklü tarayıcıların listesinin yalnızca HKLM'de bulunduğudur. Hem HKLM hem de HKCU'da, varsayılan tarayıcıyı bulabilirsiniz (tabii ki - bu, kullanıcı başına bir ayardır). –

+0

Kodunuz gerçekten yardımcı oldu ve bana iyi bir başlangıç ​​noktası verdi. Çok teşekkürler :) – kobik

6

Bu yöntem, Başlat Menüsü İnternet Uygulamaları olarak kaydedilen tüm tarayıcıları bulur. Uygulamada, tüm büyük tarayıcılar kendilerini bu şekilde kaydettikleri için yeterli olacaktır. Bir tarayıcı kendisini Başlat Menüsü İnternet Uygulamaları olarak kaydetmeyi başaramazsa, Windows'un bunu fark edemediği ve bu tarayıcıyı kullanıcıya sunma şansı yoktur.

hepsini açıklıyor MSDN konu burada: http://msdn.microsoft.com/en-us/library/windows/desktop/dd203067.aspx

Windows XP ve Windows Vista'da Başlat menüsü varsayılan Internet (tarayıcı) ve E-posta (posta) istemcileri için ayrılmış yuvaları içeren, birlikte Genelde Başlat Menüsü İnternet Uygulamaları olarak bilinir. Başlat Menüsü İnternet Uygulamaları olarak kaydedilen uygulamalar, sistem genelinde (makine başına) bunu yapar. Windows Vista'da, kullanıcı, kullanıcı başına varsayılanlarını ayarlamak için Varsayılan Programlar özelliğini kullanabilir.

+0

Cevabınız için teşekkürler. İlk baştaki konudaki MSDN konusunu ekledim ve oldukça güvenilir bir şekilde görünüyor. Bunu uygulamada uyguladınız mı? – kobik

+3

@kobik Hayır, ancak tüm tarayıcılarım kayıt defterinde tam olarak açıklandığı gibi listeleniyor. Büyük çaplı AB davası sonrasında, tüm yaygın tarayıcıların ve muhtemelen ana akım olmayan tarayıcıların kendilerinin orada kayıt yaptığını söylemenin güvenli olduğunu düşünüyorum. –

İlgili konular