C++ 如何关闭Win8平板电脑的显示
有没有办法在不将Win8平板电脑置于睡眠模式的情况下关闭其显示C++ 如何关闭Win8平板电脑的显示,c++,windows,winapi,windows-8,tablet,C++,Windows,Winapi,Windows 8,Tablet,有没有办法在不将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
我使用下面的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连接。但我们不能在平板电脑处于睡眠模式时这样做。此外,监视器on功能(请参阅上面的代码)在睡眠模式下不工作
有人知道我如何只能关闭Win8平板电脑的显示吗?您可以尝试在电脑进入睡眠状态时使用来保持电脑处于开机状态。我不确定当计算机处于这种状态时,是否仍然可以使用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;
}
}
#包括
#包括
#包括
#pragma注释(lib,“powrpof.lib”)
#包括
使用名称空间std;
int main()
{
尝试
{
电源请求上下文;
context.Version=POWER\u REQUEST\u context\u Version;
context.Flags=POWER\u REQUEST\u context\u SIMPLE\u STRING;
context.Reason.SimpleReasonString=L“关闭屏幕”;
CHandle powerRequest(PowerCreateRequest(&context));
if(powerRequest==无效的\u句柄\u值)
AtlThrowLastWin32();
如果(!PowerSetRequest(powerRequest,PowerRequestAwayRequested))
AtlThrowLastWin32();
如果(!SetSuspendState(FALSE,FALSE,FALSE))
AtlThrowLastWin32();
如果(!PowerSetRequest(powerRequest,PowerRequestAwayRequested))
AtlThrowLastWin32();
返回0;
}
捕获(常量CAtlException&e)
{
wcout不清楚“Win8平板电脑”可能意味着什么。你当然不能为启动Windows RT的平板电脑编写这样的代码。一定要用WACK检查你的代码。在我们的情况下,这是一款“华硕VivoTab智能”。在这台平板电脑上,在真正的Windows机器上运行真正的Windows 8,而不是Windows RT。