Bonjour,

Je tourne en rond, donc en désespoir de cause me tourne vers le forum:

Je cherche à détecter la mise en veille prolongée sous Vista. A priori, sous XP, il suffit d'implémenter quelque chose du genre:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
 
//Test XP
procedure TForm1.WMPowerBroadcast(var Msg: TMessage);
var f: textfile;
const
  PBT_APMQUERYSUSPEND = $0000;
  PBT_APMQUERYSTANDBY = 0001;
  PBT_APMQUERYSUSPENDFAILED = 0002;
  PBT_APMQUERYSTANDBYFAILED = 0003;
  PBT_APMSUSPEND = 0004;
  PBT_APMSTANDBY = 0005;
  PBT_APMRESUMECRITICAL = 0006;
  PBT_APMRESUMESUSPEND = 0007;
  PBT_APMRESUMESTANDBY = 0008;
  PBT_APMBATTERYLOW = 0009;
  PBT_APMPOWERSTATUSCHANGE = $000A;
  PBT_APMOEMEVENT = $000B;
  PBT_APMRESUMEAUTOMATIC = $0012;
begin
  if (debug > 0) then begin
    AssignFile(F, 'c:\power.txt');
    if FileExists('c:\power.txt') then Append(F) else Rewrite(F);
    Writeln(F, '[' + DateTimeToStr(Now) + ']' + ' Action = ' + IntToStr(Msg.WParam));
    CloseFile(F);
  end;
  inherited;
end;
Sous vista, il faut apparemment souscrire d'abord au message en utilisant RegisterPowerSettingNotification.

Problème: je n'arrive pas à utiliser cette API sous delphi. Quelqu'un l'a-t-il déjà fait ?

Exemple de code:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 
// VISTA SEULEMENT !
procedure RegisterPowerSettingNotification(hRecipient : hwnd; PowerSettingGuid:  TGuid; Flags: byte);stdcall;external 'user32.dll';
Procedure RegisterForPowerNotifications(hwnd: hwnd);
  var GUID_BATTERY_PERCENTAGE_REMAINING, GUID_MONITOR_POWER_ON, GUID_POWERSCHEME_PERSONALITY: TGUID;
      DEVICE_NOTIFY_WINDOW_HANDLE: Byte;
  begin
      DEVICE_NOTIFY_WINDOW_HANDLE := 0;
            hBattCapacity := RegisterPowerSettingNotification(hwnd,
            GUID_BATTERY_PERCENTAGE_REMAINING,
            DEVICE_NOTIFY_WINDOW_HANDLE);
 
            hMonitorOn := RegisterPowerSettingNotification(hwnd,
            GUID_MONITOR_POWER_ON,
            DEVICE_NOTIFY_WINDOW_HANDLE);
 
            hPowerScheme := RegisterPowerSettingNotification(hwnd,
            GUID_POWERSCHEME_PERSONALITY,
            DEVICE_NOTIFY_WINDOW_HANDLE);
        end;
Problème: Ce code ne compile pas... Quelles sont les valeurs à mettre pour GUID_MONITOR_POWER_ON, etc ?



Merci d'avance.