#NoTrayIcon #Region ;**** Directives created by AutoIt3Wrapper_GUI **** #AutoIt3Wrapper_Icon=CalibeIcon.ico #AutoIt3Wrapper_UseX64=y #AutoIt3Wrapper_Res_Description=2013 Bernhard Linz / Bernhard@znil.de / http://znil.net #AutoIt3Wrapper_Res_Fileversion=1.0.0.7 #AutoIt3Wrapper_Res_Fileversion_AutoIncrement=y #AutoIt3Wrapper_Res_LegalCopyright=znil.net #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI **** Dim Const $s_LockFileName = "CalibreLockFile.txt" Dim Const $s_CalibreProgramName = "calibre-portable.exe" Dim Const $s_CalibreMainProgramName = "calibre.exe" 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] 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 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, @UserName & ":" & @ComputerName & ":" & @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("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 $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 Do Sleep(3000) 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