Einzelnen Beitrag anzeigen

wp_xxyyzz

Registriert seit: 2. Okt 2006
23 Beiträge
 
#10

Re: Link mit ShellExecute aufrufen

  Alt 2. Feb 2010, 19:25
Ich habe nun eine Lösung gefunden: Man muss die Anwendung, die die URL öffnen soll, explizit im ShellExecute-Aufruf eintragen. Da die Firewall diese Anwendung in der Regel ja kennt, wird überhaupt nicht danach gefragt, ob der Netzzugriff erlaubt werden soll oder nicht.

Delphi-Quellcode:
uses
  ShellApi;

procedure TForm1.Button1Click(Sender: TObject);
var
  fn, browser : string;
begin
  fn := 'http://www.delphipraxis.net/';
  browser := GetDefaultBrowser; // siehe unten!
  ShellExecute(0, 'open', PChar(browser), PChar(fn), '', SW_NORMAL);
end;
Um den Default-Browser zu suchen, verwende ich eine Routine nach http://edn.embarcadero.com/article/26083:

Delphi-Quellcode:
function GetDefaultBrowser: string;
var
  tmp: PChar;
  res: LPTSTR;
begin
  result := '';
  tmp := StrAlloc(255);
  res := StrAlloc(255);
  try
    GetTempPath(255, tmp);
    if FileCreate(tmp + 'htmpl.htm') <> -1 then
    begin
      if FindExecutable('htmpl.htm', tmp, res) > 32 then
        result := res;
      SysUtils.DeleteFile(tmp + 'htmpl.htm');
    end;
  finally
    StrDispose(tmp);
    StrDispose(res);
  end;
end;
Etwas stört mich, dass die Temporärdatei "htmpl.htm" nach dem Beenden des Programms noch vorhanden ist. Diese Datei wurde erzeugt, da die Windows-Funktion FindExecutable eine existierende Datei benötigt, um das mit der Endung .htm verknüpfte Programm zu finden. Warum wird diese Datei nicht gelöscht, obwohl DeleteFile aufgerufen wird?

Oder statt einer Hilfsdatei: Gibt es eine HTML-Datei, die in jedem Windowssystem vorkommt, um sie für FindExecutable verwenden zu können?
  Mit Zitat antworten Zitat