![]() |
Browser Via Delphi aktualisieren/
Moin!
Ich habe für einen Infomonitor ein kleines Programm geschrieben, welches einen Browser neu laden soll und wenn er nicht gestartet ist, starten soll. Da Chrome der einzige Browser ist, der auf Tastendrücke per PostMessage reagiert, habe ich mich entschlossen Chrome zu nehmen. (Falls jemand einen Vorschlag hat, wie das mit Opera oder Firefox funkionieren könnte, würde ich das auch sehr begrüßen ;)) Allerdings habe ich auch mit Chrome einige Probleme: 1. Chrome muss den Fokus wiederbekommen, bevor er ein 2. mal F5 gesendet werden kann. Leider habe ich nicht hinbekommen den Fokus auf Chrome zu setzen. Meine Recherchen haben ergeben, dass die mit ShowWindow gehen sollte, leider hab ich es nicht hinbekommen. 2. Nach dem Start soll Chrome in den Vollbildmodus gebracht werden, was mit einem Senden von F11 funktioniert. Wenn dies während des laufenden Programms geschieht - kein Problem. Leider wird diese Funktion bei FormCreate aufgerufen und dort funktioniert es nicht mehr so einfach. Wenn man vorher ShowMessage('Vollbildmodus wird gestartet') Aufruft und dies bestätigt funktioniert es wieder. Leider hat Chrome keinen Startparameter, mit dem man es im Vollbildmodus starten könnte. Hat jemand eine Idee woran es liegen könnte? Mit wartezeiten habe ich auch schon ein wenig experimentiert, hat aber nichts gebracht. Hier nochmal der gesamte Code:
Delphi-Quellcode:
Mit freundlichen Grüßen
procedure TFChrome.FormCreate(Sender: TObject);
var HFenster: HWND; sHTML: string; boChrome: Boolean; boMeldung : Boolean; iWartezeit1,iWartezeit2,iWartezeit3 : Integer; SLEinstellungen : TStringList; begin SLEinstellungen := TStringList.Create; try SLEinstellungen.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'chrome.cfg'); if SLEinstellungen[0] = '1' then boMeldung := True else boMeldung := False; iWartezeit1 := 500; iWartezeit2 := 500; iWartezeit3 := 500; TryStrToInt(SLEinstellungen[1],iWartezeit1); TryStrToInt(SLEinstellungen[2],iWartezeit2); TryStrToInt(SLEinstellungen[3],iWartezeit3); finally SLEinstellungen.Free end; HFenster := FindWindow('Chrome_WidgetWin_0',0); sHTML := '"' + ExtractFilePath(ParamStr(0)) + '..\infodisplay.html' + '"'; if HFenster = 0 then begin boChrome := True; if FileExists(GetEnvironmentVariable('appdata')+'\..\Local\Google\Chrome\Application\chrome.exe') then ShellExecute(Application.Handle,nil,PChar(GetEnvironmentVariable('appdata')+'\..\Local\Google\Chrome\Application\chrome.exe'),PChar(sHTML),'',SW_SHOW) else if FileExists(GetEnvironmentVariable('temp') + '\..\Anwendungsdaten\Google\Chrome\Application\chrome.exe') then ShellExecute(Application.Handle,nil,PChar(GetEnvironmentVariable('temp') + '\..\Anwendungsdaten\Google\Chrome\Application\chrome.exe'),PChar(sHTML),'',SW_SHOW) else begin ShowMessage('Chrome wurde nicht gefunden!'); boChrome:= False; end; if boChrome then begin Sleep(iWartezeit1); HFenster := FindWindow('Chrome_WidgetWin_0',nil); if boMeldung then ShowMessage('Vollbildmodus wird gestartet'); Sleep(iWartezeit2); ShowWindow(HFenster,SW_NORMAL); PostMessage(HFenster,WM_KEYDOWN,VK_F11,0); PostMessage(HFenster,WM_KEYUP,VK_F11,0); end; end; ShowWindow(HFenster,SW_NORMAL); PostMessage(HFenster,WM_KEYDOWN,VK_F5,0); PostMessage(HFenster,WM_KEYUP,VK_F5,0); Sleep(iWartezeit3); Application.Terminate; end; sentinel81 |
Re: Browser Via Delphi aktualisieren/
Musst Du den Umweg über einen Browser gehen?
Alternativ TWebBrowser nutzen oder Indys, je nach dem, was Du machen musst. |
Re: Browser Via Delphi aktualisieren/
Ich werds mal wenn ich Zeit hab damit ausprobieren. Ich hab mich damit allerdings noch nie beschäftigt, und der externe Browser war eben die einfachste und schnellste Lösung für mich.
mfg sentinel81 |
Re: Browser Via Delphi aktualisieren/
Zitat:
Delphi-Quellcode:
{...}
uses ShDocVw; {...} var IE: IWebBrowser2 = nil; {...} procedure TForm1.Button1Click(Sender: TObject); var URL: OleVariant; begin if Assigned(IE) then begin IE.Refresh; end else begin URL := 'http://www.heise.de/newsticker'; IE := CoInternetExplorer.Create; IE.Navigate2(URL, EmptyParam, EmptyParam, EmptyParam, EmptyParam); IE.Visible := True; end; end; |
Re: Browser Via Delphi aktualisieren/
Mit dem "Assigned" ist ja völliger Quatsch. Wenn das Fenster vom IE geschlossen wird, dann knallt es.
Also hier mal ein anderes Beispiel. Es wird vorher geprüft, ob die Instanz vom IE noch vorhanden ist. Wenn ja, wird ein Refresh durchgeführt. Ansonsten wird eine neue Instanz erstellt.
Delphi-Quellcode:
Könnte mir vorstellen, das sowas ähnliches mit Mozilla auch möglich wäre. Denke aber, das es eine Steuerung über Ole/DDE mit Chrome und Opera nicht gibt.
{...}
uses ShDocVw, MSHTML; {...} var IE: IWebBrowser2; {...} procedure TForm1.Button5Click(Sender: TObject); var I: Integer; SHW: IShellWindows; Doc: IHTMLDocument2; MustNewCreate: Boolean; URL: OleVariant; begin URL := 'http://www.heise.de/newsticker/'; MustNewCreate := True; SHW := CoShellWindows.Create; for I := 0 to SHW.Count - 1 do if (SHW.Item(I) as IWebBrowser2) = IE then begin if IE.Document <> nil then if IE.Document.QueryInterface(IHTMLDocument2, Doc) = S_OK then if IE.LocationURL = URL then IE.Refresh else IE.Navigate(URL, EmptyParam, EmptyParam, EmptyParam, EmptyParam); MustNewCreate := False; end; if MustNewCreate then begin IE := CoInternetExplorer.Create; IE.Navigate(URL, EmptyParam, EmptyParam, EmptyParam, EmptyParam);; IE.Visible := True; end; end; |
Re: Browser Via Delphi aktualisieren/
Vielen Dank Sprint! Das ist natürlich die optimale Lösung.
Auch wenn ich nicht damit gerechnet hätte, dass mir jemand eine Lösung mit dem Internet Explorer präsentiert :D. mfg Sentinel81 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:40 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