走进数码网--数码时代的电脑应用专家首页·新闻·数码·硬件·摄友·产品·网络·术语·技巧·下载·卖场·答疑·笑话·读编·RSS·博客·论坛·繁體版
数码时尚频道首页频道首页·数码摄影·摄友部落·数字影像·随身音频·移动通讯·掌上天地·掌机娱乐·移动存储
数码下载 | 产品库 | 数码答疑 | 术语金典 | 卖场黄页 | 热点追踪 | 最新文章 | 推荐文章 | i论坛
 您现在的位置: 走进数码网 >> 数码时尚 >> 掌上天地 >> PDA应用 >> 数码正文
运行应用程序时关闭显示

发表日期:2005-5-21 来源:走进数码网 作者:怪鸭兽 阅读:
收藏至:新浪ViVi | 天天网摘 | 人人网摘 | 加加文摘 | YouNote书签 | 我摘网摘 | 博采中心 | 和讯网摘

2001年1月7日

像Microsoft Windows Media Player for Pocket PC 这样的应用程序允许用户在程序运行时关闭屏幕显示。本文将向您展示如何在您自己的应用程序中做到这一点。

你需要具备:

  • The Microsoft eMbedded Visual Tools
  • Microsoft eMbedded Visual C++

支持的语言
所有语言

代码...
为了简单起见,我们先试着用一个简短的WinMain 函数来关闭屏幕显示,等5秒钟,然后把显示切换回来。通过以下这些步骤,您还可以检测显示驱动程序是否支持使这个功能正常工作的电源管理换码序列。检测显示驱动程序使您可以得到在程序中使用代码所需要的所有必要信息。

为了创建这个样本程序,按以下步骤:

  1. 用eMbedded Visual C++新建一个简单的Pocket PC 应用程序。
  1. 用以下代码替换WinMain 函数中的代码:
int WINAPI WinMain ( HINSTANCE hInstance, HINSTANCE hPrevInstance, 
                     LPWSTR pszCommandLine, int nCommandShow) 
{
	HDC gdc;
	int iESC=SETPOWERMANAGEMENT;

	gdc = ::GetDC(NULL);
	if (ExtEscape(gdc, QUERYESCSUPPORT, sizeof(int), (LPCSTR)&iESC, 
                       0, NULL)==0)		
                 MessageBox(NULL,
                  L"orry, your Pocket PC does not support DisplayOff"
                  L"ocket PC Display Off Feature"
                  MB_OK);
	else
	{
		VIDEO_POWER_MANAGEMENT vpm;
		vpm.Length = sizeof(VIDEO_POWER_MANAGEMENT);
		vpm.DPMSVersion = 0x0001;
		vpm.PowerState = VideoPowerOff;
// Power off the display
		ExtEscape(gdc, SETPOWERMANAGEMENT, vpm.Length, (LPCSTR) &vpm, 
                             0, NULL);
		Sleep(5000);
		vpm.PowerState = VideoPowerOn;
// Power on the display
		ExtEscape(gdc, SETPOWERMANAGEMENT, vpm.Length, (LPCSTR) &vpm, 
                             0, NULL);
		::ReleaseDC(NULL, gdc);
	}
	return 0;
}
  1. 把以下声明添加到WinMain 函数前面:
// GDI Escapes for ExtEscape()
#define QUERYESCSUPPORT    8
 
// The following are unique to CE
#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;

这些声明是我从随Platform Builder 3.0一同发售的“include” 文件 PWINGDI.H 中抽取出来的。

  1. 现在编译并把程序下载Pocket PC

如果您运行程序,您将看见屏幕显示被关闭,5秒钟后恢复显示。在您的Pocket PC不支持关闭电源特性的情况下,会显示这样一条信息,“对不起,您的Pocket PC不支持关闭屏幕显示功能”。

您可以在此下载示例代码:

什么样的应用程序可以使用这个特性?
正如我前面所说的, Windows Media Player 是能使用本特性的程序中一个完美的例子,因为您在您听音乐的时候,您不必为屏幕显示消耗您宝贵的电池电力。具有类似蜂窝电话这样功能的应用程序也能在进行通话时关闭显示。另外一个有趣的应用程序是屏幕保护,它在Pocket PC被放入底座支架的时候被激活。这个程序开始显示一幅漂亮的图像,然后在同步和报警功能依然工作的情况下,关闭屏幕显示。当然,这个功能对于视频播放器来说没有什么意义,但是它对于那些需要花费时间来进行渲染或计算的程序来说是非常有用的。

须知
在没有办法能恢复屏幕显示的情况下,永远不要使用上面的代码。您应该总是可以使用一个切换键、屏幕点击或者按下任何键来恢复屏幕显示。否则,您的Pocket PC可能会因无法使用而不得不被关闭。尽管手册上说应用程序在被Pocket PC操作系统关闭的情况下,也可以保存它的所有状态, 但是如果您的程序处于挂起状态,它不保存屏幕显示的状态。(标志文档仅仅能从VeriTest得到。)这会需要您在应用程序从挂起状态恢复后,立即关闭屏幕显示。在最坏的情况下,您的应用程序会造成Pocket PC无法使用,因为它一被激活就会关闭屏幕显示。

此外,并不是所有的Pocket PC都支持这个特性,因为该特性要依靠于OEM的显示驱动程序。Terry在他的Casio E115中成功地测试了这段代码,我在 Compaq iPAQ 上进行的测试也取得了成功。

感谢来自Software 309公司的Terry Myhrer为本文寄来了原始代码。- C.M.



【责任编辑:怪鸭兽】

发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
发表评论(评论内容只代表网友观点,与本站立场无关。)

姓名: * QQ:
性别:MSN:
E-mail: ICQ:
主页:评分:1分2分3分4分5分
内容:
·请遵守《互联网电子公告服务管理规定》《全国人大常委会关于维护互联网安全的决定》及中华人民共和国其他法律法规。
·用户需对自己在使用本站服务过程中的行为承担法律责任(直接或间接导致的)。
用户登录
站内搜索


文章资讯软件下载
摄友部落i 论 坛
相关文章
  • 启动 Media Player :一些关于外观的问题

  • 和 Money 2000 同步现有的 Money 数据

  • 如何移动和存储您最喜爱的音乐文件

  • 为便携设备准备 PowerPoint幻灯片

  • 创建功能设置的快捷方式

  • 放置快捷方式

  • 高速同步终极攻略

  • 通过 USB 端口进行同步

  • 转换数字音频格式

  • 设置 GSM/PCS

  • 图片文章
    热点文章
    关于我们 | 广告服务 | 投稿指南 | 人才招聘 | 隐私条款 | 会员注册 | 友情链接 | 意见反馈 | 网站地图
    走进数码网 走进宠物网 走进广告网 轻松网址导航
    Copyright © 2002-2005 走进宠物网 所有文章和图片版权所有
    未经授权禁止一切非法转载、摘编、复制或建立镜像,否则将追究其法律责任。
    京ICP备05055013号 68互联提供网络带宽