自动记录应用软件工作时间

2008-02-23 06:55:04来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

---- 实践中常常期望有一个小软件,它可以自动追踪记录当前应用软件进行工作的时间和内容,例如:使用Word进行文件编辑排版的时间和文件名称,使用AutoCAD软件进行制图的时间和图挡名称,玩某个游戏软件的时间和游戏软件的名称等等。本文讨论如何利用VB6.0编程实现这样的软件;本文的程序可同时追踪记录使用Word,Excel或AutoCAD14打开文件(包括打开网上邻居中的文件)进行工作的开始时间、结束时间(以秒为单位)和使用的文件名(包括完整路径)。

---- 下面给出从建立该软件的工程项目到最后生成可执行文件的全过程,这个程序的关键是下面的Timer事件(以1000毫秒为周期),它利用了微软的ActiveDocument技术(Active 文挡),使用函数GetObject来获取当前应用软件对象,用函数DateDiff计算时间差,利用微软的“Microsoft Windows Commn Control 5.0”中的控件“ListView”来实现数据显示界面;程序在Win98/NT下可以自动追踪记录使用Word97,Excel97和AutoCAD14的使用情况,具体叙述如下。

---- (一)建立工程(项目)vb_time.vbp:

---- 在C盘建目录:VB_TIME,今后我们将这个软件的文件都放到这个目录里。运行VB6.0,选“文件 | 新建工程”的“标准EXE”,出现窗体后可先将这个工程存盘:选菜单的“文件 | 工程另存为”,先取名“vb_time”存窗体(扩展名:frm),再取名“vb_time”存工程(扩展名:vbp)。

---- (二)增加控件ListView与Timer:

---- 在菜单中选:“工程 | 部件”,出现“部件”对话框后选:Microsoft Comman Control 5.0,这时在控件栏里可以看见一些新增加的控件,其中我们需要将其中的“ListView”控件放入到窗体中;放入该控件后,用鼠标右击窗体中“ListView1”,选“属性”,出现“属性页”对话框,在“通用”部分改变“查看”为3,“外观”为1;在“列首”部分插入4列,分别为:文件,时间,开始时间,结束时间. 将Timer控件放入窗体,并设置其Interval属性为1000(= 1秒)。

---- (三)增加代码:

---- (1)通用.声明

Option Explicit
Public applicationName As Object
'运行的应用软件对象名
Public prevFile As String
'当前应用软件打开的文件名
Dim itmX As ListItem
'ListView中的列数组
Dim startDate As Date '开始时间
Dim endDate As Date '结束时间
Public newSession As Boolean
(2)FORM的Load过程:
Private Sub Form_Load()
newSession = True
End Sub
(3)Timer1.Timer过程:
Private Sub Timer1_Timer()
Dim str As String
Dim doc As Object
On Error Resume Next
Set applicationName = GetObject(,
"Excel.Application") '取得当前运行的Excel对象
Set doc = applicationName.ActiveWorkBook
'当前Excel打开的工作簿文件
Set applicationName = GetObject(,
"Word.Application") '取得当前运行的Word对象
Set doc = applicationName.ActiveDocument
'当前Word的applicationName打开的文件
Set applicationName = GetObject(,
"AutoCAD.Application") '取得当前运行的AutoCAD对象
Set doc = applicationName.ActiveDocument
'当前AutoCAD打开的图挡文件
str = doc.FullName
'当前applicationName打开的文件名(包括路径)
If str = "" Then '当前无上述对象,
则用"无工作文件"命名
str = "无工作文件"
End If
If prevFile = str Then '时间增加
Dim actDate As Date
actDate = Now '
将系统当前的时间给变量actDate
itmX.SubItems(1) = DateDiff("s",
startDate, actDate) '计算开始时间与当前时间的差
Exit Sub '退出子过程
End If
'若当前文件改变
If prevFile <> "" Then
endDate = Now
' 将系统当前的时间给变量endDate
itmX.SubItems(3) = Time '"时间结束",
返回系统当前的时间。
applicationName = 0
End If
prevFile = str
Set itmX = ListView1.ListItems.Add(, , str)
'在ListView中另起一行
itmX.SubItems(2) = Time
'"时间开始",返回系统当前的时间。
startDate = Now
' 将系统当前的时间给变量startDate
End Sub


---- (四) 生成并运行可执行文件:

---- 选菜单的“文件 | 生成vb_time.exe”即可。可退出VB,运行vb_time.exe,该软件运行后自动进行监视,一当您使用了Word(Excel或AutoCAD14)即开始记录,直到该应用软件退出;如桌面上无Word,Excel或AutoCAD14运行,或虽有但尚未打开一个文件,则该软件以“无工作文件”进行记录。有兴趣的读者可以进一步修改,使得程序可以监视更多的应用软件特别是监视游戏软件,同时将记录结果存盘以供以后查询使用。

---- (五) 几个关键函数的说明:

---- (1)DateDiff 函数

---- 语法 DateDiff(interval, date1, date2[, firstdayofweek[, firstweekofyear]]) 返回 Variant (Long) 的值,表示两个指定日期间的时间间隔数目。DateDiff 函数语法中有下列命名参数:

---- interval 必要。字符串表达式,表示用来计算date1 和 date2 的时间差的时间间隔 Date1,date2 必要;Variant (Date)。计算中要用到的两个日期。

---- Firstdayofweek 可选。指定一个星期的第一天的常数。如果未予指定,则以星期日为第一天。

---- firstweekofyear 可选。指定一年的第一周的常数。如未指定,则以包含 1 月 1 日的星期为第一周。

---- interval 参数的设定值如下(我们设置为s即秒):

---- yyyy 年;q 季 ;m 月 ;y 一年的日数 ;d 日 ;w 一周的日数 ;ww 周 ;h 时 ;

---- n 分钟 ;s 秒

---- (2)GetObject 函数

---- 语法 GetObject([pathname] [, class])

---- 返回文件中的 ActiveX 对象的引用。 pathname 可选的,包含待检索对象的文件的全路径和名称。如果省略 pathname,则 class 是必需的。 class 代表该对象的类的字符串;class 参数的语法格式为 appname.objecttype,且语法的各个部分如下:

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:用VB6.0开发猜数字小游戏

下一篇:一个用VB5.0 实现的鼠标绘图程序