显示器的关闭与打开编程

(1).
SendMessage(Application->Handle,WM_SYSCOMMAND,SC_MONITORPOWER,1);//关闭显示器
SendMessage(Application.Handle,WM_SYSCOMMAND,SC_MONITORPOWER,-1);//打开显示器

SendMessage(hWnd, WM_SYSCOMMAND, SC_MONITORPOWER, 0);//关闭显示器
SendMessage(hWnd, WM_SYSCOMMAND, SC_MONITORPOWER, -1);//打开显示器

::SendMessage(GetSafeHwnd(),WM_SYSCOMMAND,SC_MONITORPOWER,1);//关闭显示器
::SendMessage(GetSafeHwnd(),WM_SYSCOMMAND,SC_MONITORPOWER,-1);//打开显示器

Monitor.ShutDown()

(2)
开始照着网上很多文章说的 SendMessagege(GetDesktopWindow(), WM_SYSCOMMAND, SC_MONITORPOWER, 2); 发现并不能关闭显示器,我找了半天都没找出问题的所在。显示器关闭后程序就可以退出了,之后如果有键盘后者鼠标的动作显示器也会自动开启。WNDCLASS wndclass ;wndclass.hInstance = hInstance ;wndclass.lpszClassName = szAppName ;hwnd = CreateWindow(szAppName, TEXT(/"LcdDown/"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL) ;

(3)
编写诸如监控、多媒体、大规模数据处理之类程序的时候,我们常常需要禁用屏幕保护和电源管理,以确保程序的正常运行。一般来说,可以使用模拟鼠标键盘动作的办法禁用95下的屏幕保护和电源管理,但是同样的方法应用到2000/NT,却常常会无效,这和系统的设置有关系。   
运用Windows平台SDK的界面API可以轻松的做到禁用屏幕保护和电源管理,唯一的缺陷是这种方法无法应用到Windows95下的Win32应用程序中。以下,我将介绍具体方法。   
   
   
  使用SystemParametersInfo这个API来实现对屏幕保护和电源管理的禁用:   
  BOOL SystemParametersInfo(  
        UINT     uiAction,         // system parameter to retrieve Or set
        UINT     uiParam,          // depends on action to be taken  
        PVOID     pvParam,         // depends on action to be taken   
        UINT     fWinIni           // user profile update option   
  );   
   
  以下是禁用屏幕保护的代码:   
  void DisableScrSaver()   
  {   
    BOOL bScrActive;      
    SystemParametersInfo(SPI_GETSCREENSAVEACTIVE, 0, &bScrActive, 0);   
    if(bScrActive)   
    {   
        SystemParametersInfo(SPI_SETSCREENSAVEACTIVE, FALSE, NULL, 0);   
    }      
  }   
  以下是启用屏幕保护的代码:   
  void CNetRGCltDlg::EnableScrSaver()   
  {   
    SystemParametersInfo(SPI_SETSCREENSAVEACTIVE, TRUE, NULL, 0);   
  }   
  由于禁用电源保护不可以在Win95下被Win32应用程序使用,所以要事先判断当前操作系统是不是Win95,这里假设已经用函数BOOL     IsWin95()实现。  
  以下是禁用电源保护的代码:   
  void DisablePmmSaver()   
  {   
    //   
    //     由于电源管理的特殊性,不能直接用SPI_SETLOWPOWERACTIVE命令字实现,而是要设置延时
    //      
    SystemParametersInfo(SPI_GETLOWPOWERTIMEOUT,0,&m_nLowpowerTimeout,0);     
    SystemParametersInfo(SPI_GETPOWEROFFTIMEOUT,0,&m_nPoweroffTimeout,0);      
    SystemParametersInfo(SPI_SETLOWPOWERTIMEOUT,0,NULL, 0);      
    SystemParametersInfo(SPI_SETPOWEROFFTIMEOUT,0,NULL, 0);   
  }   
   
  以下是启用电源保护的代码  
  void EnablePmmSaver()      
  {     
    SystemParametersInfo(SPI_SETLOWPOWERTIMEOUT,m_nLowpowerTimeout,NULL,0);     
    SystemParametersInfo(SPI_SETPOWEROFFTIMEOUT,m_nPoweroffTimeout,NULL,0);   
    m_nLowpowerTimeout = 0;      
    m_nPoweroffTimeout = 0;      
  }     
  说明:   
  1 m_nLowpowerTimeout和m_nPoweroffTimeout是用来存储原先延时的变量,当恢复电源保护时要把电源保护延时设置回原来的值;      
  2 上面的代码仅仅为了说明调用序列,实际应用时还要加上相当多的错误处理代码,这里忽略。     
  编写诸如监控、多媒体、大规模数据处理之类程序的时候,我们常常需要禁用屏幕保护和电源管理,以确保程序的正常运行。一般来说,可以使用模拟鼠标键盘动作的办法禁用95下的屏幕保护和电源管理,但是同样的方法应用到2000/NT,却常常会无效,这和系统的设置有关系。   
  运用Windows平台SDK的界面API可以轻松的做到禁用屏幕保护和电源管理,唯一的缺陷是这种方法无法应用到Windows95下的Win32应用程序中。以下,我将介绍具体方法。   



我想通过程序设置关闭显示器的时间,请问如何实现?
修改注册表:
HKEY_LOCAL_MACHINE//System//CurrentControlSet//Control//Session Manager//Power//AcPolicy
HKEY_LOCAL_MACHINE//System//CurrentControlSet//Control//Session Manager//Power//DcPolicy
HKEY_USERS//.DEFAULT//Control Panel//PowerCfg//PowerPolicies//3//Policies
SystemParametersInfo, SystemParametersInfoByval
VB声明
Declare Function SystemParametersInfo& Lib /"user32/" Alias /"SystemParametersInfoA/" (ByVal uAction As Long, ByVal uParam As Long, lpvParam As Any, ByVal fuWinIni As Long)
Declare Function SystemParametersInfoByVal& Lib /"user32/" Alias /"SystemParametersInfoA/" (ByVal uAction As Long, ByVal uParam As Long, ByVal lpvParam As Any, ByVal fuWinIni As Long)
说明
允许获取和设置数量众多的windows系统参数
返回值
Long,非零表示成功,零表示失败。会设置GetLastError
参数表
参数 类型及说明
uAction Long,指定要设置的参数。参考uAction常数表
uParam Long,参考uAction常数表
lpvParam Any,按引用调用的Integer、Long和数据结构。对于String数据,请用SystemParametersInfoByval函数。具体用法参考uAction常数表
fuWinIni Long,取决于不同的参数及操作系统,随同这个函数设置的用户配置参数保存在win.ini或注册表里,或同时保存在这两个地方。这个参数规定了在设置系统参数的时候,是否应更新用户设置参数。可以是零(禁止更新),或下述任何一个常数:
SPIF_UPDATEINIFILE 更新win.ini和(或)注册表中的用户配置文件
SPIF_SENDWININICHANGE 倘若也设置了SPIF_UPDATEINIFILE,将一条WM_WININICHANGE消息发给所有应用程序。否则没有作用。这调消息告诉应用程序已经改变了用户配置设置
注解
在调用这个函数之前,特别要注意将lpvParam参数定义成正确的数据类型
====================================================================
uAction常数表——请参考SystemParametersInfo函数
    请参考windows用户手册,了解关于这些参数以及注册表或win.ini文件的详细情况。如参数不是为一个行动指定的,则没有使用。在许多许多情况下系统参数都有自己对应的 GET 和 SET 行动;例如 SPI_GETACCESSTIMEOUT 和 SPI_SETACCESSTIMEOUT。在这些情况下,除非特别指明,否则它们之间唯一的区别就是一个用于取得信息,另一个设置信息。针对 SET 条目,只列出参数间的差异
常数 含义
SPI_GETACCESSTIMEOUT lpvParam是一个ACCESSTIMEOUT结构,其中要载入辅助访问特性计时信息。在调用函数之前,uParam必须设为ACCESSTIMEOUT结构的大小
SPI_GETANIMATION lpvParam是一个ANIMATIONINFO结构,将在其中载入窗口最小化和恢复时的动画信息。不能在NT 3.51中使用
SPI_GETBEEP lpvParam是一个Long型数据,若打开了响铃声,则设为TRUE
SPI_GETBORDER lpvParam是一个Long型数据,用于接收一个乘数(倍数),对大小可变的窗口的边框尺寸进行控制
SPI_GETDEFAULTINPUTLANG lpvParam是一个Long型数据,用于接收默认键盘布局的一个32位句柄。不能用于NT 3.51
SPI_GETDRAGFULLWINDOWS lpvParam是一个Long型数据,如在整个窗口上拖动,就会设为TRUE。如果只拖出了一个矩形轮廓,则为FALSE。要求NT 4.0 或 Windows 95支持。其中,Windows 95必须有Plus!支持,或直接安装Windows 95 OSR2
SPI_GETFASTTASKSWITCH lpvParam是一个Long型数据,如允许快速任务切换,则为TRUE。在Windows 95 和 NT 4.0中肯定是TRUE
SPI_GETFILTERKEYS lpvParam是一个FILTERKEYS结构,用于装载与键盘有关的辅助访问特性信息
SPI_GETFONTSMOOTHING lpvParam是一个Long型数据,如打开了边缘修饰特性(让字体更圆润),则为TRUE。只适用于 NT 4.0 和带 Plus! 支持的 Windows 95
SPI_GETGRIDGRANULARITY lpvParam是一个Long型数据,会设为网格间隔尺寸值
SPI_GETHIGHCONTRAST lpvParam是一个HIGHCONTRAST结构,用于装载与用户显示器有关的辅助访问特性信息。仅适用于Win95
SPI_GETICONMETRICS lpvParam是一个ICONMETRICS结构,用于装载与图标比例及排列有关的信息。仅适用于Windows 95 及 NT 4.0
SPI_GETICONTITLELOGFONT lpvParam指向一个LOGFONT结构,设置内容取决于图标标题采用的字体
SPI_GETICONTITLEWRAP lpvParam是一个Long型数据,如允许对图标标题进行自动换行,则设为TRUE
SPI_GETKEYBOARDDELAY lpvParam是一个Long型数据,设为键盘重复延时
SPI_GETKEYBOARDPREF lpvParam是一个Long型数据,如用户更喜欢用键盘而不是鼠标,则设为TRUE。如这个参数为真,windows会显示出附加的键盘接口信息,只适用于win95
SPI_GETKEYBOARDSPEED lpvParam是一个Long型数据,设为键盘的重复速率
SPI_GETMENUDROPALIGNMENT lpvParam是一个Long型数据,若弹出式菜单左对齐(默认),则设为FALSE。否则为TRUE
SPI_GETMINIMIZEDMETRICS lpvParam是一个MINIMIZEDMETRICS结构,用于装载与最小化窗口的比例及排列有关的信息。仅适用于win95
SPI_GETMOUSE lpvParam是三元素Long数组的头一个条目,条目0设为用户配置MouseThreshold1字段,条目1设为MouseThreshold2字段,条目2设为MouseSpeed
SPI_GETMOUSEKEYS lpvParam是一个MOUSEKEYS结构,要在其中装载与鼠标有关的辅助访问信息。不能在 NT 3.51中使用
SPI_GETNONCLIENTMETRICS lpvParam是一个NONCLIENTMETRICS结构,要在其中装载有关字体和环境有关的信息;这些信息会在描绘窗口非客户区域时涉及到,如边框、标题等。只适用于win95
SPI_GETSCREENSAVEACTIVE lpvParam指向一个整数;倘若屏幕保护程序处于活动状态,则设为TRUE;否则设为FALSE
SPI_GETSCREENSAVETIMEOUT lpvParam指向一个整数;它设为屏幕保护延时(以秒为单位)
SPI_GETSERIALKEYS lpvParam是一个SERIALKEYS结构,用于装载与输入设备(用于模拟键盘输入)有关的辅助访问特性信息。只适用于win95
SPI_GETSHOWSOUNDS lpvParam是一个Long型数据,倘若应用程序应该用可视线索来代替声音,则设为TRUE。它的作用与GetSystemMetrics函数的SM_GETSHOWSOUNDS选项是相同的
SPI_GETSNAPTODEFBUTTON lpvParam是一个Long型数据,倘若鼠标会自动移到新对话框的默认按钮,则设为TRUE。只适用于NT 4.0
SPI_GETSOUNDSENTRY lpvParam是一个SOUNDSENTRY结构,用于装载让windows提供可视标志(而不是系统声音)时涉及的辅助访问特征信息。调用之前,必须将uParam设为SOUNDSENTRY结构的长度
SPI_GETSTICKYKEYS lpvParam是一个STICKYKEYS结构,用于装载允许一名用户顺序按键(而不是同时按下)时涉及的辅助访问特征信息。同时按键的例子包括Shift+, Ctrl+, Alt+ 等。调用之前,必须将uParam设为STICKYKEYS结构的长度
SPI_GETTOGGLEKEYS lpvParam是一个TOGGLEKEYS结构,要在其中装载按下一个开关键(NumLock,CapsLock,ScrollLock)后播放声音提示时涉及的辅助访问特征信息。windows会用一个不同的声音指出开或关状态。调用之前,必须将uParam设为TOGGLEKEYS结构的长度
SPI_GETWORKAREA lpvParam是一个RECT结构,用于装载屏幕的工作区
SPI_ICONHORIZONTALSPACING 如lpvParam为NULL,则uParam代表桌面图标新的水平间隔距离,以像素为单位
SPI_ICONVERTICALSPACING 与SPI_ICONHORIZONTALSPACING相似,只不过指定图标的垂直间距
SPI_LANGDRIVER lpvParam是一个字串,用于容纳新的语言驱动程序文件的名称
SPI_SETACCESSTIMEOUT 与SPI_GETACCESSTIMEOUT的参数相同
SPI_SETANIMATION 与SPI_GETANIMATION的参数相同
SPI_SETBEEP uParam为TRUE时打开响铃,FALSE关闭
SPI_SETBORDER uParam代表一个乘数,用于控制尺寸可变的的窗口边框的大小
SPI_SETDEFAULTINPUTLANG 与SPI_GETDEFAULTINPUTLANG的参数相同
SPI_SETDESKPATTERN 从注册表或win.ini中强制窗口恢复当前的桌面方案
SPI_SETDESKWALLPAPER lpvParam代表一个字串,用于容纳作为桌面墙纸使用的一个位图文件的名称
SPI_SETDOUBLECLICKTIME uParam代表连续两次单击被当作一次双击处理时需要间隔的时间(以毫秒为单位)
SPI_SETDOUBLECLKHEIGHT uParam代表新的双击高度,可参考GetSystemMetrics函数的注解
SPI_SETDOUBLECLKWIDTH uParam代表新的双击宽度,可参考GetSystemMetrics函数的注解
SPI_DRAGFULLWINDOWS uParam为TRUE时打开全窗口拖动,否则为FALSE。仅适用于win95
SPI_SETDRAGHEIGHT uParam代表一个矩形的高度(以像素为单位),用于决定拖动操作何时开始。只适用于win95
SPI_SETDRAGWIDTH uParam代表一个矩形的宽度(以像素为单位),用于决定拖动操作何时开始。只适用于win95
SPI_SETFASTTASKSWITCH uParam为TRUE时打开快速任务切换,FALSE则关闭
SPI_FILTERKEYS 参数与 SPI_GETFILTERKEYS 相同
SPI_SETFONTSMOOTHING uParam为TRUE时打开字体修饰(圆润)。只能在NT 4.0 和得到 Plus! 支持的 Win95(或 Windows 95 OSR2)中使用
SPI_SETGRIDGRANULARITY uParam代表新的网格间距
SPI_SETHIGHCONTRAST 参数与 SPI_GETHIGHCONTRAST 相同
SPI_SETICONMETRICS 参数与 SPI_GETICONMETRICS 相同
SPI_SETICONTITLELOGFONT lpvParam是一个LOGFONT结构,用于定义图标标题采用的字体。uParam指定LOGFONT结构的大小。如两者均为NULL,则采用系统启动时定义的字体
SPI_SETICONTITLEWRAP uParam为TRUE时打开图标标题自动换行
SPI_SETKEYBOARDDELAY uParam代表新的键盘重复延时
SPI_SETKEYBOARDPREF 若uParam为TRUE,表明用户相比键盘和鼠标更喜欢用前者。参考SPI_GETKEYBOARDPREF
SPI_SETKEYBOARDSPEED uParam代表新的键盘重复速率
SPI_SETLANGTOGGLE 令窗口从系统注册表中重新装载热键信息,以便在键盘布局之间交换
SPI_SETLOWPOWERACTIVE uParam为TRUE时允许节能屏幕保护程序模式。只适用于win95
SPI_SETLOWPOWERTIMEOUT uParam代表新的节能屏幕保护程序延时。只适用于win95
SPI_SETMENUDROPALIGNMENT uParam为FALSE时设置弹出菜单左对齐,TRUE则右对齐
SPI_SETMINIMIZEDMETRICS 参数与SPI_GETMINIMIZEDMETRICS一样
SPI_SETMOUSE lpvParam是一个三元素整数数组的头一个条 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值