C++ 电源按钮和盖睡眠定制
据我所知,Windows控制面板中只有睡眠/休眠和关机选项,以响应电源按钮和笔记本电脑盖的关闭:C++ 电源按钮和盖睡眠定制,c++,winapi,sleep,power-management,C++,Winapi,Sleep,Power Management,据我所知,Windows控制面板中只有睡眠/休眠和关机选项,以响应电源按钮和笔记本电脑盖的关闭: 我写了一个Windows服务,我很好奇是否可以自定义这些选项?首先,我需要能够在将系统发送到睡眠状态之前注销Windows用户。只是,我想提供一些有关系统空闲时间和注销的线索 您可以使用boolwinapi GetLastInputInfo获取系统空闲时间( _外塑性输入 ); 这是一种获取系统空闲时间的简单方法 LASTINPUTINFO input_info; input_info.cbSi
我写了一个Windows服务,我很好奇是否可以自定义这些选项?首先,我需要能够在将系统发送到睡眠状态之前注销Windows用户。只是,我想提供一些有关系统空闲时间和注销的线索 您可以使用
boolwinapi GetLastInputInfo获取系统空闲时间(
_外塑性输入
);
这是一种获取系统空闲时间的简单方法
LASTINPUTINFO input_info;
input_info.cbSize = sizeof(LASTINPUTINFO);
::GetLastInputInfo(&input_info);
//input_info.dwTime` means the value of tick count
//when the last input event was received.
//So, you can get idle time by using below code.
DWORD currentTime = GetTickCount();
DWORD timeElapsed = currentTime - input_info.dwTime;
接下来,据我所知,ExitWindowsEx()
函数可用于注销、关闭系统,并且当应用程序调用其中一个系统关闭函数时,会发送WM\u QUERYENDSESSION
我希望这会对你有所帮助 好的,我必须回答我自己的问题。以下是我能够发现的: 当盖子关闭时,很容易得到将执行的动力动作。以下是代码(但必须从用户模式进程运行): 当盖子关闭时,设置电源操作也很容易(同样,代码必须在用户模式进程中运行——否则,您需要使用除
PowerGetActiveScheme
call以外的方法获取电源方案GUID):
这也适用于电源/睡眠按钮操作。GUID\u SYSTEM\u BUTTON\u子组中的GUID如下所示:
GUID_POWERBUTTON_ACTION = power button
GUID_SLEEPBUTTON_ACTION = sleep button
GUID_USERINTERFACEBUTTON_ACTION = sometimes another OEM sleep button
不幸的是,我无法看到如何为这些事件设置自定义电源操作
BOOL setLidClosedAction(DWORD dwVal)
{
//'dwVal' = can be one of:
// 0 = do nothing
// 1 = sleep
// 2 = hibernate
// 3 = shut-down
BOOL bRes = FALSE;
GUID* pGuidActivePwrSchm = NULL;
DWORD dwR = PowerGetActiveScheme(NULL, &pGuidActivePwrSchm);
if(dwR == ERROR_SUCCESS)
{
dwR = PowerWriteACValueIndex(NULL, pGuidActivePwrSchm, &GUID_SYSTEM_BUTTON_SUBGROUP, &GUID_LIDCLOSE_ACTION, dwVal);
if(dwR == ERROR_SUCCESS)
{
bRes = TRUE;
}
else
{
_tprintf(L"PowerWriteACValueIndex error=%d\n", dwR);
}
if(pGuidActivePwrSchm)
{
LocalFree(pGuidActivePwrSchm);
pGuidActivePwrSchm = NULL;
}
}
else
{
_tprintf(L"PowerGetActiveScheme error=%d\n", dwR);
}
return bRes;
}
GUID_POWERBUTTON_ACTION = power button
GUID_SLEEPBUTTON_ACTION = sleep button
GUID_USERINTERFACEBUTTON_ACTION = sometimes another OEM sleep button