自動記錄應用軟件工作時間
發表于:2007-07-14來源:作者:點擊數:
標簽:
---- 實踐中常常期望有一個小軟件,它可以自動追蹤記錄當前應用軟件進行工作的時間和內容,例如:使用Word進行文件編輯排版的時間和文件名稱,使用AutoCAD軟件進行制圖的時間和圖擋名稱,玩某個 游戲 軟件的時間和游戲軟件的名稱等等。本文討論如何利用 VB 6
---- 實踐中常常期望有一個小軟件,它可以自動追蹤記錄當前應用軟件進行工作的時間和內容,例如:使用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”即可??赏顺鯲B,運行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,且語法的各個部分如下:
---- appname 必需的;Variant (String)。提供該對象的應用程序名稱(我們用Word)。
---- objecttype 必需的;Variant (String)。待創建對象的類型或類(我們用Application)。
---- 使用 GetObject 函數可以訪問文件中的 ActiveX 對象,而且可以將該對象賦給對象變量??梢允褂?Set 語句將 GetObject 返回的對象賦給對象變量。例如將Word當前打開的文件對象賦給對象變量word:
---- Dim word As Object
---- Set word = GetObject(, “Word.Application”)
---- 注意:當對象當前已有實例,或要創建已加載的文件的對象時,就使用 GetObject 函數。
---- 如果對象當前還沒有實例,或不想啟動已加載文件的對象,則應使用 CreateObject 函數。
---- (3)ActiveDocument性質
---- ActiveDocument得到一個Active文擋(active document)的文件對象,語法是: object.ActiveDocument
---- 參數object表示一個應用對象,當進入這個應用對象的ActiveDocument性質,由于應用對象已經被隱含,因此可以省略這個應用對象而使用它的屬性與方法。注意:對Excel,不用ActiveDocument而使用ActiveWorkBook。
原文轉自:http://www.anti-gravitydesign.com