Ich habe es geschafft, dies zum Laufen zu bringen, aber Sie müssen möglicherweise mit der Transparenz / Schriftgröße / Hintergrundfarbe spielen, um es zu bekommen, damit es einfach zu lesen ist.
Sie müssen installieren AutoHotKey und führe dieses Skript aus: https://www.dropbox.com/s/x510z8tsxunardl/OSDTest.ahk
Es gibt einige Kommentare im Code, aber in Kürze wird es: 5 Zeilen vom Ende der angegebenen Protokolldatei lesen; Erstellen Sie ein Fenster und fügen Sie dieses als Text in das Fenster ein. Machen Sie das Fenster transparent, immer im Vordergrund und "nicht klickbar". und aktualisieren Sie den Text alle 1 Sekunden (möglicherweise müssen Sie dies erhöhen, aber ich sehe keinen großen Leistungseinbruch - auch mit einer 20-MB-Protokolldatei).
Um das Skript zu beenden, klicken Sie mit der rechten Maustaste auf das AutoHotKey-Symbol in der Taskleiste und wählen Sie Beenden.
Wenn meine Links kaputt sind, folgt der AHK-Code:
#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
}