VBGood网站全文搜索 Google

搜索VBGood全站网页(全文搜索)
首页 - 经验之谈 - 用VB编写定时关闭计算机的程序
发表评论(0)作者:, 平台:, 阅读:10381, 日期:2000-03-12


用VB编写定时关闭计算机的程序




上海船舶电子设备研究所 洪杭迪

微软的VB以简单易用,功能强大而著称,使用VB可以很容易地编写出定时关闭 计算机的程序。以下是一个简单的定时关闭计算机的程序,供各位使用VB的朋友参 考,如有何不适之处,请多指点!


定时关闭计算机,很显然,有两个关键点:

1.定时。可以用VB中的Timer控件结合计算机的系统时间来进行精确的定时。

2.关闭计算机。这可以调用Win32 API函数 ExitWindowsEx 来关闭计算机。---


下面首先来说明一下 ExitWindowsEx 函数,该函数在VB中的声明如下:


Declare Function ExitWindowsEx Lib "user32" Alias "ExitWindowsEx" _

(ByVal uFlags As Long, ByVal dwReserved As Long) As Long


【返回值】

Long,非零表示成功,零表示失败。

【参数表】

uFlags - Long,

指定下述一个或多个标志(用OR运算符合并到一起)

EWX_FORCE=4

强迫中止没有响应的进程

EWX_LOGOFF=0

中止进程,然后注销

EWX_SHUTDOWN=1

关掉系统电源(如果可能的话,ATX电源就可以)

EWX_REBOOT=2 重新引导系统

dwReserved - Long,保留,设为零

好了,现在可以开始编程了。


1. 新建一个标准EXE工程。

2. 在窗体上放置一个TextBox控件,用以输入定时时间。

3. 在TextBox控件之下放置两个OptionButton控件,组成控件数组,用以选择定时模式。

4. 在OptionButton控件之下放置一个CommandButton.

5. 随便在窗体的某地方放置一Timer控件。


以上控件了需要设置的属性值如下:


对象 属性 设置

Text1 Text 空

Option1(0) Caption 在指定时间关机

(时间格式:00:00:00)

Index 0

Option1(1) Caption 延迟指定的时间关机

Index 0

Command1 Caption 确定

Timer1 Interval 15000(精确到1/4分钟,如要更精确可减少该值)

Enabled False


增加代码如下:


标准模块:

Option Explicit

Public Const EWX_SHUTDOWN = 1 '关闭系统


Declare Function ExitWindowsEx Lib "user32" (ByVal uFlags As Long, _

ByVal dwReserved As Long) As Long


窗体模块:


Option Explicit

Dim txtTime '保存输入时间

Dim nowTime '保存实时时间

Dim oldTime '保存开始定时时间


Private Sub Command1_Click()

oldTime = Time

If Not IsDate(Text1.Text) Then '用IsData函数判断输入的时间格式

MsgBox "你所输入的不是时间格式,请重试!", , "Wrong"

Else

txtTime = TimeValue(Text1.Text)

End If

Timer1.Enabled = True '启动定时器

Me.WindowState = 1 '最小化窗体

End Sub


Private Sub Timer1_Timer()

nowTime = Time

If Option1(0).Value Then

If DateDiff("s", nowTime, txtTime) Then

If DateDiff("s", nowTime, txtTime) < 0 Then

'用DateDiff函数判断是否到时间了

If Not ExitWindowsEx(EWX_SHUTDOWN, 0) Then

MsgBox "无法关闭计算机"

End If

End If

ElseIf DateDiff("s", nowTime, oldTime + txtTime) < 0 Then

If Not ExitWindowsEx(EWX_SHUTDOWN, 0) Then

MsgBox "无法关闭计算机"

End If

End If

End If

End Sub


结束语:以上程序在VB5.0/6.0和Win98上调试通过。其实,此程序还可增加一些花样,譬如,最后窗体不是最小化,而是调用Win32 API函数,把她的图标放在系统任务栏里,即在右下角有声音,时间等图标的地方,那是另外一个主题了。


(版主注:此文有bug,Command1_Click过程改为下述代码为好)


附:


Private Sub Command1_Click()

oldTime = Time

If Not IsDate(Text1.Text) Then '用IsData函数判断输入的时间格式

MsgBox "你所输入的不是时间格式,请重试!", , "Wrong"

Else

txtTime = TimeValue(Text1.Text)

Timer1.Enabled = True '启动定时器

Me.WindowState = 1 '最小化窗体

End If

End Sub