wince设备的屏幕显示控制

最近一个项目中程序运行在PDA上 wince系统,需要节省电源,就找了些相关的资料,现在把我的心得和问题跟大家分享下。

   1。自己控制屏幕的关闭,但是后台线程依然运行(不是关背景灯)我就直接给代码了!

//add by zhangjun for close scerrn
#include
#include
// GDI Escapes for ExtEscape()
#define QUERYESCSUPPORT    8

#define GETVFRAMEPHYSICAL   6144
#define GETVFRAMELEN    6145
#define DBGDRIVERSTAT    6146
#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;

先加上面的定义!

再用下面这个函数

void CloseOpenScreen(boolean yes)
{

 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",
    MB_OK);
 else
 {
  VIDEO_POWER_MANAGEMENT vpm;
  vpm.Length = sizeof(VIDEO_POWER_MANAGEMENT);
  vpm.DPMSVersion = 0x0001;
  
// Power off the display
  if (yes)
  {
   vpm.PowerState = VideoPowerOff;
   ExtEscape(gdc, SETPOWERMANAGEMENT, vpm.Length, (LPCSTR) &vpm,
   0, NULL);
  }
  
  else
  {
   vpm.PowerState = VideoPowerOn;
// Power on the display
  ExtEscape(gdc, SETPOWERMANAGEMENT, vpm.Length, (LPCSTR) &vpm,
   0, NULL);
  }
  ::ReleaseDC(NULL, gdc);
 }
}

以上代码在多谱达 818和 828上面测试通过,不过使用的人一定要注意,让你的程序在关了屏幕以后能自己打开屏幕!呵呵要不你就自己重新启动机器吧!

 

这里还有段代码说是可以控制某个设备的电源状态,但是我试了没什么效果。
 hPwrReq = SetPowerRequirement(TEXT("BKL1:"), D3, POWER_NAME, NULL, 0);
if(!hPwrReq)
DEBUGMSG(1, (TEXT("SetPowerRequirement failed with 0x%x/r/n"), GetLastError()));
ReleasePowerRequirement(hPwrReq);

 

最后说下我的问题。我的程序需要和蓝牙设备通讯,在没有连接蓝牙设备的时候,我用第一种方法能正常控制我设备屏幕的开关,但是当连接上蓝牙设备以后 就不受控制了,现象是闪一下,屏幕就又亮了,而且这个时候手动关闭屏幕也无效,也是闪一下就有打开了,但是等过一段时间不操作机器,他自己又会进入挂起状 态。

我现在想实现的就是在连接蓝牙的情况了能自己控制屏幕的开关,同时系统不会挂起。各位看了我的blog的帮帮忙!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值