187 lines
6.7 KiB
AutoIt
187 lines
6.7 KiB
AutoIt
#NoTrayIcon
|
|
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
|
|
#AutoIt3Wrapper_Icon=CalibeIcon.ico
|
|
#AutoIt3Wrapper_Res_Description=2013 Bernhard Linz / Bernhard@znil.de / http://znil.net
|
|
#AutoIt3Wrapper_Res_Fileversion=1.0.0.15
|
|
#AutoIt3Wrapper_Res_Fileversion_AutoIncrement=y
|
|
#AutoIt3Wrapper_Res_LegalCopyright=znil.net
|
|
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
|
|
#include <GDIPlus.au3>
|
|
|
|
Dim Const $s_LockFileName = "CalibreLockFile.txt"
|
|
Dim Const $s_CalibreProgramName = "calibre-portable.exe"
|
|
Dim Const $s_CalibreMainProgramName = "calibre.exe"
|
|
Dim Const $s_WallpaperFile = "e4a21754cc0d4b0ee446f41df2b2ed9d.jpg"
|
|
Dim Const $a_ReplaceUsername[2] = [ "Error", "Bernhard" ]
|
|
Dim Const $a_ReplaceComputername[2] = [ "ERROR-PC" , "Computer von Bernhard" ]
|
|
Dim $sUsername
|
|
Dim $sComputername
|
|
Dim $h_lockfile
|
|
Dim $h_Calibre
|
|
Dim $b_RunCalibe = False
|
|
Dim $a_gelockt_von
|
|
Dim $h_DllErgebnis
|
|
Dim $s_clientname
|
|
Dim $s_ip
|
|
Dim $a_DezimalIP[5]
|
|
Dim $b_CalibreWindowsActive = False
|
|
Dim $b_SetWallpaper = False
|
|
|
|
$sComputername = StringReplace(@ComputerName, $a_ReplaceComputername[0], $a_ReplaceComputername[1])
|
|
$sUsername = StringReplace(@UserName, $a_ReplaceUsername[0], $a_ReplaceUsername[1])
|
|
|
|
;Setzt Hintergrundbild, siehe https://autoit.de/index.php/Thread/19060-Wallpaper-im-laufenden-Betrieb-%C3%A4ndern-inkl-auswahl-des-Styles/
|
|
Func Wallpaper($Wallpaper, $Stile)
|
|
;Set Wallpaper
|
|
;In XP only bmp files!
|
|
;$Wallpaper = Full Path and Filename. Leave blank if no Wallpaper
|
|
;$Stile = Wallpaper Style
|
|
;Call: Wallpaper("Path\Filename.extention","Stile")
|
|
;Don't miss to include the GDIPlus.au3 (#include <GDIPlus.au3>)
|
|
Select
|
|
Case $Stile="Center"
|
|
$Stile="0"
|
|
$Stile2="0"
|
|
Case $Stile="Fit"
|
|
$Stile="1"
|
|
$Stile2="0"
|
|
Case $Stile="Stretch"
|
|
$Stile="2"
|
|
$Stile2="0"
|
|
Case $Stile="Fill"
|
|
$Stile="-1"
|
|
$Stile2="0"
|
|
Case $Stile="Tile"
|
|
$Stile="0"
|
|
$Stile2="1"
|
|
EndSelect
|
|
|
|
Local $TempWallpaper = @TempDir & "\Wallpaper.bmp"
|
|
_GDIPlus_Startup()
|
|
$hBitmap = _GDIPlus_BitmapCreateFromFile($Wallpaper) ;Converts Image to Bitmap
|
|
_GDIPlus_ImageSaveToFile($hBitmap, $TempWallpaper) ;Save in temp directory
|
|
_GDIPlus_BitmapDispose($hBitmap) ;Release Bitmap Resource
|
|
_GDIPlus_Shutdown()
|
|
RegWrite("HKEY_CURRENT_USER\Control Panel\Desktop", "WallpaperStyle", "REG_SZ", $Stile)
|
|
RegWrite("HKEY_CURRENT_USER\Control Panel\Desktop", "TileWallpaper", "REG_SZ", $Stile2)
|
|
RegWrite("HKEY_CURRENT_USER\Control Panel\Desktop", "Wallpaper", "REG_SZ", $TempWallpaper)
|
|
DllCall("user32.dll", "int", "SystemParametersInfo","uint",20,"uint",0,"str",$TempWallpaper,"uint",3)
|
|
EndFunc ;EndFunc Wallpaper
|
|
|
|
|
|
If $CmdLine[0] > 0 Then
|
|
If $CmdLine[1] = "wallpaper" Then
|
|
$b_SetWallpaper = True
|
|
EndIf
|
|
EndIf
|
|
|
|
|
|
If FileExists($s_LockFileName) = 1 Then
|
|
$h_lockfile = FileOpen($s_LockFileName,0)
|
|
$a_gelockt_von = StringSplit(FileReadLine($s_LockFileName), ":", 0)
|
|
FileClose($h_lockfile)
|
|
; $a_gelockt_von[1] = Benutzername
|
|
; $a_gelockt_von[2] = Computername
|
|
; $a_gelockt_von[3] = Stunde
|
|
; $a_gelockt_von[4] = Minute
|
|
; $a_gelockt_von[5] = Tag
|
|
; $a_gelockt_von[6] = Monat
|
|
; $a_gelockt_von[7] = Jahr
|
|
If $a_gelockt_von[0] = 7 Then ; Wenn da 7 Werte drin stehen ist es eine gültige Datei
|
|
MsgBox(262160, "Calibre blockiert", "Der Benutzer '" & $a_gelockt_von[1] & "' am Computer '" & $a_gelockt_von[2] & "'" & @CRLF & _
|
|
"hat bereits um " & $a_gelockt_von[3] & ":" & $a_gelockt_von[4] & " Uhr am " & $a_gelockt_von[5] & "." & $a_gelockt_von[6] & "." & $a_gelockt_von[7] & @CRLF & _
|
|
"Calibre gestartet und nimmt eventuell Änderungen vor." & @CRLF & @CRLF & _
|
|
"Programmaufruf ist blockiert!")
|
|
EndIf
|
|
$b_RunCalibe = False
|
|
Else
|
|
$h_lockfile = FileOpen($s_LockFileName,2)
|
|
FileWriteLine($h_lockfile, $sUsername & ":" & $sComputername & ":" & @HOUR & ":" & @MIN & ":" & @MDAY & ":" & @MON & ":" & @YEAR & @CRLF)
|
|
FileClose($h_lockfile)
|
|
$b_RunCalibe = True
|
|
; Dinge aus RDP-Session herausfinden
|
|
$h_DllErgebnis = DllCall("Wtsapi32.dll","BOOL","WTSQuerySessionInformationW","int",0, "int", -1, "int", 10, "ptr*", 0, "DWORD*",0)
|
|
If @error Or $h_DllErgebnis[0] = 0 Then
|
|
$s_clientname = "unknown"
|
|
Else
|
|
$s_clientname = BinaryToString( DllStructGetData(DllStructCreate("byte[" & $h_DllErgebnis[5] & "]" , $h_DllErgebnis[4]),1) ,2)
|
|
DllCall("Wtsapi32.dll", "int", "WTSFreeMemory", "ptr", $h_DllErgebnis[4])
|
|
EndIf
|
|
$h_DllErgebnis = DllCall("Wtsapi32.dll","int", "WTSQuerySessionInformationW", "Ptr", 0, "int", -1, "int", 14, "ptr*", 0, "DWORD*", 0)
|
|
If @error Or $h_DllErgebnis[0] = 0 Then
|
|
$s_ip = "unknown"
|
|
Else
|
|
$s_ip = DllStructGetData(DllStructCreate("byte[" & $h_DllErgebnis[5] & "]" , $h_DllErgebnis[4]),1)
|
|
DllCall("Wtsapi32.dll", "int", "WTSFreeMemory", "ptr", $h_DllErgebnis[4])
|
|
$s_ip = StringTrimLeft($s_ip,14)
|
|
$a_DezimalIP[1] = Dec(StringLeft($s_ip,2))
|
|
$s_ip = StringTrimLeft($s_ip,2)
|
|
$a_DezimalIP[2] = Dec(StringLeft($s_ip,2))
|
|
$s_ip = StringTrimLeft($s_ip,2)
|
|
$a_DezimalIP[3] = Dec(StringLeft($s_ip,2))
|
|
$s_ip = StringTrimLeft($s_ip,2)
|
|
$a_DezimalIP[4] = Dec(StringLeft($s_ip,2))
|
|
$s_ip = $a_DezimalIP[1] & "." & $a_DezimalIP[2] & "." & $a_DezimalIP[3] & "." & $a_DezimalIP[4]
|
|
EndIf
|
|
; Und Logfile-Schreiben
|
|
If $s_clientname = "" Then
|
|
$s_clientname = "Keine RDP Sitzung!"
|
|
$s_ip = ""
|
|
EndIf
|
|
|
|
FileWriteLine(@ScriptDir & "\MultiuserLOG.txt", @YEAR & "-" & @MON & "-" & @MDAY & " " & @HOUR & ":" & @MIN & ":" & @SEC & " - LOGIN => USERNAME: " & @UserName & _
|
|
" COMPUTERNAME: " & @ComputerName & " RDP-Client: " & $s_clientname & " - " & $s_ip)
|
|
EndIf
|
|
|
|
|
|
If $b_RunCalibe = False Then
|
|
Exit 1
|
|
EndIf
|
|
|
|
If $b_SetWallpaper = True Then
|
|
Wallpaper(@ScriptDir & "\" & $s_WallpaperFile, "Fill")
|
|
EndIf
|
|
|
|
$h_Calibre = Run(@ScriptDir & "\" & $s_CalibreProgramName, @ScriptDir, @SW_MAXIMIZE)
|
|
If $h_Calibre = 0 Then
|
|
FileDelete($s_LockFileName)
|
|
MsgBox(16, "Fehler", "Konnte '" & @ScriptDir & "\" & $s_CalibreProgramName & "' nicht starten")
|
|
Exit 1
|
|
EndIf
|
|
|
|
;SpashImage features: Title=No, Width=602, Height=302, Always On Top
|
|
SplashImageOn("", "bittewarten.jpg","602","302","-1","-1",1)
|
|
|
|
Do
|
|
If $b_CalibreWindowsActive = False Then
|
|
If WinExists ("calibre") = 1 Then
|
|
Sleep(2000)
|
|
SplashOff()
|
|
;MsgBox(0, "Calibre-Fenster", "Ist da!")
|
|
$b_CalibreWindowsActive = True
|
|
EndIf
|
|
EndIf
|
|
Sleep(1000)
|
|
;ConsoleWrite($h_Calibre & @CRLF)
|
|
If (ProcessExists($h_Calibre) = 0) And (ProcessExists($s_CalibreMainProgramName) = 0) Then
|
|
$b_RunCalibe = False
|
|
EndIf
|
|
Until $b_RunCalibe = False
|
|
|
|
FileDelete($s_LockFileName)
|
|
FileWriteLine("MultiuserLOG.txt", @YEAR & "-" & @MON & "-" & @MDAY & " " & @HOUR & ":" & @MIN & ":" & @SEC & " - LOGOUT => USERNAME: " & @UserName & _
|
|
" COMPUTERNAME: " & @ComputerName & " RDP-Client: " & $s_clientname & " - " & $s_ip)
|
|
Sleep (2000)
|
|
|
|
If FileExists($s_LockFileName) = 1 Then
|
|
MsgBox(16,"Warnung", "Konnte das Calibre-Lock-File nicht löschen:" & @CRLF & @ScriptDir & "\" & $s_CalibreProgramName)
|
|
Exit 1
|
|
Else
|
|
Exit 0
|
|
EndIf
|
|
|
|
|
|
|
|
|
|
|