(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是一个三元素整数数组的头一个条 |
windows system info
最新推荐文章于 2017-09-28 14:40:00 发布