在windows中捕获笔记本电脑盖closures事件?

我正在寻找一种方法来拦截笔记本电脑盖子closures事件。 在Windows 7中,电源pipe理允许我在closures盖子时select所需的行为。 所以必须有一个窗户知道什么时候盖子closures的方法。

我做了我的研究,但只发现了监测睡眠事件的build议。 我想更具体的只是回应盖子closures。

有没有人有build议?

谢谢!

Solutions Collecting From Web of "在windows中捕获笔记本电脑盖closures事件?"

当使用RegisterPowerSettingNotification关闭盖子时,您可以注册通知。

AnswerLid关闭操作更改通知

http://social.msdn.microsoft.com/Forums/en-US/tabletandtouch/thread/0bbf90be-9322-47fb-bfa4-016b57211b3a

在Vista中,你可以注册一个回调,当盖子关闭动作改变。 这是通过调用RegisterPowerSettingNotification完成的(详情请参阅http://msdn2.microsoft.com/en-us/library/aa373196.aspx )。 您感兴趣的这个权力设置的GUID是GUID_LIDCLOSE_ACTION。 这在Platform SDK的wdm.h中定义。

一旦注册,WM_POWERBROADCAST将被发送到您的应用程序与wParam设置为PBT_POWERSETTINGCHANGE。 只要盖子关闭动作的值发生变化,就会发送此事件。 lParam包含一个指向POWERBROADCAST_SETTING结构的指针(请参阅http://msdn2.microsoft.com/en-us/library/aa372723.aspx ),其中包含有关设置更改的信息。

这个问题引用了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); ... } 

并在服务控制处理程序:

 /** * 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; ... } } 

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