Autor Beitrag
Hochhaus
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 662
Erhaltene Danke: 8

Windows 7
Delphi XE2
BeitragVerfasst: 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



BeitragVerfasst: 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


ausblenden volle Höhe 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:
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), //Major
              LoWord(dwFileVersionMS), //Minor
              HiWord(dwFileVersionLS), //Release
              LoWord(dwFileVersionLS)]); //Build
      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 Threadstarter
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 662
Erhaltene Danke: 8

Windows 7
Delphi XE2
BeitragVerfasst: Mo 06.01.14 17:08 
Danke ! Super ! Es funktioniert.


Hochhaus
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19272
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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... :shock:

Für diesen Beitrag haben gedankt: Hochhaus
hathor
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 06.01.14 18:03 
@jaenicke: Irrtum!

Der Browser, der zum Öffnen von HTML-Files genutzt wird, wird so gefunden:

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19272
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 632
Erhaltene Danke: 121

Win 7 32-bit
Delphi 2006/XE
BeitragVerfasst: 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



BeitragVerfasst: Do 09.01.14 11:04 
[HKEY_LOCAL_MACHINE\SOFTWARE\Clients\StartMenuInternet]
@="IEXPLORE.EXE"


[HKEY_CURRENT_USER\Software\Clients\StartMenuInternet]
@="FIREFOX.EXE"
Gerd Kayser
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 632
Erhaltene Danke: 121

Win 7 32-bit
Delphi 2006/XE
BeitragVerfasst: Do 09.01.14 18:14 
user profile iconhathor hat folgendes geschrieben Zum zitierten Posting springen:
@="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.