在离开模式下唤醒窗户



我正在使用Windows AwayMode关闭显示器和音频,而不是进入睡眠模式。这工作正常。当发生我想要的事件时,如何"唤醒"系统?我可以检测到该事件,但我不知道如何重新打开显示器并使系统再次显示为唤醒状态。

我已经尝试GetCursorPos()SetCursorPos()尝试移动光标,但这不起作用。

我也尝试了CreateWaitableTimer()SetWaitableTimer()但也没有用。 我将 fResume 选项设置为 TRUE。

我还尝试使用PowerSetRequest()手柄关闭AwayMode并将其设置为NULL。那也行不通。

我也尝试过SetThreadExecutionState()电话,但没有运气。 这里还定义了离开模式。 我试图设置并清除它,但显示器没有重新打开。

我找到了一种使用带有鼠标移动的SendInput((的方法。 我还必须使用 SetThreadExecutionState(( 让系统知道用户存在,否则它将在 2 秒内返回 AwayMode。 这是我使用的代码。

// Get the current position to ensure we put it back at the end
POINT pt;
GetCursorPos(&pt);
// Make a mouse movement
// Go to upper left corner (0,0)
INPUT input;
input.type = INPUT_MOUSE;
input.mi.mouseData = 0;
input.mi.dx = 0;
input.mi.dy = 0;
input.mi.dwFlags = MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE;
SendInput(1, &input, sizeof(input));
Sleep(5); // Just in case this is needed
// Go to lower right corner (65535,65535)
input.mi.dx = 65535;
input.mi.dy = 65535;
input.mi.dwFlags = MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE;
SendInput(1, &input, sizeof(input));
Sleep(5); // Just in case this is needed
// Restore to original
SetCursorPos(pt.x, pt.y);
// Now let the system know a user is present
DWORD state = SetThreadExecutionState(ES_DISPLAY_REQUIRED | ES_SYSTEM_REQUIRED);

最新更新