wince关闭屏幕失败的问题
os需要加哪些驱动等才能满足调用ExtEscape关闭屏幕,应用层代码大致如下:
#define QUERYESCSUPPORT 8
#define SETPOWERMANAGEMENT 6147
#define GETPOWERMANAGEMENT 6148
typedef enum _VIDEO_POWER_STATE {
VideoPowerOn = 1,
VideoPowerStandBy,
VideoPowerSuspend,
VideoPowerOff
} VIDEO_POWER_STATE, *PVIDEO_POWER_STATE;
typedef struct _VIDEO_POWER_MANAGEMENT {
ULONG Length;
ULONG DPMSVersion;
ULONG PowerState;
} VIDEO_POWER_MANAGEMENT, *PVIDEO_POWER_MANAGEMENT;
bool CloseOpenScreen(bool bOpen)
{
HDC gdc;
int iESC=SETPOWERMANAGEMENT;
gdc = ::GetDC(NULL);
if (ExtEscape(gdc, QUERYESCSUPPORT, sizeof(int), (LPCSTR)&iESC, 0, NULL)==0)
{
::MessageBox(NULL,L"Sorry, your Pocket PC does not support DisplayOff",
NULL,MB_OK);
return false;
}
else
{
VIDEO_POWER_MANAGEMENT vpm;
vpm.Length = sizeof(VIDEO_POWER_MANAGEMENT);
vpm.DPMSVersion = 0x0001;
if (!bOpen)
{
vpm.PowerState = VideoPowerOff;
}
else
{
vpm.PowerState = VideoPowerOn;
}
int nRes = ExtEscape(gdc, SETPOWERMANAGEMENT, vpm.Length, (LPCSTR) &vpm,
0, NULL);
RETAILMSG(1, (L"\n====ExtEscape open=%d, nres = %d, error=%d====\n", bOpen, nRes, GetLastError()));
::ReleaseDC(NULL, gdc);
if (nRes <= 0)
return false;
else
return true;
}
}
目前我编译的系统(prima平台wince6.0),调用以上函数时,关闭屏幕,第一次调用ExtEscape查询是否支持,返回非0说明支持此函数,但下一步调用关闭屏幕,就失败了,返回0, GetLastError为2。
请问,系统缺少什么东西,导致这个函数调用失败?