一、应用场景:
当你离开电脑一小会儿时,为了省电和节约电池电量,又不想改变系统电源选项,那么这个程序可以帮助你快速关闭显示器。
二、系统支持:
我是在WinXP、Win7下使用的。
三、本程序的特点:
1.点击马上可以关闭显示器,随便动一下鼠标或按键显示器即可重新开启;
2.加入了循环关闭机制,可以防止因意外的碰触或其他程序的影响而使显示器重新开启(这些情况下3s之内会重新关闭显示器);
3.加入了系统空闲时间的检查,当你在真正使用电脑的时候,程序可以智能退出;
4.本程序开源(遵守LGPL),你可以加入自己想要的功能。
三、程序及工程源码下载:
1.程序:
http://dl.dbank.com/c0a1h5wfw3
2.工程源码:
http://download.csdn.net/detail/greaterforever/3710103
请使用Microsoft Visual Basic 6.0打开。
<代码片段>
''关闭显示器 V1.0
''License: LGPL
Option Explicit
''Forces the system to be in the working state by resetting the system idle timer.
Private Const ES_SYSTEM_REQUIRED = &H1
''关闭显示器
Private Const MONITOR_OFF = 2&
Private Const WM_SYSCOMMAND = &H112
Private Const SC_MONITORPOWER = &HF170&
''Enables applications to inform the system that it is in use,
''thereby preventing the system from entering the sleeping power state or turning off the display while the application is running.
Private Declare Function SetThreadExecutionState Lib "kernel32" (ByVal esFlag As Integer) As Integer
''This function sends the specified message to a window or windows.
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Any) As Long
''获取系统空闲时间
Private Declare Function GetLastInputInfo Lib "user32" (plii As LASTINPUTINFO) As Boolean
Private Declare Function GetTickCount Lib "kernel32" () As Long
Private Type LASTINPUTINFO
cbSize As Long
dwTime As Long
End Type
''智能退出标志位
''1 关屏状态
''2+ 关屏后被唤醒
Dim auto_exit As Integer
Private Sub cmdCloseMonitor_Click()
Call SendMessage(frmMain.hwnd, WM_SYSCOMMAND, SC_MONITORPOWER, MONITOR_OFF)
auto_exit = 1 '关屏状态
End Sub
Private Sub cmdCloseAll_Click()
End
End Sub
Private Sub Form_Load()
Call cmdCloseMonitor_Click
End Sub
Private Sub Timer1_Timer()
''获取系统剩余时间后重新关闭显示器
Dim lii As LASTINPUTINFO
lii.cbSize = Len(lii)
If GetLastInputInfo(lii) Then
If (GetTickCount - lii.dwTime) \ 1000 > 3 Then '系统空闲大于3秒
Call cmdCloseMonitor_Click
ElseIf auto_exit >= 1 Then '关屏后被唤醒
auto_exit = auto_exit + 1
If auto_exit >= 4 Then cmdCloseAll_Click '检测3次后退出程序
End If
End If
Call SetThreadExecutionState(ES_SYSTEM_REQUIRED) '重置系统空闲计时器
End Sub