CalibreMultiuserStarter/CalibreMultiuserStarter.au3

187 lines
6.7 KiB
Plaintext

#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