我正在寻找一种拦截笔记本电脑盖关闭事件的方法.在Windows 7中,电源管理允许我在盖子关闭时选择所需的行为.因此窗户必须有一个方法可以知道盖子何时关闭.
我做了我的研究,但只发现了监测睡眠事件的建议.我想更具体的是只回应关闭盖子.
有没有人有建议?
谢谢!
小智 6
问题是指 GUID_LIDSWITCH_STATE_CHANGE 而不是 GUID_LIDCLOSE_ACTION。
GUID_LIDCLOSE_ACTION 监控用户是否在合上盖子时更改电源行为(控制面板 -> 电源设置 -> 选择合上盖子的作用)
如果要监控盖子关闭/打开的事件,则需要注册 GUID_LIDSWITCH_STATE_CHANGE。我使用它作为 Windows 服务:
int ServiceMain(int argc, char** argv)
{
serviceStatusHandle = RegisterServiceCtrlHandlerExA(serviceName, (LPHANDLER_FUNCTION_EX) ServiceControlHandler, 0);
...
lidcloseRegHandle = RegisterPowerSettingNotification(serviceStatusHandle, &GUID_LIDSWITCH_STATE_CHANGE, DEVICE_NOTIFY_SERVICE_HANDLE);
...
}
Run Code Online (Sandbox Code Playgroud)
在服务控制处理程序中:
/**
* Event handler for windows service.
*/
void WINAPI ServiceControlHandler(DWORD controlCode, DWORD evtype, PVOID evdata, PVOID Context)
{
switch (controlCode)
{...
case SERVICE_CONTROL_POWEREVENT:
WriteToLog("Service Control: SERVICE_CONTROL_POWEREVENT builds and fwd the msg");
msg.control = SERVICE_CONTROL_POWEREVENT;
msg.event_type = (int) evtype;
msg.event_data = evdata;
...
}
}
Run Code Online (Sandbox Code Playgroud)
evtype 是 PBT_POWERSETTINGCHANGE 并且在 evdata 中记录了事件:0 表示关闭,1 表示打开。
更多详细信息:https : //msdn.microsoft.com/en-us/library/aa372723.aspx https://msdn.microsoft.com/en-us/library/hh769082(v=vs.85).aspx
当盖子关闭时,您可以注册通知RegisterPowerSettingNotification。
AnswerLid 关闭操作更改通知
在 Vista 中,您可以注册盖子关闭操作更改时的回调。这是通过调用 RegisterPowerSettingNotification 完成的(有关详细信息,请参阅http://msdn2.microsoft.com/en-us/library/aa373196.aspx)。您感兴趣的此电源设置的 GUID 是 GUID_LIDCLOSE_ACTION。这在平台 SDK 的 wdm.h 中定义。
注册后,WM_POWERBROADCAST 将发送到您的应用程序,并将 wParam 设置为 PBT_POWERSETTINGCHANGE。每当盖子关闭操作的值发生变化时,就会发送此事件。lParam 包含一个指向 POWERBROADCAST_SETTING 结构的指针(参见http://msdn2.microsoft.com/en-us/library/aa372723.aspx),其中包含有关设置更改的信息。
| 归档时间: |
|
| 查看次数: |
6770 次 |
| 最近记录: |