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

2024-10-19 版权声明 我要投稿

用VB编写定时关闭计算机的程序VB(精选3篇)

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

用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控件。

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

对象属性设置

Text1Text空

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

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

Index0

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

Index0

Command1Caption确定

Timer1Interval15000(精确到1/4分钟,

如要更精确可减少该值)

EnabledFalse

增加代码如下:

标准模块:

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

ldTime = 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) <0

Then注释:用DateDiff函数判断是否到时间了

If Not ExitWindowsEx(EWX_SHUTDOWN, 0)

ThenMsgBox (”无法关闭计算机“)

End If

End If

Else

If DateDiff(”s“, nowTime, oldTime + txtTime) < 0

ThenIf Not ExitWindowsEx(EWX_SHUTDOWN, 0)

ThenMsgBox (”无法关闭计算机“)

End If

End If

End If

End Sub

---- 结束语:以上程序在VB5.0/6.0和Win98上调试通过,

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

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

(1) 虚拟键盘的设计

金山打字通是键盘操作学习过程中常用的一款软件, 通过近一二年的课堂跟踪, 发现相当一部分学生对其中的“拯救苹果”这个小游戏很感兴趣。究其原因, 程序本身简单易操作, 对学生来讲, 是以“静” (学生已熟悉键盘布局、了解手指分工, 静待随机字符的出现) 制“动” (按键击中随机产生的字符) 。练习之初, 为了能够取得好成绩, 除了必须坚持的“技术动作” (保证8个基本键位的指法正确) 外, 还必须保持平和的心态, 身心放松。正如古人所说, “静生智, 定生慧”。练习中许多学生建议, 当学生击键不正确时, 要是在屏幕上能够给出提示告知究竟按错的是哪个键, 那就太好了。通过与学生沟通发现有必要设计一个虚拟键盘。于是, 笔者设计了这样一个程序:程序开始运行, 会从窗口上方会飘落一个随机产生的字母, 敲击键盘相应的字母键如果击中, 该字母就消失, 然后在窗口上方又随机生成一个字母下落。与之相对应的是, 学生每按下键盘的一个键, 则位于窗口上方或下方的虚拟键盘会同步显示按键状态, 保证了学生专心关注窗口内容, 不用再低头查看物理键盘, 从而为进入盲打状态提供了一个实时的、同步的、动态的反馈平台。

(2) 设计要点

1) 利用窗体的Picture属性导入一个主键盘区的截图, 可将其放置在窗体的上方或下方。因为, 有的学生喜欢虚拟键盘在上方, 有的则喜欢在下方, 在设计时, 对截图位于上方和下方这两种情形都进行了设计。实际需要设计代码相同、用户界面略有不同的两个程序, 实际运行如图1、图2。

2) 在每个按键上都要添加一个Label控件。

(1) 所有Label控件的通用属性是:BackStyle:0;BorderStyle:1。

(2) 对这些控件进行分类, 可分为数字键区、字母键区、特殊键区等。如主键盘区的第一行中的15个键上的Label控件列为数字键区控件, 命名格式为lblNum, 通过index属性设定其标识号, 这个标识号是根据相关字符的ASCII码值来决定, 如数字1的ASCII码的值是49, 数字1键上的Label控件名为lblNum (49) , 其他依此类推。

3) 添加一个模块, 内容是:

Public Declare Function GetKeyState Lib"user32" (ByVal nVirtKey As Long) As Integer

4) 声明部分:

Dim Esc, B1, minus, plus, straight, backspace, TTAB, Lett (65 To 90) , num (48 To 57) , Caps, Shft, Ctrl, Alt, LB, RB, Q, A, TD, SBL, SBR, SP, Ent

Dim ff (112 To 123)

Dim i, o, io

5) 核心代码示例:

