Как использовать RegisterPowerSettingNotification в сочетании с GUID_MONITOR_POWER_ON в Delphi XE2?RegisterPowerSettingNotification использование в Delphi
ответ
Вы должны вызвать RegisterPowerSettingNotification с нужным идентификатором GUID Power Setting GUIDs для регистрирует заявку на получение уведомлений настройки мощности для конкретного события установки мощности, если больше не нужен вызов UnregisterPowerSettingNotification.
Дельфи пример может выглядеть следующим образом:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
const
GUID_MONITOR_POWER_ON: TGUID = '{02731015-4510-4526-99e6-e5a17ebd1aea}';
type
TForm1 = class(TForm)
Memo1: TMemo;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
FHPOWERNOTIFY: THandle;
protected
procedure WM_POWERBROADCAST(var Msg: TMessage); message WM_POWERBROADCAST;
end;
function RegisterPowerSettingNotification(hRecipient: THandle;
PowerSettingGuid: PGUID; Flags: DWORD): THandle; stdcall;
external 'user32.dll';
function UnregisterPowerSettingNotification(Handle: THandle): BOOL; stdcall;
external 'user32.dll';
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
FHPOWERNOTIFY := RegisterPowerSettingNotification(Handle,
@GUID_MONITOR_POWER_ON, DEVICE_NOTIFY_WINDOW_HANDLE);
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
UnregisterPowerSettingNotification(FHPOWERNOTIFY);
end;
procedure TForm1.WM_POWERBROADCAST(var Msg: TMessage);
begin
if PPOWERBROADCAST_SETTING(Msg.LParam)^.Data[0] = 0 then
Memo1.Lines.Add('Off')
else
Memo1.Lines.Add('ON')
end;
end.
@TLama, вы правы, я пропустил чтение – Peter
@TLama Я видел ваш пример. Код в ответе Bummi, кажется, работает очень хорошо. Может быть, его ответ должен быть обновлен для PBT_POWERSETTINGCHANGE? –
Да. Вам нужно проверить, какое событие вызвало сообщение «WM_POWERBROADCAST», а затем, если оно было «PBT_POWERSETTINGCHANGE», также проверяет, какое уведомление о мощности вызвало это событие (это важно, если вы зарегистрировали больше, чем уведомление GUID_MONITOR_POWER_ON) , Но если этого достаточно для вас, то желаю вам удачи! ;-) Просто боковое значение, 'HPOWERNOTIFY' определяется как' PVOID' в файле заголовка WinUser.h. – TLama
- 1. Как использовать RegisterPowerSettingNotification
- 2. Использование IVirtualDesktopManager в Delphi
- 3. Использование Byte [] в delphi
- 4. Использование _set_invalid_parameter_handler в Delphi
- 5. Использование Localhost в Delphi
- 6. Использование Delphi DLL в C#
- 7. Использование блока принтеров в Delphi
- 8. Использование запроса REST в Delphi
- 9. Использование UIDocumentInteractionController в Delphi XE
- 10. Использование команды «GoTo» в delphi?
- 11. Использование функций лямбда в Delphi
- 12. Использование TScreen в Delphi 7
- 13. Использование CryptProtectData & CryptUnprotectData в Delphi
- 14. Использование классов C++ в Delphi
- 15. Использование UrlCreateFromPath в delphi XE7
- 16. Использование GDI + в Delphi XE
- 17. Использование пакетов Delphi
- 18. Использование Delphi Firemonkey TGrid
- 19. Правильное использование Delphi TMultiView
- 20. Использование ScriptGetProperties с Delphi
- 21. Использование самопоиска Delphi
- 22. Delphi Использование Indy 10
- 23. Использование LibTiff с Delphi
- 24. Использование LongMonthNames в Delphi XE2 и Delphi XE7
- 25. Использование таблиц в RichEdit в Delphi
- 26. Использование класса java от Delphi
- 27. Использование Thrift с Delphi Win32
- 28. Использование TChromium, Delphi Chromium Embedded
- 29. Delphi и использование Teamspeak SDK
- 30. Delphi и Excel - Использование автозаполнения
, например, как это: http://forum.sources.ru/index.php?showtopic=314202 Но какова ваша текущая проблема? http://www.catb.org/~esr/faqs/smart-questions.html#goal –
@Arioch, вам не нужно иметь проблемы, если вы хотите получать уведомления от ['GUID_MONITOR_POWER_ON'] (http : //msdn.microsoft.com/en-us/library/windows/desktop/hh448380.aspx#GUID_MONITOR_POWER_ON). Raw N, еще один пример, вы можете ['find here'] (http://pastebin.com/Evs5D0pN). Поскольку вы используете Delphi XE2, вам не понадобятся определения прототипов. У меня есть только Delphi 2009 от руки. И я не могу его протестировать, так как не знаю, как отключить монитор на моем ноутбуке :-) – TLama
@TLama Обычно вы не запрашиваете какое-либо состояние из ОС и не выполняете длину, чтобы реализовать шаблон обратного вызова, чтобы отменить результат. Обычно это делается для принятия какого-либо решения. И ссылка выше, прочитайте ее, немедленно спросите о цели. Похоже, что этот обратный вызов (ab) используется, чтобы «вызвать рвоту ребенка после того, как он съел яд». «ВМЕСТО» запретил ему есть яд »/// Блокнот: Обычно это делается с помощью комбинации Fn + some-key, перечисленных в руководствах. Но уверены ли вы, что Windows будет обязательно проинформирована об отключении питания лампы? Если бы я захотел протестировать его, я бы запустил стопку Windows display-off screensaver –