AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Link mit ShellExecute aufrufen
Thema durchsuchen
Ansicht
Themen-Optionen

Link mit ShellExecute aufrufen

Ein Thema von wp_xxyyzz · begonnen am 1. Feb 2010 · letzter Beitrag vom 2. Feb 2010
Antwort Antwort
Seite 1 von 2  1 2      
wp_xxyyzz

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

Link mit ShellExecute aufrufen

  Alt 1. Feb 2010, 21:15
Ich möchte mit D7 auf Win2k folgendermaßen per ShellExecute eine Internetseite aufrufen:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  fn : string;
begin
  fn := 'http://www.delphipraxis.net/';
  ShellExecute(Handle, 'open', PChar(fn), '', '', SW_NORMAL);
end;
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?

[edit=SirThornberry]Code-Tags durch Delphi-Tags ersetzt - Mfg, SirThornberry[/edit]
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.201 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Link mit ShellExecute aufrufen

  Alt 1. Feb 2010, 21:22
Gib mal 0 als ersten Parameter an.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
wp_xxyyzz

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

Re: Link mit ShellExecute aufrufen

  Alt 1. Feb 2010, 21:59
Hilft nichts...
  Mit Zitat antworten Zitat
wp_xxyyzz

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

Re: Link mit ShellExecute aufrufen

  Alt 1. Feb 2010, 22:42
Ich habe meinen Code folgendermaßen erweitert:

Code:
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;
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.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.201 Beiträge
 
Delphi 10.4 Sydney
 
#5

Re: Link mit ShellExecute aufrufen

  Alt 1. Feb 2010, 22:45
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.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
wp_xxyyzz

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

Re: Link mit ShellExecute aufrufen

  Alt 1. Feb 2010, 22:57
Zone Alarm
  Mit Zitat antworten Zitat
-Phantom-

Registriert seit: 26. Nov 2009
Ort: Bockhorst
319 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: Link mit ShellExecute aufrufen

  Alt 2. Feb 2010, 00:37
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
Mathias Jansen
  Mit Zitat antworten Zitat
wp_xxyyzz

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

Re: Link mit ShellExecute aufrufen

  Alt 2. Feb 2010, 09:09
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.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.201 Beiträge
 
Delphi 10.4 Sydney
 
#9

Re: Link mit ShellExecute aufrufen

  Alt 2. Feb 2010, 09:12
Zitat von wp_xxyyzz:
Zone Alarm
Besorg dir eine vernünftige Firewall wie z.B. Sunbelt Personal Firewall. ZoneAlarm ist Schrott.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
wp_xxyyzz

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

Re: Link mit ShellExecute aufrufen

  Alt 2. Feb 2010, 20: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
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:33 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz