AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Browser Via Delphi aktualisieren/
Thema durchsuchen
Ansicht
Themen-Optionen

Browser Via Delphi aktualisieren/

Ein Thema von sentinel81 · begonnen am 30. Jul 2009 · letzter Beitrag vom 16. Aug 2009
Antwort Antwort
sentinel81

Registriert seit: 20. Mär 2007
3 Beiträge
 
#1

Browser Via Delphi aktualisieren/

  Alt 30. Jul 2009, 17:36
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:
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] = '1then
      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;
Mit freundlichen Grüßen

sentinel81
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#2

Re: Browser Via Delphi aktualisieren/

  Alt 30. Jul 2009, 18:07
Musst Du den Umweg über einen Browser gehen?

Alternativ TWebBrowser nutzen oder Indys, je nach dem, was Du machen musst.
  Mit Zitat antworten Zitat
sentinel81

Registriert seit: 20. Mär 2007
3 Beiträge
 
#3

Re: Browser Via Delphi aktualisieren/

  Alt 31. Jul 2009, 12:39
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
  Mit Zitat antworten Zitat
Benutzerbild von Sprint
Sprint

Registriert seit: 18. Aug 2004
Ort: Edewecht
712 Beiträge
 
Delphi 5 Professional
 
#4

Re: Browser Via Delphi aktualisieren/

  Alt 31. Jul 2009, 13:09
Zitat von sentinel81:
(Falls jemand einen Vorschlag hat, wie das mit Opera oder Firefox funkionieren könnte, würde ich das auch sehr begrüßen )
Mit dem Internet Explorer geht das Laden und Refreshen recht einfach.

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;
Ciao, Sprint.

"I don't know what I am doing, but I am sure I am having fun!"
  Mit Zitat antworten Zitat
Benutzerbild von Sprint
Sprint

Registriert seit: 18. Aug 2004
Ort: Edewecht
712 Beiträge
 
Delphi 5 Professional
 
#5

Re: Browser Via Delphi aktualisieren/

  Alt 2. Aug 2009, 23:27
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:
{...}

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;
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.
Ciao, Sprint.

"I don't know what I am doing, but I am sure I am having fun!"
  Mit Zitat antworten Zitat
sentinel81

Registriert seit: 20. Mär 2007
3 Beiträge
 
#6

Re: Browser Via Delphi aktualisieren/

  Alt 16. Aug 2009, 12:26
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 .

mfg
Sentinel81
  Mit Zitat antworten Zitat
Antwort Antwort


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 17:51 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