(在窗体上创建3个时间控件, 其中的第3个时间控件用来监控虚拟键盘的按键情况, Interval属性设置为1。

Private Sub Timer3_Timer ()

……

'以下代码是针对数字键区0———9键的判断

For o=48 To 57 Step 1

num (o) =GetKeyState (o)

If num (o) <0 Then

lblNUM (o) .Visible=True

Else

lblNUM (o) .Visible=False

End If

……

End Sub

(3) 资源文件的调用

在上面的测试练习中, 测试成绩能够达到每分钟正确击键数为60个字符的学生, 将进入实战阶段, 即一段或多段英文、中文或中英文混合字符的输入测试阶段。在这一阶段, 设计如图3的测试程序:打开测试程序, 单击其中任何一个单选按钮, 则相关的测试文本装载到Text1中, Text2中将自动出现输入光标, 每输入一个字符将会与Text1的文本作比较, 若不正确则Text2中已输入的文字全部变为红色, 录入正确则文字颜色是蓝色。

对于其中的测试文本, 通常的设计方案是, 用VB文件操作中的Open命令将文件中的文本信息读取到Text1中。这种方法简单, 但有一定的局限性。书写代码时, 必须指明调用路径, 比较繁琐;在将程序封装成可执行文件时, 除了生成可执行文件外, 同时还必须附带一个文件夹, 专门用来存放测试用的文本文件。这个文件夹完全处于开放状态, 一旦移动、删除或重命名则调用出错, 其中的文本文件更有可能被学生修改得“面目全非”。为避免类似的情况出现, 可以把这些练习文件创建成一个资源文件, 使用LoadResData函数调用相应的文本文件, 简化了程序的编写并减少了发生错误的可能。

所谓资源文件, 就是指在程序运行时用到的资源集中在一起的一个文件。资源文件可以存放文字、图片、声音等资源。当使用资源文件的应用程序编译成可执行文件之后, 资源文件则完全“融入”到可执行文件之中, 成为EXE文件的一个组成部分。资源文件的使用如下:

1) 添加资源文件编辑器

启动VB6.0企业版, 单击菜单“外接程序”下的“外接程序管理器”, 在弹出的对话框的列表框中选择“VB资源编辑器”, 单击“确定”按钮后退出对话框。

2) 编辑资源文件

单击“工具”菜单栏中的“资源编辑器”图标, 打开“VB资源管理器”窗口, 单击窗口上的“添加自定义资源”图标, 根据提示将5个文本文件添加到一个资源文件中, 如图4。

3) 使用资源文件

在使用资源文件中的资源时, 要用到三个函数:

LoadResString、LoadResPicture和LoadResData, 分别用来加载文本资源、图形资源和自定义资源。这里只用到LoadResData函数。核心代码如下:

Private Sub Option1_Click ()

……

b=LoadResData (101, "CUSTOM")

Text1.Text=StrConv (b, vbUnicode)

……

End sub

(3) 只读文本框的设计

完成上面的设计后, 装载到Text1中的文本又处于可编辑、可修改状态。为保证其中的文本装载之初就进入到不可编辑状态, 我们还需要做进一步的设计, 将这个文本框控件设计成只读属性。

1) Text1文本框属性设置窗口

MultiLine属性设置为True, ScrollBars属性设置为2-Horizontal, 以保证Text1文本框中的文本自动换行, 同时出现垂直滚动条。

2) Form1的通用声明部分

Private Declare Function SendMessage Lib"user32"Alias"SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long

Private Declare Function GetWindowLong Lib"user32"Alias"GetWindowLongA" (ByVal hwnd As Long, ByVal n Index As Long) As Long

Private Const GWL_STYLE= (-16)

Private Const EM_SETREADONLY=&HCF

3) 核心代码示例

Private Sub Option1_Click ()

……

c=SendMessage (Text1.hwnd, EM_SETREADONLY, True, vbNull)

Text1.BackColor=vbInactiveBorder

……

End sub

编写VB打印控制程序的几点心得 篇3

编写VB打印控制程序的几点心得

郑州解放军信息工程大学信息安全学院计算机系(450002)

白 燕 王 鹏

摘 要本文在总结作者实际开发经验的基础上,详细介绍了VB实现高分辨率打印方法的几点心得。阐述了参数化绘图程序缩短打印程序开发时间的方法以及打印机缩放属性与窗体属性匹配使用的技巧,并总结了解决坐标定位、图形与其实际打印位置出现误差等问题的经验。

关键词PrintForm 高分辨率打印 参数化绘图 缩放属性

Some Experiences on VB Print Control

Bai Yang, Wang Peng

Computer Science Department

Universityof

Informationand Engineering

Zhengzhou, China

Abstract:On the basis of our working experiences, we have given a detail description about VB print method of high resolution. We focus on how to shorten developing period with parameterized plot program, the match between the zoom attribute and the attribute of display window etc., which based on print program of Printer Object. In addition to this, we have introduced some experiences on dealing with position error that caused by the mismatch between font and graph on screen and that on printer.

