Announcement

Collapse
No announcement yet.

Browser mit ShellExecute starten und wieder schließen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Browser mit ShellExecute starten und wieder schließen

    Gruß und Bitte an alle Experten.

    Ich ruf aus dem Hauptprogramm den als Standard eingestellten
    Internet Browser mit einer bestimmten URL auf (mit function ExecuteApp).
    Von der Seite hole ich mir die Information, die ich brauche.
    Dann möchte ich den Browser wieder beenden und mein Programm soll die
    Info verarbeiten.
    Ablauf wäre also wie folgt (PSEUDO CODE)
    Get URL von Liste
    Call Browser mit URL
    Get Info von Webseite
    Close Browser
    Get Next URL von Liste, und so fort bis Ende der Liste
    Alles funktioniert bis auf: Close Browser

    Anschließend Testcode vom Aufruf des Browsers und den Versuchen
    ihn wieder zu schließen.
    Button3 funktioniert, aber ist für mich unbrauchbar: Ich weiß ja
    nicht, welchen Browser der User benutzt und habe daher auch
    keinen Window Titel für FindWindow verfügbar.

    Ich bitte um Hilfe:
    4 StundenSuche in Foren und googeln haben mir keine Lösung gebracht.
    -----------------------------------
    unit Unit3;

    interface

    uses
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
    Dialogs, StdCtrls, ShellApi;

    type

    TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    private
    { Private declarations }
    AppHandle: LongWord;
    function ExecuteApp(fn: string): LongWord;
    public
    { Public declarations }
    end;

    var
    Form1: TForm1;

    implementation

    {$R *.dfm}

    function TForm1.ExecuteApp(fn: string): LongWord;
    var
    SHELLEXECUTEINFO: TSHELLEXECUTEINFO;
    begin
    result:= 0;
    with SHELLEXECUTEINFO do begin
    cbSize:= SizeOf(SHELLEXECUTEINFO);
    fMask:= SEE_MASK_NOCLOSEPROCESS;
    Wnd:= Application.Handle;
    lpVerb:= 'Open';
    lpFile:= PChar(fn);
    lpParameters:= '';
    lpDirectory:= '';
    nShow:= SW_ShowNormal;
    hInstApp:= 0;
    end;

    ShellExecuteEx(@SHELLEXECUTEINFO);
    if (SHELLEXECUTEINFO.hInstApp > 32) then begin
    result := SHELLEXECUTEINFO.hProcess;
    // result := SHELLEXECUTEINFO.hInstApp; // geht auch nicht
    end;
    end;

    procedure TForm1.Button1Click(Sender: TObject);
    begin
    AppHandle := ExecuteApp('http://www.google.de');
    // Browser erscheint, aber AppHandle ist unbrauchbar
    end;

    { FUNKTIONIERT NICHT }
    procedure TForm1.Button2Click(Sender: TObject);
    begin
    PostMessage(AppHandle,WM_Close,0,0);
    end;

    { FUNKTIONIERT }
    procedure TForm1.Button3Click(Sender: TObject);
    begin
    AppHandle := FindWindow(nil,'Firefox PC-Welt-Edition');
    PostMessage(AppHandle,WM_Close,0,0);
    end;

    end.
    [/FONT]

  • #2
    Nimm doch TWebBrowser (Wrapper um IE) und start deine Anfrage damit "Embedded".

    Comment


    • #3
      Dank für Vorschlag, aber:

      TWebbrowser ist ein Wrapper um IE.
      Meine Anwendung soll aber auch mit Firefox und Opera laufen.

      Comment


      • #4
        Externe Komponente, welche nur die Seite mit ein bischen WinAPI lädt:
        http://www.tmssoftware.com/webdata.htm
        Müsste aber auch mit den Indy-Komponenten irgendwie gehen.
        Schöne Grüße, Mario

        Comment


        • #5
          Originally posted by Günter Mues View Post
          TWebbrowser ist ein Wrapper um IE.
          Meine Anwendung soll aber auch mit Firefox und Opera laufen.
          Na und? Der Kunde sieht doch nicht das du den IE nimmst. Und dieser ist immer auf jeden aktuellen Windows-PC vorhanden.

          Comment


          • #6
            Zunächst Dank für alle Antworten.

            @ Mario.Noak
            Die Komponente TWebData werde ich mir demnächst ansehen, scheint
            interessant zu sein
            ---------
            Nach langem Stöbern in der Windows SDK habe ich mein Problem jetzt
            für die gängigen Browser IE, Firefox und Opera mit den Funktionen
            GetWindow und GetClassName gelöst.

            Comment


            • #7
              Originally posted by Günter Mues View Post
              Nach langem Stöbern in der Windows SDK habe ich mein Problem jetzt
              für die gängigen Browser IE, Firefox und Opera mit den Funktionen
              GetWindow und GetClassName gelöst.
              Bedenke aber da dies interne Informationen sind das sich dies mit jeder Version von IE, Firefox, Opera ändern kann.

              Comment

              Working...
              X