AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Windows-Energieoptionen: Monitor aus -> OpenGL friert ein
Thema durchsuchen
Ansicht
Themen-Optionen

Windows-Energieoptionen: Monitor aus -> OpenGL friert ein

Ein Thema von idontknow · begonnen am 26. Apr 2022 · letzter Beitrag vom 27. Apr 2022
 
idontknow

Registriert seit: 21. Apr 2008
Ort: Schleswig-Holstein
60 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Windows-Energieoptionen: Monitor aus -> OpenGL friert ein

  Alt 27. Apr 2022, 14:04
Hallo TiGü, danke für die Info.

Auf dem Acer ist ein uralter intel-Treiber 20.19.15.4352. Was neueres lässt sich da anscheinend nicht installieren. Der intel-Installer beschwert sich dann mit "...Treiber, der an die Spezifikationen des Herstellers gebunden ist. Versuchen Sie... neuesten Treiber von der Herstellerseite... bla". Witzig.

Auf dem Rechner mit i7-10700K ist 27.20.100.8681, damit geht es.

Habe mittlerweile einen Workaround gefunden, scheint zumindest unter Idealbedingungen (sprich: Bei mir auf dem Schreibtisch, nicht beim Kunden) zu funktionieren.

Delphi-Quellcode:
...
procedure PowerMessageHandler(var MyMessage: TMessage); message WM_POWERBROADCAST;
...

procedure TDisplayPower.PowerMessageHandler(var MyMessage: TMessage);
var
  PowerBroadcastSetting: PPowerBroadcastSetting;
  fOldDisplayState: Integer;
begin
  // Beim Abschalten und Einschalten des Monitors landen wir hier!
  // Wir werden über Änderungen des Energieverbrauchs benachrichtigt (ab Vista), wenn
  // wir uns für den Empfang registrieren: RegisterPowerSettingNotification(Self.Handle, GUID_CONSOLE_DISPLAY_STATE, 0);
  fOldDisplayState := fDisplayState;
  if (MyMessage.WParam = PBT_POWERSETTINGCHANGE) then
  begin
    PowerBroadcastSetting := PPowerBroadcastSetting(MyMessage.LParam);
    if PowerBroadcastSetting^.PowerSetting = GUID_CONSOLE_DISPLAY_STATE then
    begin
      if (PowerBroadcastSetting^.DataLength > 0) then
      begin
        case PowerBroadcastSetting^.Data[0] of
          0: fDisplayState := 0; // Memo1.Lines.Add(timetostr(Now) + ' Console-Display aus');
          1: fDisplayState := 1; // Memo1.Lines.Add(timetostr(Now) + ' Console-Display an');
          2: fDisplayState := 2; // Memo1.Lines.Add(timetostr(Now) + ' Console-Display an (gedimmt)');
        end;
      end;
    end;

    if fOldDisplayState <> fDisplayState then
      if Assigned(fonNotify) then
        fonNotify(Self, fDisplayState, fPreviousDisplayState);

    fPreviousDisplayState := fDisplayState;
  end;
informiert über "Monitor eingeschaltet", dann wird am Fenster gewackelt


Delphi-Quellcode:
procedure TForm1.DisplayPowerNotify(Sender: TObject; State: Integer; PreviousState: Integer);
begin
  Info('DisplayPowerNotify: ' + State.ToString);

  if (PreviousState=0) and (State=1) then // Display wird wach.
    WakeUpGL();
end;

procedure TForm1.WakeUpGL;
var
  ws: TWindowState;
begin
  ws := Form1.WindowState;
  if (ws = TWindowState.wsMaximized) then
    Form1.WindowState := TWindowState.wsNormal;

  Left := Left+1;
  Left := Left-1;

  if (ws = TWindowState.wsMaximized) then
    Form1.WindowState := TWindowState.wsMaximized;
end;
und dann läuft die OpenGL-Darstellung sofort weiter...

Prmpff... Das kann es doch eigentlich nicht sein...
Oliver
  Mit Zitat antworten Zitat
 

 

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 12: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 by Thomas Breitkreuz