Keywords:PrintForm, High Resolution Print, parameterized plot ,zoom attribute

1.简介

Visual Basic(VB)给用户提供了可视化编程环境,因其简单易学、功能强大而得到了广泛的应用。VB提供了两种实现打印的方法。一般在对打印质量要求不高的场合,或者是编程项目的早期开发过程中,可以直接使用VB窗体的Printform方法实现打印。用这种方法实现打印具有编程简单、易用并且功能强大的优点,它只需要通过一行代码,几乎能打印所有内容。实现的方法就是:首先将要打印的内容在屏幕上显示出来,然后开发人员只要为窗体对象激活 PrintForm ,窗体则自动将要打印的内容发送到Printer对象上,其语法格式如下:[窗体.]PrintForm 。如果窗体中包括图形,那么打印前应先置窗体的AutoRedraw属性为真。这种方法虽然简单,但是它却存在着内存消耗大、打印粗糙、速度慢等缺陷,尤其对于带有滚动条的图像,这种方法只能打印当前可视的区域。在实际应用中经常会遇到对打印质量要求很高的场合,例如打印音乐五线谱,对打印的美观、清晰度以及音符符头的位置都有很严格的要求,这种应用场合若采用VB提供的另一种基于Printer对象的打印方法则可以获得高分辨率的打印,得到很高的打印质量。在实际应用中,也可以根据实际应用情况将上述两种方法结合起来使用,即:前期工作使用PrintForm 简单的打印方法将窗体的布局定下来,后期再使用基于Printer对象的打印方法实现最终的打印工作。

2.高分辨率打印程序开发心得

⑴ Printer对象

VB的打印可以使用Printer对象。Printer对象是一个独立于打印机设备的封装,它可以代表不同的打印机,初始时,Printer对象为系统缺省的打印机,也可以使用下列语句:Set Printer=Printers(2) (其中2代表Printers集中的第二个打印机)对打印机进行指定。

Printer对象具备例如:ColorMode、Copies、Duplex、Printquality等控制打印机特征的属性,提供了Newpage、EndDoc、KillDoc等控制打印过程的方法,以及大多数由窗体和图片框控件提供的图形属性和方法如:Currentx、Currenty、Textwidth、Textheight、Print、Pset、Line、PaintPicture和Circle等方法,它还拥有Font的所有属性。实现高分辨率的打印就是通过控制Printer对象的上述属性和方法完成的。

⑵ 直接利用Windows公用标准对话框CommonDialog控件【打印】

VB为用户提供了Windows公用标准对话框CommonDialog控件:【打开】、【文件另存为】、【颜色】、【字体】、【打印】。CommonDialog控件在Visual Basic 和Microsoft Windows动态连接库Commdlg.dll例程之间提供了接口。利用公用标准对话框【打印】开发VB的打印程序,将大大缩短程序的开发周期。应用程序中要使用公用对话框,必须首先在工具箱中添加公用对话框控件。该动作通过激活【部件】对话框,选中Microsoft Common Dialog Control6.0, 单击【确定】即可。然后再将公用控件添加到窗体上并设置相应属性,该控件具有的属性有Color、Font、Print、Help等。

VB提供mnuFilePrint_Click过程供用户添加开发的打印程序代码。

⑶ Printer对象控制打印的基本过程

利用Printer对象开发的打印程序主要靠其提供的――NewPage (打印新的一页,CurrentX、CurrentY置为新页的左上角,可完成多页功能。)、EndDoc (将打印任务加入打印机队列)、KillDoc (取消打印任务)控制打印过程的。一般情况下,打印程序完成多页打印时会多次执行NewPage,结束时执行一次EndDoc将打印任务加入打印机队列。如果你在NewPage后,立即使用EndDoc,VB则不会打印额外的空白页。如果希望显示空白页,则可在新的一页上只使用Printer.Print “ “打印空字符即可。

为了通过Printer

对象实现文本和图形的打印,获得最好的打印质量,还需要对VB控制打印机的多种属性有更深入的理解,例如打印机的坐标体系向屏幕坐标体系的转换、打印机字体尺寸的确定等。下面给出了打印程序的主框架:

Private Sub mnuFilePrint_Click

On Error Resume Next

If ActiveForm Is Nothing Then Exit Sub

With dlgCommonDialog ‘打印机公用对话框

.DialogTitle = “打印”

.CancelError = True

.Flags = 1

Printer.FontSize = dlgCommonDialog.FontSize

