Tôi đã quản lý để làm cho nó hoạt động, nhưng bạn có thể phải chơi với độ trong suốt / kích thước phông chữ / màu nền để có được nó để dễ đọc.
Bạn sẽ cần cài đặt AutoHotKey và chạy tập lệnh này: https://www.dropbox.com/s/x510z8tsxunardl/OSDTest.ahk
Có một số ý kiến trong mã, nhưng ngắn gọn nó sẽ: đọc 5 dòng từ cuối tệp nhật ký được chỉ định; tạo một cửa sổ và thêm nó dưới dạng văn bản trên cửa sổ; làm cho cửa sổ trong suốt, luôn ở trên cùng và "không thể nhìn thấy"; và cập nhật văn bản cứ sau 1 giây (có thể cần tăng phần này, nhưng tôi không thấy một hiệu suất lớn - ngay cả với tệp nhật ký 20mb).
Để thoát tập lệnh, nhấp chuột phải vào biểu tượng AutoHotKey trong khay hệ thống của bạn và chọn Thoát.
Nếu các liên kết của tôi bị hỏng, mã AHK sẽ theo sau:
#SingleInstance force
; Example: On-screen display (OSD) via transparent window:
FileName := "C:\xampplite\apache\logs\access.log"
NumLines = 5
CustomColor = FF8080 ; The transparent background color of the window, set this to something close to your text colour to avoid white highlighting
Gui +LastFound +AlwaysOnTop -Caption +ToolWindow +E0x20 ; +ToolWindow avoids a taskbar button and an alt-tab menu item.
Gui, Color, %CustomColor%
Gui, Font, s12 ; Set a large font size (12-point).
errorTail := FileTail(FileName , NumLines) ; get the text from the file, last 5 lines
Gui, Add, Text, vMyText cRed Y+0, %errorTail% ; add it, colour is Red, R5 sets 5 rows
; choose one of these lines, first one show just the text, second one has a background for readability
WinSet, TransColor, %CustomColor% 200 ; Make all pixels of this color transparent and make the text itself translucent (250)
;Winset, Transparent, 150
SetTimer, UpdateOSD, 1000 ; 1 second timer set here
Gui, Show, x0 y600 NoActivate ; Set the x and y position. NoActivate avoids deactivating the currently active window.
return
UpdateOSD: ; the repeated timer routine
errorTail := FileTail(FileName, NumLines) ;get 5 lines
GuiControl,, MyText, %errorTail%
return
; ======================================================================================================================
; Function: Retrieve the last lines of a text file.
; AHK version: 1.1.07+
; Parameters:
; FileName - the name of the file, assumed to be in A_WorkingDir if an absolute path isn't specified
; Lines - number of lines to read - default: 10 (like Unix)
; NewLine - new line character(s) - default: `r`n (Windows)
; Return values:
; On success: The required lines, if present
; On failure: ""
; Version: 1.0.00.00/2012-04-16/just me
; ======================================================================================================================
FileTail(FileName, Lines = 10, NewLine = "`r`n") {
Static MaxLineLength := 256 ; seems to be reasonable to start with
If !IsObject(File := FileOpen(FileName, "r"))
Return ""
Content := ""
LinesLength := MaxLineLength * Lines * (InStr(File.Encoding, "UTF-16") ? 2 : 1)
FileLength := File.Length
BytesToRead := 0
FoundLines := 0
While (BytesToRead < FileLength) && !(FoundLines) {
BytesToRead += LinesLength
If (BytesToRead < FileLength)
File.Pos := FileLength - BytesToRead
Else
File.Pos := 0
Content := RTrim(File.Read(), "`r`n")
If (FoundLines := InStr(Content, NewLine, 0, 0, Lines))
Content := SubStr(Content, FoundLines + StrLen(NewLine))
}
File.Close()
Return Content
}