Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Wm_powerbroadcast (https://www.delphipraxis.net/181237-wm_powerbroadcast.html)

fs999 28. Jul 2014 15:15

Wm_powerbroadcast
 
Hallo,

Ich versuche den Standby und Suspend modus von Windows 7 (x64 Pro) zu verhindern, das scheint aber nicht zu funktionnieren.

Code:
...

TMainForm = class(TForm)
Private
    procedure WMPowerBroadcast(var Message: TMessage); message WM_POWERBROADCAST;
end;

...

implementation

...

procedure TMainForm.WMPowerBroadcast(var Message: TMessage);
begin
  case Message.WParam of
    PBT_APMQUERYSUSPEND, PBT_APMQUERYSTANDBY,
    PBT_APMSUSPEND, PBT_APMSTANDBY:
    begin
      Message.Result := BROADCAST_QUERY_DENY;
    end;
  end;
end;
Wenn ich ein ShowMessage nach dem Message.Result mache, dann sehe ich die Meldung nach dem aufwecken...

Grüsse,
Frederic

Mikkey 28. Jul 2014 16:47

AW: Wm_powerbroadcast
 
Ich verstehe die Beschreibung in http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx so, dass das nur bei Windows-XP und Windows-Server-2003 funktioniert:

Zitat:

Windows Server 2003 and Windows XP: An application can return BROADCAST_QUERY_DENY to deny a PBT_APMQUERYSUSPEND or PBT_APMQUERYSUSPENDFAILED request.

Der schöne Günther 28. Jul 2014 17:14

AW: Wm_powerbroadcast
 
Steht auch noch da:
Zitat:

To prevent the system from transitioning to a low-power state in Windows Vista, an application must call SetThreadExecutionState to inform the system that it is in use.

himitsu 28. Jul 2014 17:24

AW: Wm_powerbroadcast
 
Du hättest natürlich auch erstmal in die SuFu schauen können, was die dazu sagt. :roll:

Manchmal kommt es vor, daß Andere schon ein ähnliches Problem hatten und man dort bereits eine Antwort findet.
z.B. Hier im Forum suchenPBT_APMSTANDBY => http://www.delphipraxis.net/169775-r...er-2011-a.html

fs999 29. Jul 2014 13:06

AW: Wm_powerbroadcast
 
Vielen Dank für Ihre Antworten. Ich habe nicht daran gedacht dass Microsoft bei jedem OS Wechsel alles ändert...

Also wenn ich gut verstanden habe, mit XP benutzt man WM_POWERBROADCAST mit BROADCAST_QUERY_DENY.
Mit Vista SetThreadExecutionState und mit Win7 PowerCreateRequest u. PowerSetRequest.
Was ist mit Win9, wird da eine neue Prozedur eingesetzt ?

Zitat:

Zitat von himitsu (Beitrag 1266838)
Du hättest natürlich auch erstmal in die SuFu schauen können, was die dazu sagt. :roll:

Manchmal kommt es vor, daß Andere schon ein ähnliches Problem hatten und man dort bereits eine Antwort findet.
z.B. Hier im Forum suchenPBT_APMSTANDBY => http://www.delphipraxis.net/169775-r...er-2011-a.html

Ich die SuFu benutzt, doch da meine Muttersprache nicht Deutsch ist, habe ich nach PowerBroadcast gesucht und dieses Thema nicht gefunden. :roll:
Und das Problem ist nicht das selbe. Ich möchte verhindern dass der Computer ins Standbymodus geht, und nebenbei auch ein Shutdown macht ohne das der User das Programm korrekt zumacht.

Der schöne Günther 29. Jul 2014 16:11

AW: Wm_powerbroadcast
 
Naja, von XP auf Vista und folgende war es halt ein großer Schritt. Das ist ja nicht das einzige was sich rabiat geändert hat. Und wer weiß, vielleicht ist das nächste Windows ja der nächste dieser Art. Das muss dann ja wohl Smartphones, große und kleine Tablets sowie den klassischen Desktop unter einen Hut bringen 8-)

fs999 30. Jul 2014 10:02

AW: Wm_powerbroadcast
 
Ich habe da noch eine Frage.

Warum sind SetThreadExecution und PowerCreateRequest/PowerDestroyRequest nicht in XE6 definiert ?

Hat jemand ein Beispiel in Delphi mit PowerCreateRequest ?

Grüsse,
Frederic

Der schöne Günther 30. Jul 2014 10:38

AW: Wm_powerbroadcast
 
Zitat:

Zitat von fs999 (Beitrag 1267011)
Warum sind SetThreadExecution und PowerCreateRequest/PowerDestroyRequest nicht in XE6 definiert?

Weil die WinApi-Header irgendwie nicht mehr so wirklich aktuell gehalten werden. Es gibt eine Menge cooler Dinge die in letzter Zeit hinzukamen, in den Standard-Delphifiles aber nicht auftauchen.

http://stackoverflow.com/a/8733853/2298252:
Delphi-Quellcode:
type
  EXECUTION_STATE = DWORD;

const
  ES_SYSTEM_REQUIRED = $00000001;
  ES_DISPLAY_REQUIRED = $00000002;
  ES_USER_PRESENT = $00000004;
  ES_AWAYMODE_REQUIRED = $00000040;
  ES_CONTINUOUS = $80000000;

function SetThreadExecutionState(esFlags: EXECUTION_STATE): EXECUTION_STATE;
  stdcall; external 'kernel32.dll' name 'SetThreadExecutionState';

procedure TForm1.Button1Click(Sender: TObject);
begin
  if SetThreadExecutionState(ES_CONTINUOUS or ES_SYSTEM_REQUIRED or
    ES_AWAYMODE_REQUIRED) <> 0 then
  try
    // execute your long running task here
  finally
    SetThreadExecutionState(ES_CONTINUOUS);
  end;
end;

Ansonsten sagt einem MSDN zu PowerCreateRequest ja auch alles was man wissen muss um es selber zu machen. Ich finde nämlich auf die Schnelle auch nichts.

hathor 30. Jul 2014 11:07

AW: Wm_powerbroadcast
 
Dieser Code in #8 funktioniert ab WINDOWS 7 nicht mehr!

Der schöne Günther 30. Jul 2014 11:15

AW: Wm_powerbroadcast
 
Ja, ich meinte das auch eher nur als Beispiel zum Definition der Methoden, Konstanten und Datentypen "nachrüsten".


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:01 Uhr.
Seite 1 von 2  1 2      

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