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:
Sous vista, il faut apparemment souscrire d'abord au message en utilisant RegisterPowerSettingNotification.
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;
Problème: je n'arrive pas à utiliser cette API sous delphi. Quelqu'un l'a-t-il déjà fait ?
Exemple de code:
Problème: Ce code ne compile pas... Quelles sont les valeurs à mettre pour GUID_MONITOR_POWER_ON, etc ?
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;
Merci d'avance.
Partager