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] = '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;
Mit freundlichen Grüßen
sentinel81