Wert in Textfeld nicht markierbar

  • Hallo,

    ich hab da mal wieder zwei kleine Probs bei meiner automatischen TrueCrypt Volume Einrichtung. Das Script läuft soweit fehlerfrei durch und legt ein mit standardwerten vordefiniertes TrueCrypt volume automatisch an. Nur die Größe des Volumes soll der user über ein inputfield selbst bestimmen können. Das Problem ist das der Wert in dem Inputfield nicht mit der Maus markiert werden kann. Es ist zwar editierbar also der Cursor steht im Textfeld und ich kann was reinschreiben, nur wenn man einmal Tab gedrückt hat, kommt man auch nur wieder mit Tabs in das Textfeld zurück, ich kann also nicht mit der Maus rein klicken und den Wert bearbeiten. Hab es schon mit GuiCtrlSetState(-1, $GUI_ENABLE) probiert, aber das hat nichts geändert.

    Hab einfach mal den ganzen code reingestellt, der relevante Teil kommt erst ab Zeile 99

    Als zweites suche ich eine Funktion ähnlich der BlockInput(), die aber nur Eingaben auf den TrueCrypt Configuration Wizard verbietet und dem user nebenbei das Arbeiten noch ermöglicht. Gibts da was?

    Spoiler anzeigen
    [autoit]


    #include <GuiComboBox.au3>
    #include <WinAPI.au3>
    #include <GUIConstantsEX.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <TabConstants.au3>
    #include <ButtonConstants.au3>
    #include <GuiEdit.au3>
    #RequireAdmin

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

    ;Programm Installation (prüfen ob schon installiert)
    If Not FileExists(@ProgramFilesDir & "\TrueCrypt\TrueCrypt.exe") Then
    installiere()
    EndIf

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

    Func installiere()
    Run ("TrueCrypt Setup 7.0a.exe")
    ControlClick("Datei öffnen - Sicherheitswarnung", "", "Button1")
    WinWait("TrueCrypt Setup 7.0a")
    ControlSend("TrueCrypt Setup 7.0a","","[CLASS:#32770; INSTANCE:1]", "!c")
    ControlSend("TrueCrypt Setup 7.0a", "&Accept","[CLASS:Button; INSTANCE:3]", "!A")
    WinWait("TrueCrypt Setup 7.0a", "&Install")
    ControlSend("TrueCrypt Setup 7.0a", "&Next >", "[CLASS:Button; INSTANCE:3]", "!N")
    WinWait("TrueCrypt Setup 7.0a")
    ControlFocus("TrueCrypt Setup 7.0a","Setup Options", "SysTreeView321")
    send("{TAB 9}"&"{SPACE}"&"{TAB}"&"{SPACE}"&"{TAB 3}"&"{ENTER}")
    WinWait("TrueCrypt Setup", "TrueCrypt has been successfully installed.")
    send("{ENTER}")
    WinWait("TrueCrypt Setup", "If you have never used TrueCrypt before,")
    send("{TAB}"&"{ENTER}")
    send("{ENTER}")
    WinWaitClose("TrueCrypt Setup 7.0a", "TrueCrypt installed")
    EndFunc

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

    ;Prüfen ob genug Plattenplatz vorhanden

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

    Global $freespace=round(DriveSpaceFree("D:\"),1)
    If $freespace < 1032.0 Then
    MsgBox(4096, "TrueCrypt Installation", "Zum Erstellen des TrueCrypt Volumes auf D:\ steht nicht genügend Speicherplatz zur Verfügung! Installation abgebrochen!" &@CRLF & "Es werden mindestens 1032 MB benötigt!")
    Exit
    EndIf

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

    ;Programm Konfiguration (TrueCrypt Volume anlegen)

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

    ShellExecute("TrueCrypt.exe", "", @ProgramFilesDir & "\TrueCrypt", "open")
    winwait("TrueCrypt","&Create Volume",200)
    ControlSend("TrueCrypt","","[CLASS:static; INSTANCE:7]","!C")
    winwait("TrueCrypt Volume Creation Wizard")
    ControlSend("TrueCrypt Volume Creation Wizard", "&Next >", "[CLASS:Button; INSTANCE:3]", "!N")
    winwait("TrueCrypt Volume Creation Wizard")
    ControlSend("TrueCrypt Volume Creation Wizard", "&Next >", "[CLASS:Button; INSTANCE:3]", "!N")
    winwait("TrueCrypt Volume Creation Wizard","Volume Location")
    ControlSend("TrueCrypt Volume Creation Wizard", "&Next >", "[CLASS:#32770; INSTANCE:1]", "!F")
    winwait("Specify Path and File Name")
    $var=DriveGetType("D:\")

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

    ;Prüfen ob lokale D:\ Partition vorhanden

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

    if $var <> "Fixed" Then
    MsgBox(4096, "TrueCrypt Installation", "Die Volume Erstellung kann nicht fortgesetzt werden da keine lokale D:\ Partition vorhanden ist." &@CR & "Bitte melden Sie sich beim IT Helpdesk!")
    WinWaitClose("TrueCrypt Installation")
    EndIf

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

    ;Prüfen ob bereits TrueCrypt Volumes mit dem Name My Volume vorhanden sind

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

    dim $VolumeName = ""
    If FileExists("D:\My Volume") Then
    For $x = 2 To 40 Step 1
    while Not FileExists("D:\My Volume"&$x) And $VolumeName=""
    $VolumeName="D:\My Volume"&$x
    WEnd
    Next
    ElseIf FileExists("D:\My Volume40") Then
    MsgBox(4096, "TrueCrypt Volume Fehler", "Es sind bereits über 40 TrueCrypt Volumes vorhanden! Abgebrochen!")
    Exit
    Else
    $VolumeName = "D:\My Volume"
    EndIf

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

    ;Name für TrueCrypt Volume eingeben

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

    ControlSetText("Specify Path and File Name", "", "[CLASS:Edit; INSTANCE:1]", $VolumeName)
    Sleep(350)
    send("{TAB}")
    sleep(400)
    send("{ENTER}")
    WinWait("TrueCrypt Volume Creation Wizard","Volume Location",100)
    ControlClick("TrueCrypt Volume Creation Wizard", "&Next >","Button3")
    WinWait("TrueCrypt Volume Creation Wizard","Encryption Options",300)
    ControlClick("TrueCrypt Volume Creation Wizard", "&Next >","Button3")
    WinWait("TrueCrypt Volume Creation Wizard","Volume Size",300)
    Controlsend("TrueCrypt Volume Creation Wizard", "&GB","[CLASS:#32770; INSTANCE:1]", "!G")
    sleep(250)

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

    ;GUI erstellen für Benutzereingabe der TrueCrypt Volume Größe

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

    $sizeGui=guicreate("Size", 260, 150)
    GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSEClicked")
    GUICtrlCreateLabel("Geben Sie ein Größe für das TrueCrypt Volume ein. Es sind Größen zwischen 1 und 4 GB möglich",10,10,250,100)
    $vsize=GUICtrlCreateInput("1", 115,60,50,20,$ES_NUMBER)
    GUICtrlSetState(-1,$GUI_ENABLE)
    $OK=GUICtrlCreateButton("&OK", 35,110,80,20)
    $Cancel=GUICtrlCreateButton("&Cancel", 145,110,80,20)
    GUISetState(@SW_SHOW)

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

    ;abfragen welche Volumegröße eingegeben wird und diese mit Rücksicht auf verfügbaren Plattenplatz übernehmen

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    CLOSEClicked()
    Case $OK
    Local $eingabe = GUICtrlRead($vsize)
    If $freespace < 2060.0 And $eingabe <> 1 Then
    MsgBox(4096, "Fehler", "Auf D:\ stehen weniger als 2 GB Speicherplatz zur Verfügung. Maximale TrueCrypt Volume Größe beträgt 1 GB")
    ElseIf $freespace < 3083.0 And $freespace >= 2060.0 And $eingabe > 2 Then
    MsgBox(4096, "Fehler", "Auf D:\ stehen weniger als 3 GB Speicherplatz zur Verfügung. Maximale TrueCrypt Volume Größe beträgt 2 GB wählen Sie einen Wert zwischen 1 und 2!")
    ElseIf $freespace < 5007.0 And $freespace >= 3083.0 And $eingabe > 3 Then
    MsgBox(4096, "Fehler", "Auf D:\ stehen weniger als 4 GB Speicherplatz zur Verfügung. Maximale TrueCrypt Volume Größe beträgt 3 GB wählen Sie einen Wert zwischen 1 und 3!")
    ElseIf $freespace >= 5007.0 AND $eingabe > 4 Or $eingabe = 0 Then
    MsgBox(48,"Fehler","Bitte geben Sie einen Wert zwischen 1 und 4 ein")
    Else
    _senden($eingabe)
    ExitLoop
    EndIf
    Case $Cancel
    winclose("TrueCrypt Volume Creation Wizard","Volume Size")
    Exit
    EndSwitch
    Sleep(10)
    WEnd

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

    Func CLOSEClicked()
    winclose("TrueCrypt Volume Creation Wizard","Volume Size")
    Exit
    EndFunc

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

    Func _senden($eingabe)
    GUIDelete($sizeGui)
    sleep(300)
    Send("{TAB 4}")
    winwait("TrueCrypt Volume Creation Wizard","Volume Size")
    Send($eingabe)
    EndFunc

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

    Controlsend("TrueCrypt Volume Creation Wizard", "&Next >", "[CLASS:Button; INSTANCE:3]","!N")
    send("*******")
    sleep(400)
    send("{TAB}")
    send("*******")
    sleep(300)
    ControlClick("TrueCrypt Volume Creation Wizard", "&Next >","Button3")
    winwait("TrueCrypt Volume Creation Wizard", "WARNING")
    send("{TAB}")
    sleep(350)
    send("{ENTER}")
    sleep(10000)
    ControlClick("TrueCrypt Volume Creation Wizard", "&Format","Button3")
    winwait("TrueCrypt Volume Creation Wizard", "The TrueCrypt volume has been successfully created.")
    ControlClick("TrueCrypt Volume Creation Wizard", "OK","Button1")
    winwaitclose("TrueCrypt Volume Creation Wizard","The TrueCrypt volume has been successfully created.")
    ControlClick("TrueCrypt Volume Creation Wizard", "Exit","Button4")
    MsgBox(4096,"TrueCrypt Installation", "Die Installation von TrueCrypt ist erfolgreich abgeschlossen")

    [/autoit]

    Gruß
    watcha

  • Mit deinem input ist alles in ordnung, allerdings ist dein Label darüber so groß, dass es über das Inputfeld reicht und dadurch klickt man immer aufs label.

    Mach mal

    [autoit]

    GUICtrlCreateLabel("Geben Sie ein Größe für das TrueCrypt Volume ein. Es sind Größen zwischen 1 und 4 GB möglich",10,10,250,25)

    [/autoit]

    und es klappt

  • hey Milla,

    super das wars. Danke dir :D

    wenn jetzt noch jemand ne Idee für mein zweites Anliegen hat bin ich glücklich

  • Zitat

    Ja genau sowas suche ich, nur wird dann auf einmal der send() und controlsend() Befehl in einem falschen Fenster ausgeführt. D.h. nach der Benutzereingabe wird der Wert nicht in das Textfeld des TrueCrypt Configuration Wizards eingetragen, sondern einfach in ein anderes geöffnetes Windowsfenster geschrieben. Das Fenster vom TrueCrypt Wizard verliert also seinen Fokus und stattdessen liegt der Fokus auf einmal auf dem Windows explorer. Kann denn der Wert überhaupt ins Textfeld des TrueCrypt Wizards übergeben werden, wenn es auf @SW_DISABLE gestellt wurde? Also ich hab es jetzt in Zeile 45 und 48 eingefügt:

    Spoiler anzeigen
    [autoit]


    #include <GuiComboBox.au3>
    #include <WinAPI.au3>
    #include <GUIConstantsEX.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <TabConstants.au3>
    #include <ButtonConstants.au3>
    #include <GuiEdit.au3>
    #RequireAdmin

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

    If Not FileExists(@ProgramFilesDir & "\TrueCrypt\TrueCrypt.exe") Then
    installiere()
    EndIf

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

    Func installiere()
    Run ("TrueCrypt Setup 7.0a.exe")
    ControlClick("Datei öffnen - Sicherheitswarnung", "", "Button1")
    WinWait("TrueCrypt Setup 7.0a")
    ControlSend("TrueCrypt Setup 7.0a","","[CLASS:#32770; INSTANCE:1]", "!c")
    ControlSend("TrueCrypt Setup 7.0a", "&Accept","[CLASS:Button; INSTANCE:3]", "!A")
    WinWait("TrueCrypt Setup 7.0a", "&Install")
    ControlSend("TrueCrypt Setup 7.0a", "&Next >", "[CLASS:Button; INSTANCE:3]", "!N")
    WinWait("TrueCrypt Setup 7.0a")
    ControlFocus("TrueCrypt Setup 7.0a","Setup Options", "SysTreeView321")
    send("{TAB 9}"&"{SPACE}"&"{TAB}"&"{SPACE}"&"{TAB 3}"&"{ENTER}")
    WinWait("TrueCrypt Setup", "TrueCrypt has been successfully installed.")
    send("{ENTER}")
    WinWait("TrueCrypt Setup", "If you have never used TrueCrypt before,")
    send("{TAB}"&"{ENTER}")
    send("{ENTER}")
    WinWaitClose("TrueCrypt Setup 7.0a", "TrueCrypt installed")
    EndFunc

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

    Global $freespace=round(DriveSpaceFree("D:\"),1)
    If $freespace < 1032.0 Then
    MsgBox(4096, "TrueCrypt Installation", "Zum Erstellen des TrueCrypt Volumes auf D:\ steht nicht genügend Speicherplatz zur Verfügung! Installation abgebrochen!" &@CRLF & "Es werden mindestens 1032 MB benötigt!")
    Exit
    EndIf

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

    ShellExecute("TrueCrypt.exe", "", @ProgramFilesDir & "\TrueCrypt", "open")
    winwait("TrueCrypt","&Create Volume",200)
    WinSetState("TrueCrypt","&Create Volume",@SW_DISABLE)
    ControlSend("TrueCrypt","","[CLASS:Static; INSTANCE:7]","!C")
    winwait("TrueCrypt Volume Creation Wizard")
    WinSetState("TrueCrypt Volume Creation Wizard","",@SW_DISABLE)
    ControlSend("TrueCrypt Volume Creation Wizard", "&Next >", "[CLASS:Button; INSTANCE:3]", "!N")
    winwait("TrueCrypt Volume Creation Wizard")
    ControlSend("TrueCrypt Volume Creation Wizard", "&Next >", "[CLASS:Button; INSTANCE:3]", "!N")
    winwait("TrueCrypt Volume Creation Wizard","Volume Location")
    ControlSend("TrueCrypt Volume Creation Wizard", "&Next >", "[CLASS:#32770; INSTANCE:1]", "!F")
    winwait("Specify Path and File Name")
    $var=DriveGetType("D:\")

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

    if $var <> "Fixed" Then
    MsgBox(4096, "TrueCrypt Installation", "Die Volume Erstellung kann nicht fortgesetzt werden da keine lokale D:\ Partition vorhanden ist." &@CR & "Bitte melden Sie sich beim IT Helpdesk!")
    WinWaitClose("TrueCrypt Installation")
    Exit
    EndIf

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

    dim $VolumeName = ""
    If FileExists("D:\My Volume") Then
    For $x = 2 To 40 Step 1
    while Not FileExists("D:\My Volume"&$x) And $VolumeName=""
    $VolumeName="D:\My Volume"&$x
    WEnd
    Next
    ElseIf FileExists("D:\My Volume40") Then
    MsgBox(4096, "TrueCrypt Volume Fehler", "Es sind bereits über 40 TrueCrypt Volumes vorhanden! Abgebrochen!")
    Exit
    Else
    $VolumeName = "D:\My Volume"
    EndIf

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

    ControlSetText("Specify Path and File Name", "", "[CLASS:Edit; INSTANCE:1]", $VolumeName)
    Sleep(350)
    send("{TAB}")
    sleep(400)
    send("{ENTER}")
    WinWait("TrueCrypt Volume Creation Wizard","Volume Location",100)
    ControlClick("TrueCrypt Volume Creation Wizard", "&Next >","Button3")
    WinWait("TrueCrypt Volume Creation Wizard","Encryption Options",300)
    ControlClick("TrueCrypt Volume Creation Wizard", "&Next >","Button3")
    WinWait("TrueCrypt Volume Creation Wizard","Volume Size",300)
    Controlsend("TrueCrypt Volume Creation Wizard", "&GB","[CLASS:#32770; INSTANCE:1]", "!G")
    sleep(250)

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

    $sizeGui=guicreate("Size", 260, 150)
    GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSEClicked")
    GUICtrlCreateLabel("Geben Sie ein Größe für das TrueCrypt Volume ein. Es sind Größen zwischen 1 und 4 GB möglich",10,10,250,30)
    $vsize=GUICtrlCreateInput("1", 115,60,50,20,$ES_NUMBER)
    GUICtrlSetState(-1,$GUI_ENABLE)
    $OK=GUICtrlCreateButton("&OK", 35,110,80,20)
    $Cancel=GUICtrlCreateButton("&Cancel", 145,110,80,20)
    GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    CLOSEClicked()
    Case $OK
    Local $eingabe = GUICtrlRead($vsize)
    If $freespace < 2060.0 And $eingabe <> 1 Then
    MsgBox(4096, "Fehler", "Auf D:\ stehen weniger als 2 GB Speicherplatz zur Verfügung. Maximale TrueCrypt Volume Größe beträgt 1 GB")
    ElseIf $freespace < 3083.0 And $freespace >= 2060.0 And $eingabe > 2 Then
    MsgBox(4096, "Fehler", "Auf D:\ stehen weniger als 3 GB Speicherplatz zur Verfügung. Maximale TrueCrypt Volume Größe beträgt 2 GB wählen Sie einen Wert zwischen 1 und 2!")
    ElseIf $freespace < 5007.0 And $freespace >= 3083.0 And $eingabe > 3 Then
    MsgBox(4096, "Fehler", "Auf D:\ stehen weniger als 4 GB Speicherplatz zur Verfügung. Maximale TrueCrypt Volume Größe beträgt 3 GB wählen Sie einen Wert zwischen 1 und 3!")
    ElseIf $freespace >= 5007.0 AND $eingabe > 4 Or $eingabe = 0 Then
    MsgBox(48,"Fehler","Bitte geben Sie einen Wert zwischen 1 und 4 ein")
    Else
    _senden($eingabe)
    ExitLoop
    EndIf
    Case $Cancel
    winclose("TrueCrypt Volume Creation Wizard","Volume Size")
    Exit
    EndSwitch
    Sleep(10)
    WEnd

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

    Func CLOSEClicked()
    winclose("TrueCrypt Volume Creation Wizard","Volume Size")
    Exit
    EndFunc

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

    Func _senden($eingabe)
    GUIDelete($sizeGui)
    sleep(300)
    Send("{TAB 4}")
    winwait("TrueCrypt Volume Creation Wizard","Volume Size")
    Send($eingabe)
    EndFunc

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

    Controlsend("TrueCrypt Volume Creation Wizard", "&Next >", "[CLASS:Button; INSTANCE:3]","!N")
    send("7(C3|\|+R0u$3rkEj")
    sleep(400)
    send("{TAB}")
    send("7(C3|\|+R0u$3rkEj")
    sleep(300)
    ControlClick("TrueCrypt Volume Creation Wizard", "&Next >","Button3")
    winwait("TrueCrypt Volume Creation Wizard", "WARNING")
    send("{TAB}")
    sleep(350)
    send("{ENTER}")
    sleep(10000)
    ControlClick("TrueCrypt Volume Creation Wizard", "&Format","Button3")
    winwait("TrueCrypt Volume Creation Wizard", "The TrueCrypt volume has been successfully created.")
    ControlClick("TrueCrypt Volume Creation Wizard", "OK","Button1")
    winwaitclose("TrueCrypt Volume Creation Wizard","The TrueCrypt volume has been successfully created.")
    ControlClick("TrueCrypt Volume Creation Wizard", "Exit","Button4")
    MsgBox(4096,"TrueCrypt Installation", "Die Installation von TrueCrypt ist erfolgreich abgeschlossen")

    [/autoit]

    GuiSetState() wird da denk ich nicht gehen, weil ich ja die Eingabe für ein Autoit fremdes Fenster deaktivieren will.