程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> Visual Basic語言 >> VB綜合教程 >> 自動記錄應用軟件工作

自動記錄應用軟件工作

編輯:VB綜合教程
----實踐中常常期望有一個小軟件,它可以自動追蹤記錄當前應用軟件進行工作的時間和內容,例如:使用Word進行文件編輯排版的時間和文件名稱,使用AutoCAD軟件進行制圖的時間和圖擋名稱,玩某個游戲軟件的時間和游戲軟件的名稱等等。本文討論如何利用VB6.0編程實現這樣的軟件;本文的程序可同時追蹤記錄使用Word,Excel或AutoCAD14打開文件(包括打開網上鄰居中的文件)進行工作的開始時間、結束時間(以秒為單位)和使用的文件名(包括完整路徑)。
  
  ----下面給出從建立該軟件的工程項目到最後生成可執行文件的全過程,這個程序的關鍵是下面的Timer事件(以1000毫秒為周期),它利用了微軟的ActiveDocument技術(Active文擋),使用函數GetObject來獲取當前應用軟件對象,用函數DateDiff計算時間差,利用微軟的“MicrosoftWindowsCommnControl5.0”中的控件“ListView”來實現數據顯示界面;程序在Win98/NT下可以自動追蹤記錄使用Word97,Excel97和AutoCAD14的使用情況,具體敘述如下。
  
  ----(一)建立工程(項目)vb_time.vbp:
  
  ----在C盤建目錄:VB_TIME,今後我們將這個軟件的文件都放到這個目錄裡。運行VB6.0,選“文件|新建工程”的“標准EXE”,出現窗體後可先將這個工程存盤:選菜單的“文件|工程另存為”,先取名“vb_time”存窗體(擴展名:frm),再取名“vb_time”存工程(擴展名:vbp)。
  
  ----(二)增加控件ListView與Timer:
  
  ----在菜單中選:“工程|部件”,出現“部件”對話框後選:MicrosoftCommanControl5.0,這時在控件欄裡可以看見一些新增加的控件,其中我們需要將其中的“ListView”控件放入到窗體中;放入該控件後,用鼠標右擊窗體中“ListView1”,選“屬性”,出現“屬性頁”對話框,在“通用”部分改變“查看”為3,“外觀”為1;在“列首”部分插入4列,分別為:文件,時間,開始時間,結束時間.將Timer控件放入窗體,並設置其Interval屬性為1000(=1秒)。
  
  ----(三)增加代碼:
  
  ----(1)通用.聲明
  
  OptionExplicit
  PublicapplicationNameAsObject
  '運行的應用軟件對象名
  PublicprevFileAsString
  '當前應用軟件打開的文件名
  DimitmXAsListItem
  'ListView中的列數組
  DimstartDateAsDate'開始時間
  DimendDateAsDate'結束時間
  PublicnewSessionAsBoolean
  (2)FORM的Load過程:
  PrivateSubForm_Load()
  newSession=True
  EndSub
  (3)Timer1.Timer過程:
  PrivateSubTimer1_Timer()
  DimstrAsString
  DimdocAsObject
  OnErrorResumeNext
  SetapplicationName=GetObject(,
  "Excel.Application")'取得當前運行的Excel對象
  Setdoc=applicationName.ActiveWorkBook
  '當前Excel打開的工作簿文件
  SetapplicationName=GetObject(,
  "Word.Application")'取得當前運行的Word對象
  Setdoc=applicationName.ActiveDocument
  '當前Word的applicationName打開的文件
  SetapplicationName=GetObject(,
  "AutoCAD.Application")'取得當前運行的AutoCAD對象
  Setdoc=applicationName.ActiveDocument
  '當前AutoCAD打開的圖擋文件
  str=doc.FullName
  '當前applicationName打開的文件名(包括路徑)
  Ifstr=""Then'當前無上述對象,
  則用"無工作文件"命名
  str="無工作文件"
  EndIf
  IfprevFile=strThen'時間增加
  DimactDateAsDate
  actDate=Now'
  將系統當前的時間給變量actDate
  itmX.SubItems(1)=DateDiff("s",
  startDate,actDate)'計算開始時間與當前時間的差
  ExitSub'退出子過程
  EndIf
  '若當前文件改變
  IfprevFile<>""Then
  endDate=Now
  '將系統當前的時間給變量endDate
  itmX.SubItems(3)=Time'"時間結束",
  返回系統當前的時間。
  applicationName=0
  EndIf
  prevFile=str
  SetitmX=ListView1.ListItems.Add(,,str)
  '在ListView中另起一行
  itmX.SubItems(2)=Time
  '"時間開始",返回系統當前的時間。
  startDate=Now
  '將系統當前的時間給變量startDate
  EndSub
  
  
  ----(四)生成並運行可執行文件:
  
  ----選菜單的“文件|生成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,且語法的各個部分如下:
  
  ----appname必需的;Variant(String)。提供該對象的應用程序名稱(我們用Word)。
  
  ----objecttype必需的;Variant(String)。待創建對象的類型或類(我們用Application)。
  
  ----使用GetObject函數可以訪問文件中的ActiveX對象,而且可以將該對象賦給對象變量。可以使用Set語句將GetObject返回的對象賦給對象變量。例如將Word當前打開的文件對象賦給對象變量word:
  
  ----DimwordAsObject
  
  ----Setword=GetObject(,“Word.Application”)
  
  ----注意:當對象當前已有實例,或要創建已加載的文件的對象時,就使用GetObject函數。
  
  ----如果對象當前還沒有實例,或不想啟動已加載文件的對象,則應使用CreateObject函數。
  
  ----(3)ActiveDocument性質
  
  ----ActiveDocument得到一個Active文擋(activedocument)的文件對象,語法是:object.ActiveDocument
  
  ----參數object表示一個應用對象,當進入這個應用對象的ActiveDocument性質,由於應用對象已經被隱含,因此可以省略這個應用對象而使用它的屬性與方法。注意:對Excel,不用ActiveDocument而使用ActiveWorkBook->

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved