我正在尋找截取筆記本電腦蓋子關閉事件的方法。在Windows 7中,電源管理允許我在蓋子關閉時選擇所需的行爲。所以必須有一種方法可以讓窗戶知道蓋子何時關閉。在windows中捕獲筆記本電腦蓋關閉事件?
我做了我的研究,但只發現了監測睡眠事件的建議。我想要更具體地回答關閉蓋子的問題。
有沒有人有建議?
謝謝!
我正在尋找截取筆記本電腦蓋子關閉事件的方法。在Windows 7中,電源管理允許我在蓋子關閉時選擇所需的行爲。所以必須有一種方法可以讓窗戶知道蓋子何時關閉。在windows中捕獲筆記本電腦蓋關閉事件?
我做了我的研究,但只發現了監測睡眠事件的建議。我想要更具體地回答關閉蓋子的問題。
有沒有人有建議?
謝謝!
當蓋子關上時,您可以註冊通知RegisterPowerSettingNotification
。
AnswerLid關閉動作變更通知
在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),其中包含有關設置更改的信息。
很好的答案。有關如何在實踐中使用這些東西的非常小的具體示例,請查看[LapLock](https://github.com/dechamps/laplock/)。 – 2016-08-13 09:30:15
問題涉及到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
我看着這個的年齡,但從來沒有找到一個解決方案。在linux上很容易閱讀 - 但在Windows(最高xp)上,蓋子開關與電源管理相關聯,而電源管理又與用戶身份驗證相關。我到了需要編寫設備驅動程序的地步,並停在那裏。 – sje397 2010-12-20 03:36:09
http://stackoverflow.com/questions/3355606/detect-laptop-lid-closure-and-opening – Samuel 2010-12-20 03:47:41
@Samuel - 出色的發現。 – sje397 2010-12-20 03:54:00