指定时间 定时锁屏
数字职场
本期挑战题目:时间到了,软件就自动退出,你能编程实现吗?
本期知识:时间控制
知识运用:管理软件、控制软件
本期题目:小孩长时间玩电脑对他们的身体不好,如果能自定义玩电脑的时间就好了(时间到后自动锁屏,效果等同于按组合键“Win+L”),你能编程实现吗?
分析题目,可以知道要达到目的,一定要用到时间控制。时间控制的原理是读取输入的时间,时间到了就根据预定的指令,完成某种操作。从本题来看,我们需要两个输入框,分别输入小时和分钟,以便自定义时间。
然后将输入的时间数据折算为秒后相加存储到时间变量中,使用Timer控件来进行计时,当Timer计时器累加的时间大于等于我们设定的时间变量时,就执行锁屏操作。下面,我们以Delphi语言为例,讲讲具体的开发过程。
定时锁屏功能设计步骤
第一步:启动Delphi新建一个项目,在窗体上添加两个输入框用于指定时间,两个按钮(设置按钮用来接收输入框中指定的时间并启动Timer计时器,锁屏按钮用于直接锁屏操作),一个Timer控件用来计时。
接着,定义全局变量times:integer,作用是把输入框中输入的值折算为秒后存放在时间变量中;定义全局i:integer,作用是在Timer计时器中进行累加,每次累加后与Timer变量进行比较,当i的值大于等于Timer表示计时器工作完成,执行锁屏任务。
第二步:添加设置按钮。代码如下:
var
hour,minute:integer;
begin
hour:=StrToInt(Edit1.Text );
minute:= StrToInt(Edit2.Text );
times:=hour*3600+minute*60;
timer1.Enabled :=true;
end;
第三步:添加Timer控件。Timer控件的Interval默认值为1000,也就是每隔1秒执行其OnTimer事件一次,我们只需每隔1秒把全局变量i的值加1,然后和Timer进行比较即可。代码如下:
i:=i+1;
if i>= times then Button1.Click;//调用锁屏按钮的代码
第四步:设定锁屏操作。锁屏操作就是向Windows发送组合键“Win+L”,用函数keybd_event来实现,代码如下:
keybd_event(91 ,0,KEYEVENTF_EXTENDEDKEY + 0,0);
keybd_event(76,0,KEYEVENTF_EXTENDEDKEY + 0,0);
keybd_event(76,0,KEYEVENTF_EXTENDEDKEY + KEYEVENTF_KEYUP,0);
keybd_event(91 ,0,KEYEVENTF_EXTENDEDKEY + KEYEVENTF_KEYUP,0);
Timer1.Enabled :=false;
最后将程序复制到系统文件夹下,修改注册表实现程序的开机自启动即可完成全程操作。
实际应用
时间控制在大量管理软件、控制软件中被用到,例如监控某个时间段的上网流量,如果超标了就限制流量。除了此类软件,时间控制在游戏辅助软件中也有用武之地,例如在游戏中每隔2分钟按一次F1键(用于网游中刷怪练级自动补血,在游戏中设置补血药水为F1。当然要获取游戏程序的窗体名或类名),指定N小时后自动弹出对话框提醒自己要休息眼睛等。
露一手
上期的题目,很多编程爱好者踊跃参与,其中来自甘肃的蒲浪,表现非常耀眼,他的程序考虑周到、高效实用,关键代码如下所示。我们将给予甘肃的蒲浪现金奖励。
Private Sub UpdateValues()
Dim dblCounterValue As Double
Dim pdhStatus As Long
Dim strInfo As String
Dim i As Long
PdhCollectQueryData (hQuery)
dblCounterValue = _
PdhVbGetDoubleCounterValue(Counters(i).hCounter, pdhStatus)
If (pdhStatus = PDH_CSTATUS_VALID_DATA) _
Or (pdhStatus = PDH_CSTATUS_NEW_DATA) Then
MsgBox "CPU使用情况:" & Format$(dblCounterValue, "0.0") & "%"
End If
End Sub
Private Sub AddCounter(strCounterName As String, hQuery As Long)
Dim pdhStatus As PDH_STATUS
Dim hCounter As Long
pdhStatus = PdhVbAddCounter(hQuery, strCounterName, hCounter)
Counters(currentCounterIdx).hCounter = hCounter
currentCounterIdx = currentCounterIdx + 1
End Sub