![]() |
Link mit ShellExecute aufrufen
Ich möchte mit D7 auf Win2k folgendermaßen per ShellExecute eine Internetseite aufrufen:
Delphi-Quellcode:
Beim Starten meldet sich, verständlicherweise, die Firewall, dass mein Programm ins Internet möchte. Wenn ich mich verklicke und dies verbiete, läuft mein Programm auf den ersten Blick normal weiter, ich kann es aber nicht mehr schließen. Wie kann man das verhindern?
procedure TForm1.Button1Click(Sender: TObject);
var fn : string; begin fn := 'http://www.delphipraxis.net/'; ShellExecute(Handle, 'open', PChar(fn), '', '', SW_NORMAL); end; [edit=SirThornberry]Code-Tags durch Delphi-Tags ersetzt - Mfg, SirThornberry[/edit] |
Re: Link mit ShellExecute aufrufen
Gib mal 0 als ersten Parameter an.
|
Re: Link mit ShellExecute aufrufen
Hilft nichts...
|
Re: Link mit ShellExecute aufrufen
Ich habe meinen Code folgendermaßen erweitert:
Code:
Wenn ich der Firewall den Internet-Zugang erlaube, erscheint nach dem ShellExecute wie erwartet eine Meldung. Wenn ich den Internet-Zugang aber verbiete, hängt die Routine im ShellExecute-Aufruf, die Meldung erscheint gar nicht. Das Programm kann aber im wesentlichen noch bedient werden (bis auf das Schließen und Navigation per Tab). Offenbar kriegt ShellExecute davon nichts mit, dass der Internet-Zugang nicht möglich ist, und versucht weiterhin, ins Netz zu kommen.
procedure TForm1.Button1Click(Sender: TObject);
var fn : string; res : integer; begin fn := 'http://www.delphipraxis.net/'; res := ShellExecute(0, 'open', PChar(fn), '', '', SW_NORMAL); ShowMessage(Format('ShellExecute = %d', [res])); end; |
Re: Link mit ShellExecute aufrufen
Welche Firewall hast du denn? Es gibt da ein paar absolute Schrottige die an allen möglichen Ecken und Ende mehr Fehler aus Features aufweisen.
|
Re: Link mit ShellExecute aufrufen
Zone Alarm
|
Re: Link mit ShellExecute aufrufen
Guck doch mal ob es läuft wenn du die Firewall aus hast?
Hier hab ich auch noch ein Beispiel zum aufrufen von Internetseite mit Shellexecute ;D
Delphi-Quellcode:
__________________________________________________ __________uses shellapi; Var denkdirwasaus: String; begin denkdirwasaus := 'www.google.de'; shellExecute(0, Nil, PChar(denkdirwasaus), Pchar('-Parameter'), Pchar('C:\StartDir'), SW_NORMAL); end; Gruß Mathias |
Re: Link mit ShellExecute aufrufen
Wenn die Firewall aus ist, dann kann ich auch nicht dem Programm den Internet-Zugang verweigern, und das Problem kann dann natürlich nicht auftreten.
|
Re: Link mit ShellExecute aufrufen
Zitat:
![]() |
Re: Link mit ShellExecute aufrufen
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:
Um den Default-Browser zu suchen, verwende ich eine Routine nach
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; ![]()
Delphi-Quellcode:
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?
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; Oder statt einer Hilfsdatei: Gibt es eine HTML-Datei, die in jedem Windowssystem vorkommt, um sie für FindExecutable verwenden zu können? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:15 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz