Autor |
Beitrag |
Hochhaus
Beiträge: 662
Erhaltene Danke: 8
Windows 7
Delphi XE2
|
Verfasst: Mo 06.01.14 00:48
Hallo allerseits !
wie findet man mit Delphi heraus, welches der Standardbrowser ist, der auf dem System installiert wurde - und welche Version es ist ? Ich finde nur Code, der sich auf den Internet-Explorer bezieht (mit Google).
Danke im Voraus für jede Antwort !
Hochhaus
|
|
hathor
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mo 06.01.14 10:26
edn.embarcadero.com/article/26083
Sourcecode etwas geändert...
Ergebnis:
Name: firefox.exe
Path: C:\Program Files (x86)\Mozilla Firefox\
Version: 25.0.1 Build 5064
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87:
| uses ...ShellApi,...
Procedure MM(s: String); begin Form1.Memo1.lines.add(s); end;
function FileVersion(const FileName: TFileName): String; var VerInfoSize: Cardinal; VerValueSize: Cardinal; Dummy: Cardinal; PVerInfo: Pointer; PVerValue: PVSFixedFileInfo; iLastError: DWord; begin Result := ''; VerInfoSize := GetFileVersionInfoSize(PChar(FileName), Dummy); if VerInfoSize > 0 then begin GetMem(PVerInfo, VerInfoSize); try if GetFileVersionInfo(PChar(FileName), 0, VerInfoSize, PVerInfo) then begin if VerQueryValue(PVerInfo, '\', Pointer(PVerValue), VerValueSize) then with PVerValue^ do Result := Format('%d.%d.%d Build %d', [ HiWord(dwFileVersionMS), LoWord(dwFileVersionMS), HiWord(dwFileVersionLS), LoWord(dwFileVersionLS)]); end else begin iLastError := GetLastError; Result := Format('GetFileVersionInfo failed: (%d) %s', [iLastError, SysErrorMessage(iLastError)]); end; finally FreeMem(PVerInfo, VerInfoSize); end; end else begin iLastError := GetLastError; Result := Format('GetFileVersionInfo failed: (%d) %s', [iLastError, SysErrorMessage(iLastError)]); end; end;
type TBrowserInformation = record Name: string; Path: string; Version: string; end;
function GetDefaultBrowser2 : TBrowserInformation; var tmp : PChar; res : PChar; version : String;
begin tmp := StrAlloc(255); res := StrAlloc(255);
try GetTempPath(255,tmp); FileCreate(tmp+'htmpl.htm'); FindExecutable('htmpl.htm',tmp,Res); Result.Name := ExtractFileName(res); Result.Path := ExtractFilePath(res); Result.Version := FileVersion(res); SysUtils.DeleteFile(tmp+'htmpl.htm'); finally StrDispose(tmp); StrDispose(res); end; end;
procedure TForm1.FormCreate(Sender: TObject); begin MM('Name: '+GetDefaultBrowser2.Name); MM('Path: '+GetDefaultBrowser2.Path); MM('Version: '+GetDefaultBrowser2.Version); end; |
Für diesen Beitrag haben gedankt: Hochhaus
|
|
Hochhaus
Beiträge: 662
Erhaltene Danke: 8
Windows 7
Delphi XE2
|
Verfasst: Mo 06.01.14 17:08
Danke ! Super ! Es funktioniert.
Hochhaus
|
|
jaenicke
Beiträge: 19285
Erhaltene Danke: 1743
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 06.01.14 17:54
Wobei es eigentlich so nicht korrekt ist. Denn das ist nicht der Standardbrowser, sondern der Browser, mit dem .htm Dateien standardmäßig geöffnet werden.
Korrekterweise müsste man den Browser ermitteln, der mit dem HTTP-Protokoll verknüpft ist, wie es auch Windows selbst macht.
Außerdem überkommt mich das blanke Grausen, wenn ich sehe, dass da extra eine temporäre Datei erstellt wird, nur weil es der Autor des Artikels nicht besser konnte...
Für diesen Beitrag haben gedankt: Hochhaus
|
|
hathor
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mo 06.01.14 18:03
@jaenicke: Irrtum!
Der Browser, der zum Öffnen von HTML-Files genutzt wird, wird so gefunden:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24:
| uses Registry...
procedure TForm1.Button13Click(Sender: TObject); var Reg: TRegistry; KeyName: string; ValueStr: string; begin Reg := TRegistry.Create(KEY_READ); try Reg.RootKey := HKEY_CLASSES_ROOT; KeyName := 'htmlfile\shell\open\command'; if Reg.OpenKey(KeyName, False) then begin ValueStr := Reg.ReadString(''); Reg.CloseKey; ShowMessage(ValueStr); end else ShowMessage('There isn''t a default browser'); finally Reg.Free; end; end; |
Für diesen Beitrag haben gedankt: Hochhaus
|
|
jaenicke
Beiträge: 19285
Erhaltene Danke: 1743
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 06.01.14 21:18
Du kannst aber auch problemlos einen Browser als Standardbrowser nehmen und einen anderen mit htm-Dateien und noch einen anderen mit html-Dateien verknüpfen...
Das ganze Gedöns mit den Dateierweiterungen hat rein und absolut überhaupt nichts mit dem Standardbrowser zu tun. Er ist nur meistens der gleiche... aber das ist nicht so festgelegt, sondern einfach nur meistens so eingestellt...
Für diesen Beitrag haben gedankt: Hochhaus
|
|
Gerd Kayser
Beiträge: 632
Erhaltene Danke: 121
Win 7 32-bit
Delphi 2006/XE
|
Verfasst: Do 09.01.14 09:02
Der Standardbrowser ist in der Registry unter \Software\Clients\StartMenuInternet aufgeführt. Ausgewertet wird zuerst der Eintrag unter HKey_Current_User und danach erst ggf. unter HKey_Local_Machine.
Quelle: msdn.microsoft.com/e...203067(v=vs.85).aspx
|
|
hathor
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Do 09.01.14 11:04
[HKEY_LOCAL_MACHINE\SOFTWARE\Clients\StartMenuInternet]
@="IEXPLORE.EXE"
[HKEY_CURRENT_USER\Software\Clients\StartMenuInternet]
@="FIREFOX.EXE"
|
|
Gerd Kayser
Beiträge: 632
Erhaltene Danke: 121
Win 7 32-bit
Delphi 2006/XE
|
Verfasst: Do 09.01.14 18:14
hathor hat folgendes geschrieben : | @="IEXPLORE.EXE"
@="FIREFOX.EXE" |
Das ist kein Widerspruch zu meiner Aussage. Firefox ist hier der Standardbrowser. Erst wenn der Eintrag unter HKey_Current_User fehlt oder leer ist, wird der Schlüssel unter HKey_Local_Machine genommen.
|
|