#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 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 ) 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