Einzelnen Beitrag anzeigen

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