TCTrayMenue Truecrypt Container einbinden

  • ist ein kleines Programm um TrueCrypt Container/Laufwerke komfortabel einzubinden oder zu trennen.
    Es läuft wie der Name schon sagt im Systray.
    Eigentlich wollte ich bloß ein kleines Script basteln, das mir das einbinden von TrueCrypt Container/Laufwerken erleichtert.
    Ist dann aber ein bisschen mehr geworden.

    Schaut es euch einmal an, vielleicht könnt ihr es ja sogar gebrauchen.

    Erstellt mit : AutoIt3.2.12.1

    Was kann es:

    - TrueCrypt Container/Laufwerke einbinden / trennen
    - Automounten von TrueCrypt Container/Laufwerke - Passwort abfragen:
    - Programmstart mit kompletten Passwort , einem Teil vom Passwort, oder ohne Passwort
    - Passwort kann mit einer Verknüpfung übergeben werden, oder ein Teil davon
    - Standard Passwort Abfrage für das einbinden von TrueCrypt Containern / Laufwerken
    - oder Abfrage für - TrueCrypt Container / Laufwerk - Passwort
    - Sicherheit
    - Passwörter werden auf einem USB-Stick in einem TrueCrypt Container gespeichert
    - USB Stick kann ständig auf Existenz überprüft werden.
    Wenn nicht mehr eingesteckt werden ALLE TrueCrypt Container / Laufwerke getrennt,
    und das Programm beendet.
    - Der TrueCrypt Container mit den Passwörtern kann aber auch auf der HDD gespeichert
    werden, trotzdem kann die Existenz eines USB Sticks überprüft werden.
    - Überprüfung der Usernamen und oder der MAC-Adressen. Wenn das eingetragene
    Benutzerprofil nicht vorhanden und angemeldet ist, startet das Programm nicht.
    - Um Einstellungen zu verändern braucht man das Passwort vom dem TrueCrypt
    Container, in dem die Passwörter gespeichert sind.
    - Es wird eine Log-Datei angelegt in dem alle Zugriffe auf das Programm gespeichert
    werden. Falsche Passwörter werden Dokumentiert.


    - Programme starten, auch mit Parametern
    - Explorerfenster in bestimmten Verzeichnis öffnen
    - Menü-Einträge können selbst benannt, hinzugefügt oder gelöscht werden
    - Es können beliebig viele Laufwerke/ Container hinzugefügt werden

    Wie funktionierts

    Als erstes wird ein TrueCrypt Container erstellt (Name : KeyContainer ,
    Größe : so klein wie möglich) , in dem die eine Ini Datei gespeichert wird.
    Ich nenne sie mal KeyIni, in der die Passwörter für die TrueCrypt-Laufwerke
    und andere Parameter gespeichert werden. Dieser sollte auf einem USB-Stick
    gespeichert werden, muss man aber nicht.

    Jetzt wird ein neuer Ordner (Name: TCTrayMenue) erstellt.
    In diesem Ordner wird die TCTrayMenu.exe, TCTrayOp.exe, TCTrayMenu.ini
    gespeichert.

    Vor dem ersten Start sollte man TCTrayOp.exe ausführen um die Grundeistellungen
    in die TCTrayMenu.ini einzutragen.
    TCTrayOp.exe ist nur eine Oberfläche um die 2 Ini Dateien zu bearbeiten.

    Spoiler anzeigen
    [autoit]


    #cs********************************************************************************************************************************************
    AutoIt Version: 3.2.12.1
    Author: Bernd Krüger

    TCTrayMenue v 1.0

    Script Function:
    TrueCrypt Container/Laufwerke einbinden und Trennen
    Programme starten
    Explorer Fenster öffnen

    Datum 2.11.2008
    Der Author übernimmt keine Haftung für Schäden
    #ce********************************************************************************************************************************************
    #NoTrayIcon
    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Icon=E:\TCtrayMenue.ico
    #AutoIt3Wrapper_Outfile=TCTrayMenu.exe
    #AutoIt3Wrapper_Res_Description=TCTrayMenu - TrueCrypt Loader
    #AutoIt3Wrapper_Res_Fileversion=1.0.0.1
    #AutoIt3Wrapper_Res_FileVersion_AutoIncrement=y
    #AutoIt3Wrapper_Res_LegalCopyright=Bernd Krüger
    #AutoIt3Wrapper_Res_Language=1031
    #AutoIt3Wrapper_Au3Check_Stop_OnWarning=y
    #AutoIt3Wrapper_Run_Obfuscator=y
    #Obfuscator_Parameters=/striponly /Beta /sci 0
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #include <GUIConstants.au3>
    #include <Constants.au3>
    #include <Array.au3>
    #include <Misc.au3>
    #include <String.au3>
    #include <EditConstants.au3>
    #include <WindowsConstants.au3>
    #include <ListviewConstants.au3>
    #include <file.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Opt("TrayMenuMode", 1)

    [/autoit] [autoit][/autoit] [autoit]

    If _Singleton("TCTrayMenu.exe", 1) = 0 Then
    MsgBox(0, "Warning", "TCTrayMenu is already running")
    Exit
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    Global $TrueCrypt_Pfad, $Alle_LWB, $Name_TC_Key_vol, $LW_TCTRini
    Global $not_exit
    Global $LWB_TC_Vol, $TC_Vol, $m_eintrag, $msg_info
    Global $Finde_LWB_KeyIni, $IniReadSection_TC_Volume
    Global $Stick_einbinden, $Bev_LWB_Vol, $lw_explorer_start
    Global $lw_device, $device_pfad, $untermenue_value, $LW_Name
    Global $LW_B, $explorer_auto, $row, $reihe, $sSerial
    Global $spalte, $LW_Auto, $Stick_ID, $opt, $lw_opt
    Global $mount, $unmount, $Array_Alle_LWB
    Global $run, $run_expl, $run_prog, $run_programme, $option
    Global $PASSWD1, $PASSWD2
    Global $menue[110][20], $LW_Optionen[25][14], $menu_eintrag[20][4]
    Global Const $MIM_APPLYTOSUBMENUS = 0x80000000
    Global Const $MIM_BACKGROUND = 0x00000002
    Global $stick_entfernt = 0
    Global $cmdEnde_Liste_LW, $guiLW_Liste
    Global $sSerial = 0
    TraySetToolTip("TCTrayMenue - TrueCrypt Volumes mounten")

    [/autoit] [autoit][/autoit] [autoit]

    If $menue[109][0] <> "ok" Then
    _Menueeintraege_erstellen()
    EndIf
    ;-------------------- Menüeinträge ---------------------------------------------------------
    Func _Menueeintraege_erstellen()
    Local $e, $h, $j, $k, $i
    $LW_TCTRini = @ScriptDir & "\TCTrayMenu.ini"
    If UBound($CmdLine) > 1 Then $menue[28][0] = 1
    If UBound($CmdLine) > 2 Then $LW_TCTRini = $CmdLine[2] & ":\TCTrayMenu.ini"

    [/autoit] [autoit][/autoit] [autoit]

    ;#################################################################################################################################
    $menue[0][0] = IniRead($LW_TCTRini, "Optionen", "TrueCrypt_Pfad", @ProgramFilesDir & "\TrueCrypt\TrueCrypt.exe")
    $menue[1][0] = "C D E F G H I J K L M N O P Q R S T U V W X Y Z"
    $menue[2][0] = IniRead($LW_TCTRini, "Optionen", "Bevorzugte_LWB_TC_Vol", " V W X Y Z")
    $menue[3][0] = IniRead($LW_TCTRini, "Optionen", "LW_Name_TC_Key_Vol", "TC-KEY-VOL")
    $menue[5][0] = StringStripWS(IniRead($LW_TCTRini, "Optionen", "Name_KeyIni", "KeyIni.ini"), 3)
    $menue[6][0] = IniRead($LW_TCTRini, "Optionen", "LW_Buchstabe_TC_Key_Vol", "S") & ":\" & $menue[5][0]
    $menue[7][0] = StringStripWS(IniRead($LW_TCTRini, "Optionen", "Trennen bestaetigen", "n"), 3)
    $menue[8][0] = IniRead($LW_TCTRini, "Optionen", "LW_Buchstabe_TC_Key_Vol", "S")
    $menue[9][0] = IniRead($LW_TCTRini, "Optionen", "USB_Key_STICK", "Schlüssel Container einbinden")
    $menue[10][0] = IniRead($LW_TCTRini, "Optionen", "Explorer_Automount", "n")
    $menue[11][0] = IniRead($LW_TCTRini, "Optionen", "USB_STICK_ID", "Optionen")
    $menue[13][0] = IniRead($LW_TCTRini, "Optionen", "Menue_Farben", "0xFFFFEd 0xE6FFFF 0xCCCCFF 0x0C0FEA 0xFFFFEA 0xFFEAFF 0xCCCCFF 0x000CFF")
    $menue[23][0] = IniRead($LW_TCTRini, "Optionen", "Pfad_TC_Key_Vol", "")
    $menue[24][0] = IniRead($LW_TCTRini, "Optionen", "Key_Container_auf_HDD", "")
    $menue[25][0] = IniRead($LW_TCTRini, "Optionen", "PASSWD_fuer_Key_Container", "")
    $menue[26][0] = IniRead($LW_TCTRini, "Optionen", "PASSWD1_fuer_Key_Container", "")
    $menue[27][0] = IniRead($LW_TCTRini, "Optionen", "PASSWD2_fuer_Key_Container", "")
    $menue[29][0] = IniRead($LW_TCTRini, "Optionen", "PNPDeviceID", "")
    $menue[36][0] = IniRead($LW_TCTRini, "Optionen", "Sound", "j")
    $sSerial = IniRead($LW_TCTRini, "Optionen", "Serien Nummer", "0")
    $Array_Alle_LWB = StringSplit($menue[1][0], " ")
    Local $mFarben = StringSplit($menue[13][0], " ")
    If Not FileExists($menue[6][0]) Then
    $lw_opt = "rm"
    _TCKey_Container_einbinden($lw_opt)
    EndIf
    $Stick_ID = TrayCreateItem("Optionen")
    $Stick_einbinden = TrayCreateItem($menue[9][0])
    $not_exit = TrayCreateItem("Ende")
    $menue[4][0] = IniRead($menue[6][0], "Device", "TC_Key_Vol_nach_Programmstart_trennen", "n")
    $menue[14][0] = IniRead($menue[6][0], "Device", "Bei_Programm_Ende_trennen", "n")
    $menue[15][0] = IniRead($menue[6][0], "Device", "TrueCrypt_trennen_erzwingen", "n")
    $menue[16][0] = IniRead($menue[6][0], "Device", "Device_Seriennummer", "")
    $menue[17][0] = IniRead($menue[6][0], "Device", "Trennen_wenn_kein_USBStick", "j")
    $menue[18][0] = IniRead($menue[6][0], "Device", "Aktualisierungs_Zeit", "5000")
    $menue[19][0] = IniRead($menue[6][0], "Device", "Zeit_bis_trennen", "15")
    $menue[21][0] = IniRead($menue[6][0], "PassWD", "Password", "")
    $menue[22][0] = IniRead($menue[6][0], "Device", "PassAbfrage_vor_einbinden", "n")
    $menue[32][0] = IniRead($menue[6][0], "Device", "USBAbfrage_vor_einbinden", "n")
    $menue[33][0] = IniRead($menue[6][0], "Device", "MacAbfrage_vor_einbinden", "n")
    $menue[34][0] = IniRead($menue[6][0], "Device", "UserAbfrage_vor_einbinden", "n")
    $menue[35][0] = IniRead($menue[6][0], "Device", "Passwort_anzeigen", "n")
    If $menue[32][0] <> "j" Then $menue[17][0] = "n"
    ;#################################################################################################################################

    [/autoit] [autoit][/autoit] [autoit]

    If FileExists($menue[6][0]) Then
    Dim $IniReadSection_TC_Volume = IniReadSection($menue[6][0], "TC-Volumes")
    $menue[20][0] = UBound($IniReadSection_TC_Volume) - 1
    Dim $m_eintrag = IniReadSection($menue[6][0], "HauptMenue")
    Dim $msg_info = IniRead($menue[6][0], "MSGBOX_Info", "text1", "")
    If Not _zulassung() Then
    MsgBox(32, "++++ Vergiss Es +++++", "Das war wohl nichts!!" & @CRLF & @CRLF & @CRLF, 5)
    Exit
    EndIf
    $e = 1
    For $e = 1 To UBound($IniReadSection_TC_Volume) - 1
    $LW_Optionen[$e][0] = IniRead($menue[6][0], $IniReadSection_TC_Volume[$e][1], "Pfad", "")
    $LW_Optionen[$e][1] = IniRead($menue[6][0], $IniReadSection_TC_Volume[$e][1], "LaufwerksBuchstabe", "")
    $LW_Optionen[$e][2] = IniRead($menue[6][0], $IniReadSection_TC_Volume[$e][1], "Laufwerksname", "")
    $LW_Optionen[$e][3] = IniRead($menue[6][0], $IniReadSection_TC_Volume[$e][1], "optionen", "")
    $LW_Optionen[$e][4] = IniRead($menue[6][0], $IniReadSection_TC_Volume[$e][1], "Passwort", "")
    $LW_Optionen[$e][5] = IniRead($menue[6][0], $IniReadSection_TC_Volume[$e][1], "Schluesseldatei0", "")
    $LW_Optionen[$e][6] = IniRead($menue[6][0], $IniReadSection_TC_Volume[$e][1], "Automount", "")
    $LW_Optionen[$e][7] = IniRead($menue[6][0], $IniReadSection_TC_Volume[$e][1], "Explorer starten", "")
    $LW_Optionen[$e][8] = IniRead($menue[6][0], $IniReadSection_TC_Volume[$e][1], "Serien Nummer", "")
    $LW_Optionen[$e][9] = IniRead($menue[6][0], $IniReadSection_TC_Volume[$e][1], "USB-HDD", "")
    $LW_Optionen[$e][11] = IniRead($menue[6][0], $IniReadSection_TC_Volume[$e][1], "Partition", "")
    $LW_Optionen[$e][12] = IniRead($menue[6][0], $IniReadSection_TC_Volume[$e][1], "USB Serial", "")
    $LW_Optionen[$e][13] = IniRead($menue[6][0], $IniReadSection_TC_Volume[$e][1], "PassAbfrage_vor_einbinden", "j")
    $LW_Optionen[$e][10] = "INVALID"
    Next
    If IsArray($m_eintrag) Then
    $h = 1
    $i = 0
    $j = 1
    $k = 0
    For $i = 1 To UBound($m_eintrag) - 1
    If $m_eintrag[$i][0] = "" Then ExitLoop
    $eintrag = StringSplit($m_eintrag[$i][1], ",")
    $menu_eintrag[$i][1] = StringStripWS($eintrag[1], 3)
    If UBound($eintrag) - 1 > 1 Then $menu_eintrag[$i][2] = StringStripWS($eintrag[2], 8)
    If UBound($eintrag) - 1 > 2 Then $menu_eintrag[$i][3] = StringStripWS($eintrag[3], 8)

    [/autoit] [autoit][/autoit] [autoit]

    If UBound($eintrag) = 3 Then $menu_eintrag[$i][2] = $eintrag[2]
    Select
    Case $menu_eintrag[$i][2] = "" ;Einträge im Hauptmenu ( TrayCreateItem kein Untermenu)
    If $menu_eintrag[$i][1] = "Trennlinie" Then
    $menue[1][$i] = TrayCreateItem("")
    Else
    $menue[0][$i] = $menu_eintrag[$i][3]
    $menue[1][$i] = TrayCreateItem($menu_eintrag[$i][1])
    $menue[2][$i] = $menu_eintrag[$i][1]
    $menue[3][$i] = $menu_eintrag[$i][2]
    EndIf
    Case $menu_eintrag[$i][2] <> "" ; Einträge im Untermenü
    $menue[0][$i] = $menu_eintrag[$i][3]
    $menue[2][$i] = $menu_eintrag[$i][1]
    $menue[3][$i] = $menu_eintrag[$i][2]
    If $menu_eintrag[$i][1] = "Trennlinie" Then
    $menue[1][$i] = TrayCreateItem("")
    Else
    $menue[1][$i] = TrayCreateMenu($menue[2][$i]) ; Menüentrag erstellen
    EndIf
    $e = 0
    $f = 4
    $j = $f + 35
    $k = $f + 70
    $untermenu = IniReadSection($menue[6][0], $menu_eintrag[$i][2])
    $menue[$f][$i] = TrayCreateItem("", $menue[1][$i])
    For $e = 1 To UBound($untermenu) - 1
    $unterm = StringSplit($untermenu[$e][1], ",")
    $untermenue = StringStripWS($unterm[1], 3)
    If $unterm[0] > 1 Then $untermenue_value = StringStripWS($unterm[2], 3)
    If $unterm[0] > 2 Then $untermenue_value1 = StringStripWS($unterm[3], 3)
    If $untermenue = "Trennlinie" Then
    $menue[$f][$i] = TrayCreateItem("", $menue[1][$i])
    Else
    $menue[$f][$i] = TrayCreateItem($untermenue, $menue[1][$i])
    $menue[$j][$i] = $untermenue
    $menue[$k][$i] = $untermenue_value
    EndIf
    $f = $f + 1
    $j = $j + 1
    $k = $k + 1
    Next
    $menue[$f][$i] = TrayCreateItem("", $menue[1][$i])

    [/autoit] [autoit][/autoit] [autoit]

    EndSelect
    Next
    _Spalte_mount()
    If $mFarben[1] <> "" Then
    SetMenuColor(0, StringStripWS($mFarben[1], 3)) ; BGR color value, '0' means the tray context menu handle itself
    If UBound($mFarben) > 2 And IsNumber($menue[1][$mount]) Then SetMenuColor($menue[1][$mount], StringStripWS($mFarben[2], 3)); BGR color value
    If UBound($mFarben) > 3 And IsNumber($menue[1][$unmount]) Then SetMenuColor($menue[1][$unmount], StringStripWS($mFarben[3], 3)); BGR color value
    If UBound($mFarben) > 4 And IsNumber($menue[1][$run_programme]) Then SetMenuColor($menue[1][$run_programme], StringStripWS($mFarben[4], 3)); BGR color value
    If UBound($mFarben) > 5 And IsNumber($menue[1][$run_expl]) Then SetMenuColor($menue[1][$run_expl], StringStripWS($mFarben[5], 3)); BGR color value
    If UBound($mFarben) > 6 And IsNumber($menue[1][$option]) Then SetMenuColor($menue[1][$option], StringStripWS($mFarben[6], 3)); BGR color value
    If UBound($mFarben) > 7 And IsNumber($menue[1][$run]) Then SetMenuColor($menue[1][$run], StringStripWS($mFarben[7], 3)); BGR color value
    If UBound($mFarben) > 8 And IsNumber($menue[1][$run_prog]) Then SetMenuColor($menue[1][$run_prog], StringStripWS($mFarben[8], 3)); BGR color value
    EndIf
    TrayItemDelete($Stick_ID)
    TrayItemDelete($Stick_einbinden)
    TrayItemDelete($not_exit)
    EndIf
    _LW_Option()
    If $menue[109][0] <> "ok" Then _Automount()
    $menue[109][0] = "ok"
    If $menue[4][0] = "j" Then RunWait($menue[0][0] & " /q /d " & $menue[8][0] & " /b /f")
    EndIf
    _adlib_start_ende()
    _hakenan()
    EndFunc ;==>_Menueeintraege_erstellen
    ;-------------------- Menüeinträge ---------------------------------------------------------
    TraySetState()
    TraySetClick(18)
    While 1
    $msg = TrayGetMsg()
    If $msg > 0 Then
    $h = 1
    $i = 0
    Dim $go = ""
    For $i = 1 To UBound($menue, 2) - 1
    For $k = 1 To UBound($menue) - 1
    If $menue[$k][$i] = $msg Then
    $go = ""
    $go1 = ""
    $reihe = 0
    $row = 0
    $spalte = 0
    $go = $menue[0][$i]
    $go1 = $menue[3][$i];
    $reihe = $k - 3
    $row = $k
    $spalte = $i
    ExitLoop 2
    EndIf
    Next
    Next

    Select
    Case $msg = $Stick_einbinden
    $lw_opt = "ro"
    _menue_eintrage_entfernen()
    _Menueeintraege_erstellen()
    _Automount()
    Case $msg = $Stick_ID
    Run("TCTrayOp.exe")
    Case $msg = $not_exit
    ExitLoop
    Case $go = "option"
    $opt = $menue[$row + 70][$spalte]
    Select
    Case $opt = "Einstellungen"
    _LW_Option()
    If DriveStatus($menue[8][0] & ":\") <> "INVALID" Then RunWait($menue[0][0] & " /q /d " & $menue[8][0] & " /b /f")
    Sleep(100)
    $lw_opt = "rm"
    _TCKey_Container_einbinden($lw_opt)
    _LW_Option()
    _hakenan()
    _FileWriteLog($menue[8][0] & ":\my.log", " TCKeyIni - zuletzt als RW gemountet unter ( " & $menue[8][0] & ":\ )")
    Run("TCTrayOp.exe")
    Case $opt = "_SerienNummerFinden"
    _SerienNummerFinden()
    Case $opt = "Info"
    _info()
    Case StringRight($opt, 3) = "ini"
    If $opt = "TCKeyini" Then $opt = $menue[6][0]
    ShellExecute($opt)
    Case StringRight($opt, 3) = "txt"
    ShellExecute($opt)
    Case StringRight($opt, 3) = "log"
    ShellExecute($opt)
    EndSelect
    Case $go = "run"
    $Prog = $menue[$row + 70][$spalte]
    Run($Prog)
    Case $go = "run_prog"
    $Prog = $menue[$row + 70][$spalte]
    Run($Prog)
    Case $go = "run_programme"
    $Prog = $menue[$row + 70][$spalte]
    Run($Prog)
    Case $go = "run_explorer"
    $Prog = $menue[$row + 70][$spalte]
    Run($Prog)
    Case $go = "msgbox"
    _info()
    Case $go = "aktualisieren"
    _menue_eintrage_entfernen()
    _Menueeintraege_erstellen()
    Case $go = "automount"
    $LW_Auto = "automount"
    $explorer_auto = $menue[10][0]
    _Automount()
    Case $go = "mount"
    $TC_Vol = $menue[$row + 35][$spalte]
    If $TC_Vol <> "" Then
    If $TC_Vol = $menue[3][0] Then
    $lw_opt = "rm"
    _TCKey_Container_einbinden($lw_opt)
    _LW_Option()
    _hakenan()
    _FileWriteLog($menue[8][0] & ":\my.log", " TCKeyIni - zuletzt als RW gemountet unter ( " & $menue[8][0] & ":\ )")
    Else
    $explorer_auto = "j"
    MountVolumes()
    EndIf
    EndIf
    Case $go = "unmount"
    _LW_Trennen()
    Case $go = "exit"
    If _beenden($msg) = "exit" Then ExitLoop
    Case $go = "alle_trennen"
    Run($menue[0][0] & " /dismount /force /quit /silent ")
    Exit
    ;----------- Listview Laufwerke --------------------------------------------
    Case $msg = $cmdEnde_Liste_LW
    GUISetState(@SW_HIDE, $guiLW_Liste)
    EndSelect
    EndIf
    WEnd
    Exit

    [/autoit] [autoit][/autoit] [autoit]

    Func _Finde_LW()
    $LW_Name = StringLower(StringStripWS($LW_Optionen[$reihe][2], 3))
    $i = 0
    Do
    If $i = UBound($Array_Alle_LWB) - 1 Then ExitLoop
    $i = $i + 1
    Until StringStripWS(DriveGetSerial($Array_Alle_LWB[$i] & ":\"), 3) = StringStripWS($LW_Optionen[$reihe][8], 3)

    If StringStripWS(DriveGetSerial($Array_Alle_LWB[$i] & ":\"), 3) = StringStripWS($LW_Optionen[$reihe][8], 3) Then
    $LWB_TC_Vol = $Array_Alle_LWB[$i]
    Else
    $LWB_TC_Vol = "NotFound"
    EndIf
    Return $LWB_TC_Vol
    EndFunc ;==>_Finde_LW

    [/autoit] [autoit][/autoit] [autoit]

    Func _LW_Trennen()
    Local $drivegetserial
    If $LW_Optionen[$reihe][10] <> "INVALID" Then $drivegetserial = DriveGetSerial($LW_Optionen[$reihe][10] & ":\")
    If $drivegetserial <> $LW_Optionen[$reihe][8] Then ;--> $LW_Optionen[$row][8] Seriennummer in der KeyIni
    If _Finde_LW() = "NotFound" Then
    TrayTip("++++ Volume Trennen +++++", "TrueCrypt Volume - " & $LW_Name & " - war nicht eingebunden.", 1)
    Else
    _LW_Trennen1()
    EndIf
    Else
    If $LW_Optionen[$reihe][10] <> "INVALID" Then
    $LWB_TC_Vol = $LW_Optionen[$reihe][10]
    _LW_Trennen1()
    Else
    TrayTip("++++ Volume Trennen +++++", "TrueCrypt Volume - " & $LW_Name & " - war nicht eingebunden.", 1)
    EndIf
    EndIf
    EndFunc ;==>_LW_Trennen
    Func _LW_Trennen1()
    Local $trennen = ""
    $LW_Name = StringStripWS($LW_Optionen[$reihe][2], 3)
    If $menue[15][0] = "j" Then $trennen = "/f"
    If $menue[7][0] = "j" Then
    $trenn = MsgBox(0x40044, "++++ Trennen +++++", "Laufwerk: - " & StringUpper($LW_Name) & " (" & StringUpper($LWB_TC_Vol) & ":) - Trennen?")
    If $trenn = 6 Then
    If DriveGetLabel($LWB_TC_Vol & ":\") = "TCTrayMenue" And $menue[28][0] = 1 Then $menue[28][0] = 0 ;nur wenn TCTraymenu im Container verschlüsselt ist
    RunWait($menue[0][0] & " /q /d " & $LWB_TC_Vol & " /b " & $trennen)
    Sleep(500)
    If DriveStatus($LWB_TC_Vol & ":\") = "INVALID" Then TrayTip("++++ Trennen +++++", "Laufwerk: - " & StringUpper($LW_Name) & " (" & StringUpper($LWB_TC_Vol) & ":) - ist getrennt!", 1)
    EndIf
    Else
    If DriveGetLabel($LWB_TC_Vol & ":\") = "TCTrayMenue" And $menue[28][0] = 1 Then $menue[28][0] = 0 ;nur wenn TCTraymenu im Container verschlüsselt ist
    RunWait($menue[0][0] & " /q /d " & $LWB_TC_Vol & " /b " & $trennen)
    Sleep(500)
    If DriveStatus($LWB_TC_Vol & ":\") = "INVALID" Then TrayTip("++++ Trennen +++++", "Laufwerk: - " & StringUpper($LW_Name) & " (" & StringUpper($LWB_TC_Vol) & ":) - ist getrennt!", 1)
    EndIf
    _hakenan()
    EndFunc ;==>_LW_Trennen1
    ;---------Func _hakenan() vorhandene Laufwerke finden und Haken setzen -------------------------------------------------------------------
    ;----- Spalteen finden ----------------
    Func _Spalte_mount()
    Local $i = 0
    For $i = 1 To UBound($menue, 2) - 1
    If $menue[0][$i] = "mount" Then $mount = $i
    If $menue[0][$i] = "unmount" Then $unmount = $i
    If $menue[0][$i] = "run_explorer" Then $run_expl = $i
    If $menue[0][$i] = "run" Then $run = $i
    If $menue[0][$i] = "run_prog" Then $run_prog = $i
    If $menue[0][$i] = "run_programme" Then $run_programme = $i
    If $menue[0][$i] = "option" Then $option = $i
    Next
    EndFunc ;==>_Spalte_mount
    Func _hakenan()
    Local $LW_o
    _Spalte_mount()
    $lw_section = ""
    ;-------- alle Haken entfernen ----------------------------
    $i = 0
    $e = 0
    For $e = 1 To UBound($IniReadSection_TC_Volume) - 1
    TrayItemSetState($menue[$e + 3][$mount], $TRAY_UNCHECKED)
    TrayItemSetState($menue[$e + 3][$unmount], $TRAY_UNCHECKED)
    TrayItemSetText($menue[$e + 3][$mount], $menue[$e + 38][$mount])
    TrayItemSetText($menue[$e + 3][$unmount], $menue[$e + 38][$unmount])
    Next
    ;---------vorhandene Laufwerke finden und Haken setzen -----
    $e = 1
    $i = 0
    For $i = 0 To UBound($Array_Alle_LWB) - 1
    For $e = 1 To UBound($IniReadSection_TC_Volume) - 1
    $drivegetserial = DriveGetSerial($Array_Alle_LWB[$i] & ":\")
    If $drivegetserial = $LW_Optionen[$e][8] Then
    If $LW_Optionen[$e][3] = "ro" Then
    $LW_o = "ReadOnly"
    Else
    $LW_o = "RW"
    EndIf
    TrayItemSetState($menue[$e + 3][$mount], $TRAY_CHECKED)
    TrayItemSetText($menue[$e + 3][$mount], $menue[$e + 38][$mount] & " (" & StringUpper($Array_Alle_LWB[$i]) & ":\) " & $LW_o)
    TrayItemSetText($menue[$e + 3][$unmount], $menue[$e + 38][$unmount] & " (" & StringUpper($Array_Alle_LWB[$i]) & ":\) " & $LW_o)
    TrayItemSetState($menue[$e + 3][$unmount], $TRAY_CHECKED)
    $LW_Optionen[$e][1] = $Array_Alle_LWB[$i]
    EndIf
    Next
    Next
    EndFunc ;==>_hakenan
    ;----- alle Menue - Untermenüeinträge entfernen -----------------------------------------------------------------------------------
    Func _menue_eintrage_entfernen()
    $e = 1
    $i = 0
    For $i = 0 To UBound($menue, 2) - 1
    For $e = 1 To UBound($menue) - 1
    TrayItemDelete($menue[$e][$i])
    Next
    Next
    TrayItemDelete($Stick_ID)
    TrayItemDelete($Stick_einbinden)
    TrayItemDelete($not_exit)
    EndFunc ;==>_menue_eintrage_entfernen
    Func _Finde_KeyIni()
    $Finde_LWB_KeyIni = $menue[8][0]
    $LWB_Key_Vol = $menue[8][0]
    $i = 1
    If FileExists($menue[8][0] & ":\" & $menue[5][0]) Then Return $Finde_LWB_KeyIni

    While Not FileExists($menue[8][0] & ":\" & $menue[5][0]);==> $menue[8][0] = LW_Buchstabe_TC_Key_Vol ; $menue[5][0]= $Name_KeyIni
    If FileExists($Array_Alle_LWB[$i] & ":\" & $menue[5][0]) Then
    $menue[6][0] = $Array_Alle_LWB[$i] & ":\" & $menue[5][0]
    $menue[8][0] = $Array_Alle_LWB[$i]
    $Finde_LWB_KeyIni = $Array_Alle_LWB[$i]
    ExitLoop
    EndIf
    If DriveGetLabel($Array_Alle_LWB[$i] & ":\") = $menue[3][0] Then
    $Finde_LWB_KeyIni = $Array_Alle_LWB[$i]
    $menue[8][0] = $Array_Alle_LWB[$i]
    ExitLoop
    EndIf
    $i = $i + 1
    If $i = UBound($Array_Alle_LWB) Then
    $Finde_LWB_KeyIni = 0
    ExitLoop
    EndIf
    WEnd
    $sSerial1 = DriveGetSerial($Finde_LWB_KeyIni & ":\")
    If $sSerial1 = $sSerial And $sSerial1 <> 0 And Not FileExists($menue[8][0] & ":\" & $menue[5][0]) Then
    MsgBox(0x40 + 0x40000, 'KeyIni nicht gefunden', @LF & 'Laufwerk ' & $menue[8][0] & ':\ ist richtig eingebunden.' & @LF & 'Seriennummer ist: ' & $sSerial1 & @LF & @LF & 'Datei ist NICHT vorhanden: ' & $menue[8][0] & ":\" & $menue[5][0] & @LF & @LF & 'Überprüfe den Pfad und den Dateinamen in der TCTrayMenu.ini !' & @LF & 'Programm wird beendent.' & @LF & 'Explorer ' & $menue[3][0] & '( ' & $menue[8][0] & ':\ )' & @LF & 'und Einstellungen werden geöffnet.') ;### Debug MSGBOX
    RunWait("explorer.exe " & $menue[8][0] & ":\")
    RunWait("TCTrayOp.exe")
    Exit
    EndIf
    Return $Finde_LWB_KeyIni
    EndFunc ;==>_Finde_KeyIni
    ;-- Einen freien Laufwerksbuchstaben, aus einer Auswahl in der TCTrayMenue.ini ( Bevorzugte_LWB_TC_Vol = .. ) ,finden. -------------
    Func _Bevorzugte_LWB_TC_Vol()
    $Bev_LWB_Vol = StringSplit(StringStripWS($menue[2][0], 8), "")
    If DriveStatus(StringStripWS($LW_Optionen[$reihe][1], 3) & ":\") <> "INVALID" Then
    $i = UBound($Bev_LWB_Vol)
    Do
    $i = $i - 1
    $LWB_TC_Vol = $Bev_LWB_Vol[$i]
    If $i = 1 Then ExitLoop;UBound($Bev_LWB_Vol) - 1
    Until DriveStatus($Bev_LWB_Vol[$i] & ":\") = "INVALID"

    If DriveStatus($LWB_TC_Vol & ":\") = "INVALID" Then
    Return $LWB_TC_Vol
    Else
    $i = UBound($Array_Alle_LWB)
    Do
    $i = $i - 1
    $LWB_TC_Vol = $Array_Alle_LWB[$i]
    If $i = 1 Then ExitLoop
    Until DriveStatus($Array_Alle_LWB[$i] & ":\") = "INVALID"
    If DriveStatus($Array_Alle_LWB[$i] & ":\") = "INVALID" Then Return $LWB_TC_Vol
    EndIf
    Else
    $LWB_TC_Vol = StringStripWS($LW_Optionen[$reihe][1], 3)
    Return $LWB_TC_Vol
    EndIf
    EndFunc ;==>_Bevorzugte_LWB_TC_Vol

    [/autoit] [autoit][/autoit] [autoit]

    Func MountVolumes()
    Local $pfad, $beep, $sContainerLaufwerk
    $LW_Name = $LW_Optionen[$reihe][2]
    $lw_s0 = ""
    $LW_B = _Finde_LW()
    If $LW_B <> "NotFound" Then
    If $menue[109][0] = "ok" Then
    Run("explorer.exe " & $LW_B & ":\")
    Else
    Return
    EndIf
    Else
    If $LW_Optionen[$reihe][4] <> "" Then
    If $menue[109][0] = "ok" Then
    If $menue[22][0] = "j" Then
    $PASSWD3 = _Passwort("LW_Pass")
    If $PASSWD3 <> $menue[21][0] Then
    MsgBox(64, "Fehler Passworteingabe", "Passwort falsch. ")
    Return
    ElseIf $PASSWD3 = False Then
    MsgBox(64, "Fehler Passworteingabe", "Passwort leer. ")
    Return
    EndIf
    EndIf
    Else
    $PASSWD3 = $menue[21][0]
    EndIf
    EndIf
    $LW_B = _Bevorzugte_LWB_TC_Vol()
    If $LW_Optionen[$reihe][9] = "j" Then
    $pfad = _Pfad_USB_HDD()
    If Not $pfad Then
    $pfad = "NotFound"
    MsgBox(64, @ScriptLineNumber & " Einbinden fehlgeschlagen", "TrueCrypt-Partition nicht gefunden!")
    Return
    Else
    $pfad = $device_pfad
    $sContainerLaufwerk = "Das Passwort für die Verschlüsselte Festplatte:"
    EndIf
    Else
    $pfad = $LW_Optionen[$reihe][0]
    $sContainerLaufwerk = "Das Passwort für den TrueCrypt-Container:"
    If Not FileExists($pfad) Then
    MsgBox(64, @ScriptLineNumber & " Container Einbinden fehlgeschlagen", "Pfad zum TrueCrypt-Container nicht gefunden!")
    Return
    EndIf
    EndIf
    $pfad = " /v " & $pfad
    $lw_opt = " /m " & $LW_Optionen[$reihe][3]
    $PASSWD = " /p " & $LW_Optionen[$reihe][4]
    If $menue[35][0] = "j" Then MsgBox(262144, 'Passwort', $sContainerLaufwerk & @LF & @LF & StringTrimLeft($pfad, 4) & @LF & @LF & "= " & $LW_Optionen[$reihe][4])
    If $LW_Optionen[$reihe][5] <> "" Then $lw_s0 = " /k " & $LW_Optionen[$reihe][5]
    $lw_explorer_start = ""
    If $LW_Optionen[$reihe][7] = "j" And $explorer_auto = "j" And $menue[109][0] = "ok" Then $lw_explorer_start = " /e"
    If $menue[109][0] = "ok" Then $beep = " /b "
    RunWait($menue[0][0] & $pfad & " /q /l " & $LW_B & $PASSWD & $lw_opt & $lw_s0 & $lw_explorer_start & $beep)
    If DriveStatus($LW_B & ":\") = "READY" Then
    If DriveGetLabel($LW_B & ":\") <> $LW_Name Then
    DriveSetLabel($LW_B & ":\", $LW_Name)
    EndIf
    $LW_Optionen[$reihe][10] = StringUpper($LWB_TC_Vol)
    $LW_Optionen[$reihe][8] = DriveGetSerial($LWB_TC_Vol & ":")
    TrayTip("++++ Alles klar +++++", @LF & "TrueCrypt-Volume: - " & StringTrimLeft($pfad, 4) & @LF & @LF & "als " & StringUpper($LW_Name) & " (" & StringUpper($LWB_TC_Vol) & ":) - erfolgreich eingebunden", 3, 1)
    EndIf
    EndIf
    _hakenan()
    EndFunc ;==>MountVolumes

    [/autoit] [autoit][/autoit] [autoit]

    Func _beenden($msg)
    Local $trennen = ""
    If StringStripWS($menue[15][0], 3) = "j" Then $trennen = " /force"
    Local $ExitCode = StringTrimLeft($menue[$row + 70][$spalte], 5)
    If $ExitCode = "" Then Return
    If $ExitCode = "nurProgrammEnde" Then Exit
    If $ExitCode = "exit" Then
    If $menue[28][0] = 1 Then
    Run($menue[0][0] & " /q /d " & StringLeft(@ScriptDir, 1) & " /b /f")
    EndIf
    $menue[28][0] = 0
    If FileExists($menue[6][0]) Then Run($menue[0][0] & " /q /d " & $menue[8][0] & " /b /f ")
    If StringStripWS($menue[14][0], 3) = "j" Then Run($menue[0][0] & " /q /d /b " & $trennen)
    Return $ExitCode
    ElseIf $ExitCode = "entfernen" Then
    Run($menue[0][0] & " /q /d /b " & $trennen)
    Run("removedrive.exe " & $menue[30][0] & ": -l -b")
    Else
    Run($menue[0][0] & " /q /d /b " & $trennen)
    Shutdown(Number($ExitCode))
    EndIf
    EndFunc ;==>_beenden

    [/autoit] [autoit][/autoit] [autoit]

    Func _GetMACFromIP($sIP = @IPAddress1, $mode = 1)
    Local $MAC, $MACSize
    Local $i, $s, $r, $iIP
    $MAC = DllStructCreate("byte[6]")
    $MACSize = DllStructCreate("int")
    DllStructSetData($MACSize, 1, 6)
    $r = DllCall("Ws2_32.dll", "int", "inet_addr", _
    "str", $sIP)
    $iIP = $r[0]
    $r = DllCall("iphlpapi.dll", "int", "SendARP", "int", $iIP, "int", 0, "ptr", DllStructGetPtr($MAC), "ptr", DllStructGetPtr($MACSize))
    $s = ""
    If $mode = 0 Then
    For $i = 0 To 5
    $s &= Hex(DllStructGetData($MAC, 1, $i + 1), 2)
    Next

    [/autoit] [autoit][/autoit] [autoit]

    ElseIf $mode = 1 Then
    For $i = 0 To 5
    If $i Then $s = $s & ":"
    $s = $s & Hex(DllStructGetData($MAC, 1, $i + 1), 2)
    Next
    ElseIf $mode = 2 Then
    For $i = 0 To 5
    If $i Then $s = $s & "-"
    $s = $s & Hex(DllStructGetData($MAC, 1, $i + 1), 2)
    Next
    EndIf
    Return $s
    EndFunc ;==>_GetMACFromIP
    Func _Pfad_USB_HDD()
    $strComputer = "."
    $objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")
    $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_DiskDrive")
    For $objItem In $colItems
    $USB_Serial = StringTrimLeft(StringTrimRight($objItem.PNPDeviceID, 2), (StringInStr($objItem.PNPDeviceID, "\", 0, 2)))
    If $USB_Serial = $LW_Optionen[$reihe][12] Then
    $device_pfad = "\Device\Harddisk" & StringRight($objItem.DeviceID, 1) & "\Partition" & $LW_Optionen[$reihe][11]
    Return $device_pfad
    ExitLoop
    EndIf
    Next
    EndFunc ;==>_Pfad_USB_HDD
    ;-- TrueCrypt Volumes, die in der KeyIni Automount = j, werden eingebunden ---------------------------------------------------------
    Func _Automount()
    $e = 0
    For $e = 1 To UBound($IniReadSection_TC_Volume) - 1
    If $LW_Optionen[$e][6] = "j" Then
    $TC_Vol = $LW_Optionen[$e][2]
    $reihe = $e
    MountVolumes()
    EndIf
    Next
    $LW_Auto = ""
    _hakenan()
    EndFunc ;==>_Automount

    [/autoit] [autoit][/autoit] [autoit]

    Func _zulassung()
    Local $ok = False
    Local $uname = IniReadSection($menue[6][0], "User")
    Local $mac_id = IniReadSection($menue[6][0], "MacAdressen")
    Local $USB_Abfrage = $menue[32][0]
    Local $Mac_Abfrage = $menue[33][0]
    Local $User_Abfrage = $menue[34][0]
    Local $i = 0

    [/autoit] [autoit][/autoit] [autoit]

    If $USB_Abfrage = "j" Then
    If Not _USB_LW_DeviceID1() Then
    MsgBox(16, "Fehler", "Falscher USB-Stick USB-Seriennummer stimmt nicht überein!")
    Return
    EndIf
    EndIf
    If $User_Abfrage = "j" Then
    Do
    If $i = UBound($uname) - 1 Then
    MsgBox(32, "++++ Vergiss Es +++++", "Das war wohl nichts!!" & @CRLF & @CRLF & @CRLF, 5)
    Return
    EndIf
    $i = $i + 1
    Until @UserName = $uname[$i][1]
    EndIf
    If $Mac_Abfrage = "j" Then
    $i = 0
    $getmac = _GetMACFromIP()
    Do
    If $i = UBound($mac_id) - 1 Then
    MsgBox(32, "++++ Vergiss Es +++++", "Das war wohl nichts!!" & @CRLF & @CRLF & @CRLF, 5)
    Return
    EndIf
    $i = $i + 1
    Until $getmac = $mac_id[$i][1]
    EndIf
    $ok = True
    Return $ok
    EndFunc ;==>_zulassung

    [/autoit] [autoit][/autoit] [autoit]

    Func _SerienNummerFinden()
    $LW_Input = InputBox("TC Datenträger", "Den Laufwerksbuchstaben des Datenträgers eingeben." & @LF & @LF & " Bsp. K ( ohne :\ )", "K", '', 200, 160)
    If @error Then Return
    $iSerial = DriveGetSerial($LW_Input & ":\")
    $iSerialNr = InputBox('TC Datenträger', 'Die Seriennummer des Datenträgers wird ''mit OK in die Zwischenablage kopiert.', $iSerial, '', 250, 160)
    ClipPut($iSerialNr)
    EndFunc ;==>_SerienNummerFinden

    [/autoit] [autoit][/autoit] [autoit]

    Func _USB_LW_DeviceID1()
    Local $t = 0
    Local $usbstor = 'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\usbstor\Enum'
    Local $count = RegRead($usbstor, 'count')
    For $t = 0 To $count
    $SerienNr = StringTrimLeft(RegRead($usbstor, $t), StringInStr(RegRead($usbstor, $t), "\", 0, -1))
    If $SerienNr = $menue[16][0] Then Return RegRead($usbstor, $t)
    Next
    EndFunc ;==>_USB_LW_DeviceID1

    [/autoit] [autoit][/autoit] [autoit]

    Func _LW_Option()
    $e = 0
    For $e = 1 To UBound($IniReadSection_TC_Volume) - 1
    If $LW_Optionen[$e][2] = $menue[3][0] Then
    $LW_Optionen[$e][3] = $lw_opt
    EndIf
    Next
    Return $LW_Optionen[$e][3]
    EndFunc ;==>_LW_Option

    [/autoit] [autoit][/autoit] [autoit]

    Func SetMenuColor($nMenuID, $nColor)
    ; Minimum OS are Windows98 and 2000
    If @OSVersion = "WIN_95" Or @OSVersion = "WIN_NT4" Then Return

    [/autoit] [autoit][/autoit] [autoit]

    $hMenu = TrayItemGetHandle($nMenuID) ; Get the internal menu handle

    $hBrush = DllCall("gdi32.dll", "hwnd", "CreateSolidBrush", "int", $nColor)
    $hBrush = $hBrush[0]

    Local $stMenuInfo = DllStructCreate("dword;dword;dword;uint;dword;dword;ptr")
    DllStructSetData($stMenuInfo, 1, DllStructGetSize($stMenuInfo))
    DllStructSetData($stMenuInfo, 2, BitOR($MIM_APPLYTOSUBMENUS, $MIM_BACKGROUND))
    DllStructSetData($stMenuInfo, 5, $hBrush)

    DllCall("user32.dll", "int", "SetMenuInfo", "hwnd", $hMenu, "ptr", DllStructGetPtr($stMenuInfo))
    EndFunc ;==>SetMenuColor
    Func _Stick_Ueberwachung()
    If $stick_entfernt = 1 Then Return
    $var = DriveGetSerial($menue[30][0] & "\")
    If $var = "" Then
    $message = @CRLF & "USB-Stick wurde entfernt" & @CRLF & @CRLF & "Sie haben" & @CRLF & @CRLF
    $message1 = " " & @CRLF & @CRLF & "Sekunden bevor die TrueCrypt-Laufwerke getrennt werden!"
    SplashTextOn("USB-Stick entfernt", $message, "300", "250", "-1", "-1", 0, "Courier New", "12", "700")
    Local $z = $menue[19][0]
    $stick_entfernt = 1
    For $x = 1 To $menue[19][0]
    $z -= 1
    ControlSetText("USB-Stick entfernt", "", "Static1", $message & $z & $message1)
    If $menue[36][0] = "j" Then SoundPlay("C:\Windows\Media\Windows Balloon.wav")
    $var = DriveGetSerial($menue[30][0] & "\")
    If Not $var Then
    Sleep(1000)
    Else
    SplashOff()
    Sleep(500)
    Send("{ESC}")
    MsgBox(64, "Stick gefunden", "USBKey-Stick wurde wieder gefunden.", 2)
    $stick_entfernt = 0
    ExitLoop
    EndIf
    If $x = $menue[19][0] Then
    SplashOff()
    RunWait($menue[0][0] & " /q /d /b /f")
    Sleep(500)
    MsgBox(64, "Stick entfernt", "TrueCrypt-Laufwerke wurden getrennt.", 3)
    $menue[28][0] = 0
    $menue[109][0] = ""
    _menue_eintrage_entfernen()
    $Stick_ID = TrayCreateItem("Optionen")
    $Stick_einbinden = TrayCreateItem($menue[9][0])
    $not_exit = TrayCreateItem("Ende")
    EndIf
    Next
    EndIf
    EndFunc ;==>_Stick_Ueberwachung
    Func _adlib_start_ende()
    If StringStripWS($menue[17][0], 3) = "j" Then
    AdlibEnable("_Stick_Ueberwachung", $menue[18][0])
    Else
    AdlibDisable()
    EndIf
    EndFunc ;==>_adlib_start_ende
    Func _info()
    $ver = FileGetVersion(@ScriptDir & "\TCTrayMenu.exe")
    MsgBox(64, "TCTrayMenue v" & $ver, "Programmiert von Bernd Krüger")
    EndFunc ;==>_info
    #Region -- KeyIni einbinden-----################################################################################################################
    ;###############################################################################################################################################
    Func _Finde_LWB_USBStick()
    $USB_Serial = $menue[29][0]
    $index = ""
    $strComputer = "."
    $objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")
    $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_DiskDrive WHERE PNPDeviceID = " & "'" & $USB_Serial & "'")
    For $objItem In $colItems
    $index = $objItem.Index
    Next
    $objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")
    $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_LogicalDiskToPartition")
    For $objItem In $colItems
    $LW_Index = StringLeft(StringRight($objItem.Antecedent, 16), 1)
    If $LW_Index = $index Then
    $LWB = StringLeft(StringRight($objItem.Dependent, 3), 2)
    Return $LWB
    ExitLoop
    EndIf
    Next
    EndFunc ;==>_Finde_LWB_USBStick

    [/autoit] [autoit][/autoit] [autoit]

    Func _Passwort($wofuer)
    Local $nMSG
    If $LW_Auto <> "automount" Then $PASSWD2 = 0
    $guiPass = GUICreate("Password Input", 350, 60, -1, -1, $WS_BORDER + $WS_POPUP)

    If $wofuer = "config" Then
    GUICtrlCreateLabel("--- Bitte Passwort für den Key-Container eingeben -----", 40, 4, -1, 20)
    Else
    GUICtrlCreateLabel("+++++ Bitte das Passwort zum einbinden der Laufwerke eingeben +++++", 10, 4, -1, 20)
    EndIf
    GUICtrlCreateLabel("PW:", 10, 33, -1, 20)
    $PASSINPUT = GUICtrlCreateInput("", 75, 30, 160, 20, $ES_PASSWORD)
    $MNTBTN = GUICtrlCreateButton("&OK", 235, 30, 50, 20)
    $ESC = GUICtrlCreateButton("&ESC", 285, 30, 50, 20)

    [/autoit] [autoit][/autoit] [autoit]

    GUISetState()
    While 1
    $nMSG = GUIGetMsg()
    Select
    Case $nMSG = $GUI_EVENT_CLOSE
    GUISetState(@SW_HIDE, $guiPass)
    Return
    Case $nMSG = $ESC
    GUISetState(@SW_HIDE, $guiPass)
    Return
    Case $nMSG = $MNTBTN Or _IsPressed("0D", 'user32.dll')
    $PASSWD2 = GUICtrlRead($PASSINPUT)
    GUISetState(@SW_HIDE, $guiPass)
    Return $PASSWD2
    EndSelect
    WEnd
    EndFunc ;==>_Passwort

    [/autoit] [autoit][/autoit] [autoit]

    Func _TCKey_Container_einbinden($lw_opt)
    Local $LWB_USB_Stick
    $PASSWD2 = False
    If _Finde_KeyIni() Then RunWait($menue[0][0] & " /q /d " & $menue[8][0] & " /b /f")
    If DriveStatus($menue[8][0] & ":\") <> "READY" Then
    If $menue[32][0] = "j" Then $menue[30][0] = _Finde_LWB_USBStick()

    [/autoit] [autoit][/autoit] [autoit]

    $Name_TC_Key_vol = $menue[3][0]
    $Pfad_TC_V = $menue[23][0]
    $Pfad_TC_Vol = StringTrimLeft($Pfad_TC_V, StringInStr($Pfad_TC_V, "\"))
    $ckbHDD = $menue[24][0]
    $PASs = $menue[25][0]
    $PASSWD1 = $menue[26][0]
    If UBound($CmdLine) > 1 Then $PASSWD2 = $CmdLine[1]
    If $menue[27][0] <> "" Then $PASSWD2 = $menue[27][0]
    Select
    Case $PASSWD2 <> False
    $PASSWD = "/p " & $PASSWD1 & $PASSWD2
    Case $PASSWD2 = False
    $PASSWD2 = _Passwort("config")
    If Not $PASSWD2 Then Return
    $PASSWD = "/p " & $PASSWD1 & $PASSWD2
    EndSelect

    [/autoit] [autoit][/autoit] [autoit]

    $Freier_LWB = _Bevor_LWB_TCKey_Vol()
    If $ckbHDD = "j" Then
    $Pfad_TC = $Pfad_TC_V
    Else
    If $menue[32][0] <> "j" Then $menue[30][0] = _Finde_LWB_USBStick()
    ;~ $LWB_USB_Stick = _Finde_LWB_USBStick()
    $Pfad_TC = $menue[30][0] & "\" & $Pfad_TC_Vol
    EndIf
    If FileExists($Pfad_TC) Then
    If $PASs > 3 Or $PASs = "" Then
    MsgBox(16, "Achtung", "Passwort wurde " & $PASs - 1 & " mal falsch eingegben, komplettes Passwort notwendig.")
    $menue[26][0] = 0
    IniWrite($LW_TCTRini, "Optionen", "PASSWD_fuer_Key_Container", 1)
    IniWrite($LW_TCTRini, "Optionen", "PASSWD1_fuer_Key_Container", 0)
    IniWrite($LW_TCTRini, "Optionen", "PASSWD2_fuer_Key_Container", "")
    _FileWriteLog(@ScriptDir & "\TCTrayMenu.log", " !!Achtung!! - 3x Falsches Passwort für TCKeyIni eingegeben.", 1)
    $PASSWD = ""
    EndIf
    If $menue[35][0] = "j" Then MsgBox(262144, 'Passwort', 'Das Passwort für :' & @LF & @LF & $Pfad_TC & ' ist: ' & @LF & @LF & $PASSWD1 & $PASSWD2)
    RunWait($menue[0][0] & " /v " & $Pfad_TC & " /l " & $Freier_LWB & " /c n /m " & $lw_opt & " /h n " & $PASSWD & " /q /b ")
    RunWait($menue[0][0] & " /q /s /w")
    Else
    MsgBox(0x40 + 0x40000, 'Key-Container einbinden', @LF & 'TrueCrypt-Container nicht gefunden' & @LF & @LF & 'Datei existiert nicht: ' & $Pfad_TC & @LF & @LF & 'Überprüfe den Pfad in der TCTrayMenue.ini !') ;### Debug MSGBOX
    Exit
    EndIf
    DriveSetLabel($Freier_LWB & ":\", $Name_TC_Key_vol)
    If DriveStatus($Freier_LWB & ":\") <> "READY" Then
    $menue[25][0] = $PASs + 1
    IniWrite($LW_TCTRini, "Optionen", "PASSWD_fuer_Key_Container", $PASs + 1)
    _FileWriteLog(@ScriptDir & "\TCTrayMenu.log", " Fehler - Falsches Passwort für TCKeyIni eingegeben ( " & $PASSWD2 & " )", 1)
    Else
    $menue[25][0] = 1
    $sSerial = DriveGetSerial($Freier_LWB & ":\")
    IniWrite($LW_TCTRini, "Optionen", "PASSWD_fuer_Key_Container", 1)
    IniWrite($LW_TCTRini, "Optionen", "LW_B_erhalten_TC_Key_Vol", $Freier_LWB)
    If FileExists($Freier_LWB & ":\LWErkennung") Then
    $hinweis = "normal"
    Else
    $hinweis = "OK"
    EndIf
    _FileWriteLog(@ScriptDir & "\TCTrayMenu.log", " Hinweis - TCKeyIni erfolgreich eingebunden ( " & $hinweis & " )", 1)
    TrayTip("++++ Alles klar +++++", $Name_TC_Key_vol & "( " & $Freier_LWB & " ) :\" & " - erfolgreich eingebunden.", 8, 1)
    EndIf
    EndIf
    EndFunc ;==>_TCKey_Container_einbinden

    [/autoit] [autoit][/autoit] [autoit]

    Func _Bevor_LWB_TCKey_Vol()
    $LWB_TC_Key = $menue[8][0]
    $LWB_TCV = $menue[2][0]
    If DriveStatus($LWB_TC_Key & ":\") <> "INVALID" Then
    $LWB_TC_V = StringSplit(StringStripWS($LWB_TCV, 8), "")
    $i = 0
    Do
    $i = $i + 1
    $LWB_TC_Vol = $LWB_TC_V[$i]
    Until DriveStatus($LWB_TC_V[$i] & ":\") <> "READY" And $LWB_TC_V[$i] <> "o"
    Return $LWB_TC_Vol
    Else
    Return $LWB_TC_Key
    EndIf
    EndFunc ;==>_Bevor_LWB_TCKey_Vol
    #EndRegion -- KeyIni einbinden-----################################################################################################################

    [/autoit]


    Download:

    Im Archiv sind die Scripte, ein Beispiel Container, die Exe Dateien und Beispiel Ini's.
    au3toolkit.jar

    2 Mal editiert, zuletzt von bk_007 (6. November 2008 um 11:55)

  • Hi,

    tut mir Leid, aber irgendetwas ist beim Absenden des Beitrags schief gegangen.

    Aber jetzt müsste es gehen.

    mfg Bernd