使用vb 監控電腦活動記錄
阿新 • • 發佈:2020-07-06
最近看到了一個日文版的監控電腦活動記錄的軟體,又在win 32 APi
中看到了GetForegroundWindow
函式,於是決定動動小手用vb寫個監控電腦活動記錄的小程式。
主要函式
函式名 | 引數 | 返回值 |
---|---|---|
GetForegroundWindow(void) | 無 | 當前視窗的控制代碼 |
GetWindowText(HWND hWnd,LPTSTR lpString,Int nMaxCount) | hWnd:視窗控制代碼 lpString:接收視窗標題文字的緩衝區的指標 nMaxCount:指定緩衝區中的最大字元數 |
如果成功則返回標題字串的字元個數。如果視窗無標題欄或文字,或標題欄為空,或視窗或控制的控制代碼無效,則返回值為零。 |
實現
迴圈獲取當前焦點所在視窗的標題,然後寫入到日誌檔案中。最後設定開啟自啟動,隱藏命令列視窗。
Imports System Imports System.io Module Module1 private Declare Sub Sleep Lib "kernel32" Alias "Sleep" (ByVal dwMilliseconds As Long) 'Win32 Api Private Declare Function GetForegroundWindow Lib "user32" () As Long Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long Sub Main() Dim bt As Boolean = True ' 儲存標題文字 Dim stext As String ' 儲存上一個視窗控制代碼 Dim hwnd As Long ' 儲存當前視窗控制代碼 Dim curHwnd As Long ' 書寫流寫入日誌檔案 Dim sw As StreamWriter ' 日誌檔案儲存路徑 Dim path As String = "c:\log.txt" ' 如果存在日誌檔案則跳過,否則建立一個日誌檔案 If Not File.Exists(path) Then File.Create(path) End If sleep(3000) ' 這裡是個死迴圈 While bt stext = Space(255) ' 獲取當前視窗控制代碼 hwnd = GetForegroundWindow ' 如果當前是新視窗則寫入新視窗標題 If hwnd <> curHwnd Then curHwnd = hwnd ' 獲取視窗標題 GetWindowText(hwnd,stext,255) sw = System.IO.File.AppendText(path) ' 寫入新視窗標題,格式 yyyy年mm月dd日 hh:hh:ss + 標題 Using sw sw.WriteLine(String.Format("{0:F}", DateTime.Now) +" "+ stext) sw.Flush() End Using End If sleep(2000) End While End Sub End Module
開啟自啟動
新建一個listener.vbs檔案(其中C:\listener.exe
是vb編譯後的檔案路徑,Run引數0表示隱藏命令列視窗):
Dim ws
set ws = WScript.createObject("WScript.shell")
ws.Run "C:\listener.exe", 0, TRUE
1. 執行 -> shell:startup
2. 開始選單 -> 程式 -> 啟動
3. 執行 -> gpedit.msc
4. 啟動 -> 開機中新增listener.vbs指令碼
執行
重啟電腦後我們可以再工作管理員中看到執行的指令碼
- 然後檢視日誌檔案
C:\log.txt
- 需要關閉結束程序即可