1

有没有办法在不让平板电脑进入睡眠模式的情况下关闭 Win8 平板电脑的显示?

我使用以下 C++ 代码,但此代码将平板电脑置于睡眠模式:

const LPARAM OFF = 2;
// const LPARAM LOW = 1;
const LPARAM ON = -1;
LPARAM state = 0;

if (monitorOn) state = ON;    // set monitor on
else state = OFF;             // set monitor off

SendMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, state);

我们需要在显示屏关闭时创建一个新的 VNC 连接。但是当平板电脑处于睡眠模式时,我们不能这样做。此外,功能监视器(参见上面的代码)在睡眠模式下也不起作用......

有人知道我怎么只能关闭 Win8 平板电脑的显示吗?

4

1 回答 1

0

您可以尝试使用电源管理 API在计算机进入睡眠状态时使其保持开启状态。我不确定当计算机处于这种状态时您是否仍然可以使用 VNC 进行连接,但值得一试。

#include <atlbase.h>
#include <atlutil.h>
#include <powrprof.h>

#pragma comment(lib, "PowrProf.lib")

#include <iostream>

using namespace std;

int main()
{
  try
  {
    POWER_REQUEST_CONTEXT context;
    context.Version = POWER_REQUEST_CONTEXT_VERSION;
    context.Flags = POWER_REQUEST_CONTEXT_SIMPLE_STRING;
    context.Reason.SimpleReasonString = L"Turn screen off";

    CHandle powerRequest(PowerCreateRequest(&context));
    if(powerRequest == INVALID_HANDLE_VALUE)
      AtlThrowLastWin32();

    if(!PowerSetRequest(powerRequest, PowerRequestAwayModeRequired))
      AtlThrowLastWin32();

    if(!SetSuspendState(FALSE, FALSE, FALSE))
      AtlThrowLastWin32();

    if(!PowerSetRequest(powerRequest, PowerRequestAwayModeRequired))
      AtlThrowLastWin32();

    return 0;
  }
  catch (const CAtlException &e)
  {
    wcout << "Error: " << AtlGetErrorDescription(e).GetString() << endl;

    return e.m_hr;
  }
}
于 2014-03-15T02:20:19.000 回答