‘将打印机公用对话框设置的字体大小传递给打印机

.ShowPrinter ‘ 在屏幕上显示【打印】公用对话框

If Err MSComDlg.cdlCancel Then

Printer.FontTransparent = False ‘初始化打印的字体为不透明

SetPrinterScale Myform ‘匹配打印机的缩放属性与窗体的属性

PrintAnywhere Printer ‘可放置用户编写的打印对象参数化例程

‘实现字符和图形的显示

Printer.NewPage ‘打印机坐标初始化

PrintAnywhere Printer ‘打印另一页的内容

Printer.NewPage ‘打印机坐标初始化

Printer.EndDoc ‘将该任务加入打印机任务队列

‘ 不打印空白页

Printer.KillDoc ‘取消当前的打印任务

End If

End With

End Sub

⑷ 参数化绘图程序

用VB开发应用程序时,如果使用参数化绘图例程进行屏幕显示程序的开发,则在开发打印程序时,就不需再另行开发代码,从而避免了大量的重复劳动,有效地缩短了程序的开发周期。

参数化绘图例程就是:在开发例程时,为每一个例行程序提供一个OBJECT类型的参数,调用程序通过向例程的OBJECT类型参数分别传递窗体、Printer对象,就可分别完成屏幕显示与打印机输出。 见如下示例:

Sub PrintAnywhere(Dest As Object)

Dest.Print “HELLO!”

Dest Is Printer Then

Printer.EndDoc

End If

End Sub

要完成屏幕上的输出,调用 PrintAnywhere Myform 即可,而调用 PrintAnywhere Printer则完成在打印机上输出。

⑸ 属性匹配与窗体缩放

因为控制打印机实际绘图区域大小的.属性Height和Width,由目前正在使用的纸张决定,而且可打印的区域与纸张边缘有一定距离。因而为了获得正确的打印输出结果,不能简单地将Printer对象直接传递给绘图例行程序,还必须要解决打印机的缩放属性与显示窗体属性相匹配的问题。即:保证使窗体中的打印内容以正确的大小显示,并居于可打印区域的中间。实际上实现的是打印机的坐标体系向屏幕坐标体系的转换。具体过程是:使用打印机的ScaleX和ScaleY方法,获取以twip为单位的打印机尺寸,再利用窗体的ScaleX和ScaleY方法将这些尺寸转换为窗体中的坐标系统,从而实现以窗体的坐标系统提供打印机可打印区域大小的目的。然后,用这些尺寸作为打印机中新的ScaleWidth和ScaleHeight,即可实现属性匹配。

但是,我们在打印时,经常会遇到这样的场合――在不改变窗体形状的情况下,需要扩大或缩小窗体的大小。要完成这样的工作,不仅需要完成属性匹配,还要确定对象被缩放的系数。程序如下:

Private Sub SetPrinterScale(obj As Object)

Dim pwid As Single, phgt As Single, xmid As Single, ymid As Single

Dim owid As Single, ohgt As Single

owid = obj.ScaleX(obj.ScaleWidth, obj.ScaleMode, vbTwips)

ohgt = obj.ScaleY(obj.ScaleHeight, obj.ScaleMode, vbTwips)

‘获取窗体以Twips表示的尺寸

pwid = Printer.ScaleX(Printer.ScaleWidth, Printer.ScaleMode, vbTwips)

phgt = Printer.ScaleY(Printer.ScaleHeight, Printer.ScaleMode, vbTwips)

‘获取打印机以Twips表示的尺寸

If (ohgt / owid >phgt / pwid) Then

s = phgt / ohgt

Else

s = pwid / owid

End If ‘计算缩放因子

pwid = obj.ScaleX(pwid, vbTwips, obj.ScaleMode) / s

phgt = obj.ScaleY(phgt, vbTwips, obj.ScaleMode) / s

‘将打印机的尺寸转换成obj的坐标系统 / 缩放因子

x_mid = obj.ScaleLeft + obj.ScaleWidth / 2

y_mid = obj.ScaleTop + obj.ScaleHeight / 2‘设置打印区域的中心点坐标

Printer.Scale (x_mid - pwid / 2, y_mid - phgt / 2)-(x_mid + pwid / 2, y_mid + phgt / 2)

‘ 设置打印机中新的ScaleWidth和ScaleHeight

End Sub

上一篇:三峡大学 工程地质实习报告下一篇:高中学生的学习计划