?? 109.txt
字號:
自動記錄應(yīng)用軟件工作時間
---- 實踐中常常期望有一個小軟件,它可以自動追蹤記錄當(dāng)前應(yīng)用軟件進(jìn)行工作的時間和內(nèi)容,例如:使用Word進(jìn)行文件編輯排版的時間和文件名稱,使用AutoCAD軟件進(jìn)行制圖的時間和圖擋名稱,玩某個游戲軟件的時間和游戲軟件的名稱等等。本文討論如何利用VB6.0編程實現(xiàn)這樣的軟件;本文的程序可同時追蹤記錄使用Word,Excel或AutoCAD14打開文件(包括打開網(wǎng)上鄰居中的文件)進(jìn)行工作的開始時間、結(jié)束時間(以秒為單位)和使用的文件名(包括完整路徑)。
---- 下面給出從建立該軟件的工程項目到最后生成可執(zhí)行文件的全過程,這個程序的關(guān)鍵是下面的Timer事件(以1000毫秒為周期),它利用了微軟的ActiveDocument技術(shù)(Active 文擋),使用函數(shù)GetObject來獲取當(dāng)前應(yīng)用軟件對象,用函數(shù)DateDiff計算時間差,利用微軟的“Microsoft Windows Commn Control 5.0”中的控件“ListView”來實現(xiàn)數(shù)據(jù)顯示界面;程序在Win98/NT下可以自動追蹤記錄使用Word97,Excel97和AutoCAD14的使用情況,具體敘述如下。
---- (一)建立工程(項目)vb_time.vbp:
---- 在C盤建目錄:VB_TIME,今后我們將這個軟件的文件都放到這個目錄里。運行VB6.0,選“文件 | 新建工程”的“標(biāo)準(zhǔn)EXE”,出現(xiàn)窗體后可先將這個工程存盤:選菜單的“文件 | 工程另存為”,先取名“vb_time”存窗體(擴展名:frm),再取名“vb_time”存工程(擴展名:vbp)。
---- (二)增加控件ListView與Timer:
---- 在菜單中選:“工程 | 部件”,出現(xiàn)“部件”對話框后選:Microsoft Comman Control 5.0,這時在控件欄里可以看見一些新增加的控件,其中我們需要將其中的“ListView”控件放入到窗體中;放入該控件后,用鼠標(biāo)右擊窗體中“ListView1”,選“屬性”,出現(xiàn)“屬性頁”對話框,在“通用”部分改變“查看”為3,“外觀”為1;在“列首”部分插入4列,分別為:文件,時間,開始時間,結(jié)束時間. 將Timer控件放入窗體,并設(shè)置其Interval屬性為1000(= 1秒)。
---- (三)增加代碼:
---- (1)通用.聲明
Option Explicit
Public applicationName As Object
'運行的應(yīng)用軟件對象名
Public prevFile As String
'當(dāng)前應(yīng)用軟件打開的文件名
Dim itmX As ListItem
'ListView中的列數(shù)組
Dim startDate As Date '開始時間
Dim endDate As Date '結(jié)束時間
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") '取得當(dāng)前運行的Excel對象
Set doc = applicationName.ActiveWorkBook
'當(dāng)前Excel打開的工作簿文件
Set applicationName = GetObject(,
"Word.Application") '取得當(dāng)前運行的Word對象
Set doc = applicationName.ActiveDocument
'當(dāng)前Word的applicationName打開的文件
Set applicationName = GetObject(,
"AutoCAD.Application") '取得當(dāng)前運行的AutoCAD對象
Set doc = applicationName.ActiveDocument
'當(dāng)前AutoCAD打開的圖擋文件
str = doc.FullName
'當(dāng)前applicationName打開的文件名(包括路徑)
If str = "" Then '當(dāng)前無上述對象,
則用"無工作文件"命名
str = "無工作文件"
End If
If prevFile = str Then '時間增加
Dim actDate As Date
actDate = Now '
將系統(tǒng)當(dāng)前的時間給變量actDate
itmX.SubItems(1) = DateDiff("s",
startDate, actDate) '計算開始時間與當(dāng)前時間的差
Exit Sub '退出子過程
End If
'若當(dāng)前文件改變
If prevFile <> "" Then
endDate = Now
' 將系統(tǒng)當(dāng)前的時間給變量endDate
itmX.SubItems(3) = Time '"時間結(jié)束",
返回系統(tǒng)當(dāng)前的時間。
applicationName = 0
End If
prevFile = str
Set itmX = ListView1.ListItems.Add(, , str)
'在ListView中另起一行
itmX.SubItems(2) = Time
'"時間開始",返回系統(tǒng)當(dāng)前的時間。
startDate = Now
' 將系統(tǒng)當(dāng)前的時間給變量startDate
End Sub
---- (四) 生成并運行可執(zhí)行文件:
---- 選菜單的“文件 | 生成vb_time.exe”即可。可退出VB,運行vb_time.exe,該軟件運行后自動進(jìn)行監(jiān)視,一當(dāng)您使用了Word(Excel或AutoCAD14)即開始記錄,直到該應(yīng)用軟件退出;如桌面上無Word,Excel或AutoCAD14運行,或雖有但尚未打開一個文件,則該軟件以“無工作文件”進(jìn)行記錄。有興趣的讀者可以進(jìn)一步修改,使得程序可以監(jiān)視更多的應(yīng)用軟件特別是監(jiān)視游戲軟件,同時將記錄結(jié)果存盤以供以后查詢使用。
---- (五) 幾個關(guān)鍵函數(shù)的說明:
---- (1)DateDiff 函數(shù)
---- 語法 DateDiff(interval, date1, date2[, firstdayofweek[, firstweekofyear]]) 返回 Variant (Long) 的值,表示兩個指定日期間的時間間隔數(shù)目。DateDiff 函數(shù)語法中有下列命名參數(shù):
---- interval 必要。字符串表達(dá)式,表示用來計算date1 和 date2 的時間差的時間間隔 Date1,date2 必要;Variant (Date)。計算中要用到的兩個日期。
---- Firstdayofweek 可選。指定一個星期的第一天的常數(shù)。如果未予指定,則以星期日為第一天。
---- firstweekofyear 可選。指定一年的第一周的常數(shù)。如未指定,則以包含 1 月 1 日的星期為第一周。
---- interval 參數(shù)的設(shè)定值如下(我們設(shè)置為s即秒):
---- yyyy 年;q 季 ;m 月 ;y 一年的日數(shù) ;d 日 ;w 一周的日數(shù) ;ww 周 ;h 時 ;
---- n 分鐘 ;s 秒
---- (2)GetObject 函數(shù)
---- 語法 GetObject([pathname] [, class])
---- 返回文件中的 ActiveX 對象的引用。 pathname 可選的,包含待檢索對象的文件的全路徑和名稱。如果省略 pathname,則 class 是必需的。 class 代表該對象的類的字符串;class 參數(shù)的語法格式為 appname.objecttype,且語法的各個部分如下:
---- appname 必需的;Variant (String)。提供該對象的應(yīng)用程序名稱(我們用Word)。
---- objecttype 必需的;Variant (String)。待創(chuàng)建對象的類型或類(我們用Application)。
---- 使用 GetObject 函數(shù)可以訪問文件中的 ActiveX 對象,而且可以將該對象賦給對象變量。可以使用 Set 語句將 GetObject 返回的對象賦給對象變量。例如將Word當(dāng)前打開的文件對象賦給對象變量word:
---- Dim word As Object
---- Set word = GetObject(, “Word.Application”)
---- 注意:當(dāng)對象當(dāng)前已有實例,或要創(chuàng)建已加載的文件的對象時,就使用 GetObject 函數(shù)。
---- 如果對象當(dāng)前還沒有實例,或不想啟動已加載文件的對象,則應(yīng)使用 CreateObject 函數(shù)。
---- (3)ActiveDocument性質(zhì)
---- ActiveDocument得到一個Active文擋(active document)的文件對象,語法是: object.ActiveDocument
---- 參數(shù)object表示一個應(yīng)用對象,當(dāng)進(jìn)入這個應(yīng)用對象的ActiveDocument性質(zhì),由于應(yīng)用對象已經(jīng)被隱含,因此可以省略這個應(yīng)用對象而使用它的屬性與方法。注意:對Excel,不用ActiveDocument而使用ActiveWorkBook
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -