Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi iexplorer starten und beenden (https://www.delphipraxis.net/147241-iexplorer-starten-und-beenden.html)

Bomberbb 4. Feb 2010 11:26


iexplorer starten und beenden
 
Hallo,
ich habe ein kleines Problem. Ich möchte den ie nutzen um Radio zu hören. Da ich Ihn aber nicht in der Taskleiste sehen will
rufe ich ihn per Createprocess auf. Der folgende Code funktioniert schon ganz gut. Allerdings mit einer Ausnahme:
SendMessageTimeout bewirkt kein beenden des Prgramms. Mache ich was falsch, oder liegt das am ie???

Gruß

BBB


Delphi-Quellcode:
Procedure TfrmKeyMakro.pmiRadioClick(Sender: TObject);
Var
  si                              : TStartUpInfo;
  DWResult                        :Dword;
Begin { Process_Cmd }
  If fPi.hProcess = INVALID_HANDLE_VALUE Then
  Begin
    FillChar(si, SizeOf(StartupInfo), #0);
    si.cb := SizeOf(StartupInfo);
    si.dwFlags := STARTF_USESHOWWINDOW;
    si.wShowWindow := SW_HIDE;

    If CreateProcess(Nil, '"C:\Programme\Internet Explorer\iexplore.exe" "http://edge.download.newmedia.nacamar.net/freestream/download/radiohochstift/frameset.html"'
      , Nil, Nil, False, 0, Nil, Nil, si, fPi) Then
    Begin
      pmiRadio.Caption := 'Radio beenden';
    End;
  End
  Else
  Begin
    SendMessageTimeout(fPi.hProcess, WM_CLOSE, 0, 0, SMTO_ABORTIFHUNG Or SMTO_NORMAL, 5000, DWResult);
    If isWindow(fPi.hProcess) Then
      TerminateProcess(fPi.hProcess, Cardinal(-1));
    fPi.hProcess := INVALID_HANDLE_VALUE;
    pmiRadio.Caption := 'Radio starten';
  End;
End;

DeddyH 4. Feb 2010 12:01

Re: iexplorer starten und beenden
 
SendMessageTimeOut erwartet ein Fensterhandle und kein Prozesshandle.

Bernhard Geyer 4. Feb 2010 12:17

Re: iexplorer starten und beenden
 
Nimm doch den TWebBrowser und zeite das Fenster nicht an. Du mußt aber mit HandleNeeded eine gültigen Fensterhandle für dein verstecktes Formular sorgen da sonst der IE nicht funktioniert.

Bomberbb 4. Feb 2010 12:19

Re: iexplorer starten und beenden
 
kann ich denn aus dem Prozesshandle das Fensterhandle ermitteln?

Bernhard Geyer 4. Feb 2010 12:21

Re: iexplorer starten und beenden
 
Zitat:

Zitat von Bomberbb
kann ich denn aus dem Prozesshandle das Fensterhandle ermitteln?

Ja

DeddyH 4. Feb 2010 12:22

Re: iexplorer starten und beenden
 
Aus der Hüfte geschossen: Du könntest mit EnumWindows alle Fenster durchgehen, in der Callback-Funktion mit GetWindowThreadProcessId die zugehörige ProzessId ermitteln und mit Deiner vergleichen. Bei Übereinstimmung dann einfach die Message schicken. Ist aber wie gesagt nur ein erster Gedanke und nicht getestet. Alternative hat Bernhard ja gerade beschrieben.

[edit] :lol: Den Gedanken hatte ich wohl nicht alleine [/edit]

Bomberbb 4. Feb 2010 12:43

Re: iexplorer starten und beenden
 
ok, danke: ich habs jetzt so gelöst:
Delphi-Quellcode:
  If assigned(fwb) Then
  Begin
    FreeAndNil(fwb);
    pmiRadio.Caption := 'Radio starten';
  End
  Else
  Begin
    fwb := TWebBrowser.Create(Self);
    TWinControl(fwb).Name := 'RadioWebBrowser';
    TWinControl(fwb).Parent := Self;
    fwb.HandleNeeded;
    fwb.Navigate('http://edge.download.newmedia.nacamar.net/freestream/download/radiohochstift/frameset.html');
    pmiRadio.Caption := 'Radio beenden';
  End;
Funzt wie es soll. Und danke auch noch mal auf den Hinweis mit HandleNeeded! Da hätte ich sonst bestimmt ewigkeiten nach gesucht.

Bernhard Geyer 4. Feb 2010 12:46

Re: iexplorer starten und beenden
 
Zitat:

Zitat von Bomberbb
ok, danke: ich habs jetzt so gelöst:
Delphi-Quellcode:
     TWinControl(fwb).Name := 'RadioWebBrowser';

Diese Zeile ist unnötig

Zitat:

Zitat von Bomberbb
Funzt wie es soll. Und danke auch noch mal auf den Hinweis mit HandleNeeded! Da hätte ich sonst bestimmt ewigkeiten nach gesucht.

Kannst mir ja ein (virtuelles) Bier ausgeben :mrgreen:

Bomberbb 4. Feb 2010 12:51

Re: iexplorer starten und beenden
 
Nun zumindest werde ich heute abend eins auf Dein Wohl trinken.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:01 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