1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. misterspeed

Beiträge von misterspeed

  • Prozess vor dem Beenden schützen.

    • misterspeed
    • 16. Juli 2013 um 14:38

    Hier werden 10 unterschiedliche Ansätze beschrieben um solch einen Selbstschutz zu realisieren, teilweise reden wir hier aber von Techniken die eher von Schadsoftware verwendet werden und weit mehr als nur Autoit Kenntnisse erfordern:

    http://security.stackexchange.com/questions/3098…cess-in-windows

    Die simpleren Lösungsansätze wie z.B. über einen zweiten Überwachungsprozess sind im Gegenzug relativ leicht zu umgehen.

  • Zugriffe auf Datei loggen und/oder blocken?

    • misterspeed
    • 14. Juli 2013 um 11:31

    Ich sehe aber immernoch nicht inwiefern Verschlüsselung vor der Formatierung des Sticks schützen sollte. Eine Verschlüsselung schützt außerdem nur solange vor Zugriffen bis das PW zur Entschlüsselung eingegeben wurde, danach kann weiterhin jede Software auf dem System die Daten lesen und ggf. auch verändern oder löschen. Verschlüsselung nützt also bestenfalls etwas beim Verlust des Sticks.

  • Zugriffe auf Datei loggen und/oder blocken?

    • misterspeed
    • 12. Juli 2013 um 00:47

    Kannste wohl verwerfen, denn wenn ein Schadprogramm in der Lage sein sollte deinen Virenscanner zu manipulieren hast du entweder ein ziemlich mieses Antivirenprogramm, oder aber das Schadprogramm hat bereits Systemprivilegien die ihm automatisch auch sehr viel weitreichendere Möglichkeiten bieten als dein Script jemals haben wird. Der User "System" kann von dir jedenfalls nicht daran gehindert werden einen Datenträger zu formatieren, das ginge vermutlich höchstens auf Treiberebene. Gerätetreiber kannst du aber nicht in Autoit programmieren.

    Ich sehe also letzlich keinen weg das durch "niedere" SW zu unterbinden. Ich bezweifle auch, dass du die Herkunft eines Schreib oder Lesebefehls ermitteln kannst, was dir letzlich aber ohnehin nichts nutzen würde, da es längst zu spät ist wenn dir das Betriebssystem Informationen darüber liefert wer gerade was getan hat.

    Allgemein kannst du aber aus Sicherheitsgründen mit eingeschränkten Benutzerrechten (UAC aktivieren, User / Gast Account ...) arbeiten und dadurch das Formatieren eines Datenträgers verhindern, allerdings eben auch nur solange bis es der Schadsoftware gelingt höhere Berechtigung als du selbst hast zu erlangen (z.B. durch einen Windows Exploit).

    Die sicherste Variante ist wohl ein USB Stick mit physikalischem Schreibschutz, alles andere dürfte nicht zielführend sein. Sowas gibts z.B. hier: http://kanguru.com/storage-accessories/kanguru-ss3.shtml
    Ist aber natürlich dann auch für berechtigte Anwendungen schreibgeschützt und sobald du diesen deaktivierst haben wieder alle Anwendungen Schreibberechtigungen.

  • Wie WildCards in AutoIt?

    • misterspeed
    • 9. Juli 2013 um 23:12

    Hier eine Variante die die andere Richtung nutzt, also unerwünschtes herausfiltert:

    [autoit]


    #include <array.au3>
    #include <file.au3>

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

    $path = "C:\Users\????????????\Pictures"

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

    $aFileList = _FileListToFilteredArray($path, "gif,ico,jpg,jpeg", ",", 1) ;==> Beispiel für verschiedene Bildtypen

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

    Func _FileListToFilteredArray($dir, $searchlist, $Separator, $iFlag = 0)
    Local $aRaw = _FileListToArray($dir, "*", $iFlag)
    Local $aReturn[UBound($aRaw)]
    Local $aFilter = StringSplit($searchlist, $Separator)
    Local $ignore, $k

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

    $k = 1
    For $i = 1 To UBound($aRaw)-1
    $ignore = False
    For $j = 1 To UBound($aFilter)-1
    If StringRight($aRaw[$i],StringLen($aFilter[$j])) = $aFilter[$j] Then
    $ignore = True
    ExitLoop
    EndIf
    Next
    If $ignore = False Then
    $aReturn[$k]=$aRaw[$i]
    $k+=1
    EndIf
    Next

    $aReturn[0]=$k-1
    ReDim $aReturn[$k]

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

    Return $aReturn
    EndFunc

    [/autoit]
  • Wie WildCards in AutoIt?

    • misterspeed
    • 9. Juli 2013 um 22:35

    Erzähl nix, auf deinem Screenshot sieht man sogar 3 Ergebnisse, wenn du nach "WildCards" suchst sind es sogar 7. Wie dem auch sei relevant für deine Frage ist lediglich der Treffer zu

    [autoit]

    FileFindFirstFile

    [/autoit]

    auf welchen auch fast alle anderen verweisen.

    EDIT:
    Aber mit den sehr beschränkten wildcard Möglichkeiten die dir Autoit hier bietet ist dein Vorhaben ohnehin nicht realisierbar. Du müsstest das Array anschließend mit Hilfe der Stringfunktionen in einer Schleife selbst filtern.

  • Mit AUtoIt automatischen TrueCryptContainer erstellen

    • misterspeed
    • 6. Juli 2013 um 15:00

    Da ich mal vermute, dass du diese Funktion aus dem englischen Forum verwendest (poste das nächstemal bitte den kompletten code und einen Link zu deiner Quelle) habe ich mir das mal angeschaut und die Funktion ein wenig verändert. Es gibt nun zwei neue Parameter, einmal um die dynamische Größe zu aktivieren und einmal um die Sichtbarkeit des Fensters zu aktivieren. Außerdem wurde das Zeitlimit nach Fertigstellung von 15 auf 60 Sekunden angehoben, da es bei meinem 1GB Container grundsätzlich länger gedauert hatte bis das betreffende Fenster erschien. Das Problem tritt aber ohnehin nur bei einem "nicht dynamischen" container auf. Allerdings kam es bei meinen Tests gelegentlich vor, dass der frisch erstellte container nicht dismounted werden konnte, weil er angeblich noch vom System verwendet wurde. Hier sollte man ggf. noch eine zusätzliche Abfrage in die Funktion einbauen um in solch einem Fall die Meldung mit "Force dismount" zu bestätigen. Das ist hier aber sehr selten vorgekommen und ich konnte die Meldung daher nicht analysieren und entsprechend in die Funktion einbauen.

    Das ganze wurde mit einer portable Intallation von TC 7.1a getestet. Da sich jederzeit etwas an den Dialogen ändern könnte ist nicht gewährleistet, dass es auch mit zukünftigen Versionen reibungslos funktioniert. Schöner wäre es wenn die Entwickler einen cmdline Modus für die Container Erstellung einbauen würden, wie es in der Linux und Mac Version der Fall ist.

    Spoiler anzeigen
    [autoit]


    #include <winapi.au3>
    #include <Constants.au3>

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

    AutoItSetOption("WinDetectHiddenText", 1)
    Opt("WinTitleMatchMode", 3)

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

    Global $PID_TC_Format = 0

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

    OnAutoItExitRegister("OnAutoItExit")

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

    ConsoleWrite("_TC_Container_Create("") returned " & _TC_Container_Create(@ScriptDir & "\testcontainer.tc","AES","RIPEMD-160",1024000,"1234","NTFS",True,True) & @TAB & @error & @crlf)

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

    Func _TC_Container_Create($TC_Container_Location, $TC_Container_Encryption = "AES", $TC_Container_Hash = "RIPEMD-160", $TC_Container_Size_KB = 10000, $TC_Container_Password = "test", $TC_Container_Filesystem = "NTFS",$TC_Container_Dynamic=False,$showIt=False)

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

    Local $b_TC_Volume_Creation_Wizard_failed = False, $hWnd_TC_Volume_Creation_Wizard = 0, $TC_Volume_Creation_Wizard_Error_Code = 0

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

    ; NTFS min Size = 2829 KB
    ; FAT min Size = 275 KB
    ; ControlSetText() if it's just text you're sending. It's much faster.

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

    If Not $TC_Container_Location Then $TC_Container_Location = @ScriptDir & "\Test.tc"
    If $TC_Container_Size_KB < 275 Then $TC_Container_Size_KB = 275
    If $TC_Container_Size_KB < 2829 Then $TC_Container_Filesystem = "FAT"

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

    If FileExists($TC_Container_Location) Then
    If MsgBox(262420, "TCMyFiles", "The Target File" & @CRLF & @CRLF & $TC_Container_Location & @CRLF & @CRLF & "already exists. Do you want to overwrite the file?") <> 6 Then
    SetError(99)
    Return 0
    EndIf
    FileDelete($TC_Container_Location)
    Else
    $TC_Check_Location = FileOpen($TC_Container_Location,10)
    if $TC_Check_Location <> -1 then
    FileClose($TC_Check_Location)
    FileDelete($TC_Container_Location)
    Else
    SetError(96)
    Return 0
    endif
    EndIf

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

    If $showIt = True Then
    $PID_TC_Format = Run('"' & @ScriptDir & '\TrueCrypt\TrueCrypt Format.exe"', @ScriptDir, @SW_SHOW)
    Else
    $PID_TC_Format = Run('"' & @ScriptDir & '\TrueCrypt\TrueCrypt Format.exe"', @ScriptDir, @SW_HIDE)
    EndIf

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

    ProcessWait($PID_TC_Format, 5)

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

    If $PID_TC_Format = 0 Then
    MsgBox(0, 'Error', '"TrueCrypt Format.exe" new PID could not be detected.')
    SetError(98)
    Return 0
    Else
    If WinWait("[TITLE:TrueCrypt Volume Creation Wizard; CLASS:CustomDlg]", "", 10) = 0 Then
    MsgBox(0, 'Error', '"TrueCrypt Volume Creation Wizard" window not found...')
    SetError(97)
    Return 0
    Else

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

    $hWnds = WinList("[TITLE:TrueCrypt Volume Creation Wizard; CLASS:CustomDlg]", "")

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

    For $i = 0 To UBound($hWnds) - 1
    If WinGetProcess($hWnds[$i][1]) = $PID_TC_Format Then $hWnd_TC_Volume_Creation_Wizard = $hWnds[$i][1]
    Next

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

    If $hWnd_TC_Volume_Creation_Wizard <> 0 Then
    ConsoleWrite('Step 01: Found TrueCrypt Volume Creation Wizard hWnd: ' & $hWnd_TC_Volume_Creation_Wizard & @CRLF)
    $TC_Volume_Creation_Wizard_Error_Code = 1
    Else
    $b_TC_Volume_Creation_Wizard_failed = True
    EndIf

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

    If $b_TC_Volume_Creation_Wizard_failed = False Then
    $TC_Timer = TimerInit()
    While TimerDiff($TC_Timer) < 5000
    If StringInStr(WinGetText($hWnd_TC_Volume_Creation_Wizard), "Encrypt the system partition or entire system drive") Then
    ControlClick($hWnd_TC_Volume_Creation_Wizard, '', '[CLASS:Button; INSTANCE:3]')
    ConsoleWrite('Step 02: Create File Container' & @CRLF)
    $TC_Volume_Creation_Wizard_Error_Code = 2
    ExitLoop
    Else
    $b_TC_Volume_Creation_Wizard_failed = True
    EndIf
    WEnd
    EndIf

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

    If $b_TC_Volume_Creation_Wizard_failed = False Then
    $TC_Timer = TimerInit()
    While TimerDiff($TC_Timer) < 5000
    If StringInStr(WinGetText($hWnd_TC_Volume_Creation_Wizard), "Volume Type") Then
    ControlClick($hWnd_TC_Volume_Creation_Wizard, '', '[CLASS:Button; INSTANCE:3]')
    ConsoleWrite('Step 03: Select Standard Type' & @CRLF)
    $TC_Volume_Creation_Wizard_Error_Code = 3
    ExitLoop
    Else
    $b_TC_Volume_Creation_Wizard_failed = True
    EndIf
    WEnd
    EndIf

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

    If $b_TC_Volume_Creation_Wizard_failed = False Then
    $TC_Timer = TimerInit()
    While TimerDiff($TC_Timer) < 5000
    If StringInStr(WinGetText($hWnd_TC_Volume_Creation_Wizard), "Volume Location") Then
    ControlSetText($hWnd_TC_Volume_Creation_Wizard, '', '[CLASS:Edit; INSTANCE:1]', $TC_Container_Location, 1)
    If ControlGetText($hWnd_TC_Volume_Creation_Wizard, '', '[CLASS:Edit; INSTANCE:1]') = $TC_Container_Location Then
    ControlClick($hWnd_TC_Volume_Creation_Wizard, '', '[CLASS:Button; INSTANCE:3]')
    ConsoleWrite('Step 04: Set Container location to ' & $TC_Container_Location & @CRLF)
    $TC_Volume_Creation_Wizard_Error_Code = 4
    ExitLoop
    EndIf
    Else
    $b_TC_Volume_Creation_Wizard_failed = True
    EndIf
    WEnd
    EndIf

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

    If $b_TC_Volume_Creation_Wizard_failed = False Then
    $TC_Timer = TimerInit()
    While TimerDiff($TC_Timer) < 5000
    If StringInStr(WinGetText($hWnd_TC_Volume_Creation_Wizard), "Encryption Options") Then
    ControlCommand($hWnd_TC_Volume_Creation_Wizard, "", "[CLASS:ComboBox; INSTANCE:1]", "SelectString", $TC_Container_Encryption)
    If ControlCommand($hWnd_TC_Volume_Creation_Wizard, "", "[CLASS:ComboBox; INSTANCE:1]", "GetCurrentSelection", "") = $TC_Container_Encryption Then
    ControlClick($hWnd_TC_Volume_Creation_Wizard, '', '[CLASS:Button; INSTANCE:3]')
    ConsoleWrite('Step 05: Set Encryption Algorithm to ' & $TC_Container_Encryption & @CRLF)
    $TC_Volume_Creation_Wizard_Error_Code = 5
    ExitLoop
    EndIf
    Else
    $b_TC_Volume_Creation_Wizard_failed = True
    EndIf
    WEnd
    EndIf

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

    If $b_TC_Volume_Creation_Wizard_failed = False Then
    $TC_Timer = TimerInit()
    While TimerDiff($TC_Timer) < 5000
    If StringInStr(WinGetText($hWnd_TC_Volume_Creation_Wizard), "Volume Size") Then
    If _WinAPI_GetWindowLong(ControlGetHandle($hWnd_TC_Volume_Creation_Wizard, '', '[CLASS:Button; INSTANCE:6]'), $GWL_STYLE) <> 1342373897 Then
    ControlClick($hWnd_TC_Volume_Creation_Wizard, "", ControlGetHandle($hWnd_TC_Volume_Creation_Wizard, '', '[CLASS:Button; INSTANCE:6]'))
    ElseIf _WinAPI_GetWindowLong(ControlGetHandle($hWnd_TC_Volume_Creation_Wizard, '', '[CLASS:Button; INSTANCE:6]'), $GWL_STYLE) = 1342373897 Then
    ConsoleWrite('Step 06: Select KB as Container Size' & @CRLF)
    $TC_Volume_Creation_Wizard_Error_Code = 6
    ExitLoop
    EndIf
    Else
    $b_TC_Volume_Creation_Wizard_failed = True
    EndIf
    WEnd
    EndIf

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

    If $b_TC_Volume_Creation_Wizard_failed = False Then
    $TC_Timer = TimerInit()
    While TimerDiff($TC_Timer) < 5000
    If StringInStr(WinGetText($hWnd_TC_Volume_Creation_Wizard), "Volume Size") Then
    ControlSetText($hWnd_TC_Volume_Creation_Wizard, '', '[CLASS:Edit; INSTANCE:1]', $TC_Container_Size_KB, 1)
    If ControlGetText($hWnd_TC_Volume_Creation_Wizard, '', '[CLASS:Edit; INSTANCE:1]') = $TC_Container_Size_KB Then
    ControlClick($hWnd_TC_Volume_Creation_Wizard, '', '[CLASS:Button; INSTANCE:3]')
    ConsoleWrite('Step 07: Set Container Size to ' & $TC_Container_Size_KB & ' KB' & @CRLF)
    $TC_Volume_Creation_Wizard_Error_Code = 7
    ExitLoop
    EndIf
    Else
    $b_TC_Volume_Creation_Wizard_failed = True
    EndIf
    WEnd
    EndIf

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

    If $b_TC_Volume_Creation_Wizard_failed = False Then
    $TC_Timer = TimerInit()
    While TimerDiff($TC_Timer) < 5000
    If StringInStr(WinGetText($hWnd_TC_Volume_Creation_Wizard), "Volume Password") Then
    ControlClick($hWnd_TC_Volume_Creation_Wizard, '', '[CLASS:Button; INSTANCE:6]')
    ControlSetText($hWnd_TC_Volume_Creation_Wizard, '', '[CLASS:Edit; INSTANCE:1]', $TC_Container_Password, 1)
    If ControlGetText($hWnd_TC_Volume_Creation_Wizard, '', '[CLASS:Edit; INSTANCE:1]') = $TC_Container_Password Then
    ControlSetText($hWnd_TC_Volume_Creation_Wizard, '', '[CLASS:Edit; INSTANCE:2]', $TC_Container_Password, 1)
    If ControlGetText($hWnd_TC_Volume_Creation_Wizard, '', '[CLASS:Edit; INSTANCE:2]') = $TC_Container_Password Then
    ControlClick($hWnd_TC_Volume_Creation_Wizard, '', '[CLASS:Button; INSTANCE:3]')
    ConsoleWrite('Step 08: Set Container Password to "' & $TC_Container_Password & '"' & @CRLF)
    $TC_Volume_Creation_Wizard_Error_Code = 8
    ExitLoop
    EndIf
    EndIf
    Else
    $b_TC_Volume_Creation_Wizard_failed = True
    EndIf
    WEnd
    ControlClick("[TITLE:TrueCrypt Volume Creation Wizard; CLASS:#32770]", '', '[CLASS:Button; INSTANCE:1]')
    EndIf

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

    If $b_TC_Volume_Creation_Wizard_failed = False Then
    $TC_Timer = TimerInit()
    While TimerDiff($TC_Timer) < 5000
    If WinExists("[TITLE:TrueCrypt Volume Creation Wizard; CLASS:#32770]", "") = 1 Then ControlClick("[TITLE:TrueCrypt Volume Creation Wizard; CLASS:#32770]", '', '[CLASS:Button; INSTANCE:1]')
    If StringInStr(WinGetText($hWnd_TC_Volume_Creation_Wizard), "Volume Format") Then
    ControlCommand($hWnd_TC_Volume_Creation_Wizard, "", "[CLASS:ComboBox; INSTANCE:1]", "SelectString", $TC_Container_Filesystem)
    If ControlCommand($hWnd_TC_Volume_Creation_Wizard, "", "[CLASS:ComboBox; INSTANCE:1]", "GetCurrentSelection", "") = $TC_Container_Filesystem Then
    ConsoleWrite('Step 09: Set Container File Format to ' & $TC_Container_Filesystem & @CRLF)
    $TC_Volume_Creation_Wizard_Error_Code = 9
    If $TC_Container_Dynamic = True Then
    ConsoleWrite('Step 09a: Set Container File Format to Dynamic ' & $TC_Container_Dynamic & @CRLF)
    If ControlCommand($hWnd_TC_Volume_Creation_Wizard,"","[CLASS:Button; TEXT:Dynamic]","IsChecked","") = 0 Then
    ControlCommand($hWnd_TC_Volume_Creation_Wizard,"","[CLASS:Button; TEXT:Dynamic]","Check","")
    WinWait("TrueCrypt Volume Creation Wizard","Dynamic container is a pre-allocated NTFS sparse file",5)
    ControlClick("TrueCrypt Volume Creation Wizard","Dynamic container is a pre-allocated NTFS sparse file",'[CLASS:Button; INSTANCE:1]')
    EndIf
    EndIf
    ControlClick($hWnd_TC_Volume_Creation_Wizard, '', '[CLASS:Button; INSTANCE:3]')
    ExitLoop
    EndIf
    Else
    $b_TC_Volume_Creation_Wizard_failed = True
    EndIf
    WEnd
    EndIf

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

    If $b_TC_Volume_Creation_Wizard_failed = False Then
    $TC_Container_Creation_Progress = ""
    $TC_Container_Creation_Progress_Save = ""
    $TC_Timer = TimerInit()
    While 1
    $TC_Container_Creation_Progress = StringReplace(ControlGetText($hWnd_TC_Volume_Creation_Wizard, '', '[CLASS:Static; INSTANCE:12]'), "%", "")
    If ($TC_Container_Creation_Progress <> $TC_Container_Creation_Progress_Save) AND $TC_Container_Creation_Progress <> 100 Then
    $TC_Timer = TimerInit()
    $TC_Container_Creation_Progress_Save = $TC_Container_Creation_Progress
    ConsoleWrite("Step 10: Container creation progress: " & $TC_Container_Creation_Progress & "%" & @CRLF)
    EndIf
    If $TC_Container_Creation_Progress = 100.000 Then
    ConsoleWrite("Step 10: Container creation progress: " & $TC_Container_Creation_Progress & "%" & @CRLF)
    $TC_Volume_Creation_Wizard_Error_Code = 10
    ExitLoop
    endif
    If TimerDiff($TC_Timer) > 5000 Then
    ConsoleWrite("Step 10: No progress in 5 seconds... failure?" & @CRLF)
    $b_TC_Volume_Creation_Wizard_failed = True
    ExitLoop
    EndIf
    WEnd
    EndIf

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

    If $b_TC_Volume_Creation_Wizard_failed = False Then
    $TC_Timer = TimerInit()
    While 1
    If WinExists("[TITLE:TrueCrypt Volume Creation Wizard; CLASS:#32770]", "The TrueCrypt volume has been successfully created.") = 1 Then
    ControlClick("[TITLE:TrueCrypt Volume Creation Wizard; CLASS:#32770]", '', '[CLASS:Button; INSTANCE:1]')
    ConsoleWrite("Step 11: Container creation finished successfully" & @CRLF)
    $TC_Volume_Creation_Wizard_Error_Code = 11
    ExitLoop
    EndIf
    If TimerDiff($TC_Timer) > 60000 Then
    ConsoleWrite("Step 11: Progress at 100% but TC failed to notify about success for 60 seconds...failure?" & @CRLF)
    $b_TC_Volume_Creation_Wizard_failed = True
    ExitLoop
    EndIf
    WEnd
    EndIf

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

    If $b_TC_Volume_Creation_Wizard_failed = False And $TC_Container_Dynamic = True Then
    $TC_Timer = TimerInit()
    While 1
    If WinExists("[TITLE:TrueCrypt Volume Creation Wizard; CLASS:#32770]", "Note that the size of the dynamic container reported by Windows") = 1 Then
    ControlClick("[TITLE:TrueCrypt Volume Creation Wizard; CLASS:#32770]", "Note that the size of the dynamic container reported by Windows", '[CLASS:Button; INSTANCE:1]')
    ConsoleWrite("Step 12: Warn dialog about dynamic volume size closed successfully" & @CRLF)
    $TC_Volume_Creation_Wizard_Error_Code = 12
    ExitLoop
    EndIf
    If TimerDiff($TC_Timer) > 15000 Then
    ConsoleWrite("Step 12: Warn dialog about dynamic volume size was not found!" & @CRLF)
    $b_TC_Volume_Creation_Wizard_failed = True
    ExitLoop
    EndIf
    WEnd
    EndIf
    EndIf
    EndIf

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

    SetError($TC_Volume_Creation_Wizard_Error_Code)
    If $b_TC_Volume_Creation_Wizard_failed = true Then
    Return 0
    Else
    Return 1
    EndIf

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

    EndFunc ;==>_TC_Container_Create

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

    Func OnAutoItExit()
    $debug = ProcessClose($PID_TC_Format)
    ConsoleWrite("Exiting TC debug: Return code(" & $debug & ") Error code(" & @error & ")" & @CRLF)
    EndFunc ;==>OnAutoItExit

    [/autoit]
  • SQL-Ergebnis als Variable speichern

    • misterspeed
    • 5. Juli 2013 um 11:58

    Und da du sicher nicht nur den ersten Namen haben willst sondern alle solltest du wie auch in den Beispielen zu FetchData eine while Schleife verwenden um alle Ergebniszeilen deiner SQL Abfrage auszulesen. FetchData liefert dir nämlich immer nur eine Zeile.

  • Anmeldungen im LAN via UDP Broadcast mitbekommen

    • misterspeed
    • 4. Juli 2013 um 01:48

    Hab auch noch ein wenig damit rumgespielt:

    Spoiler anzeigen
    [autoit]


    #include <array.au3>

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

    Opt("TrayMenuMode",1)
    $tExit=TrayCreateItem("beenden")

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

    ;SERVER!! Start Me First !!!!!!!!!!!!!!!
    $myIP = "192.168.1.110"

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

    ; Start The UDP Services
    ;==============================================
    UDPStartUp()

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

    ; Create a Listening "SOCKET"
    ;==============================================
    $socket = UDPBind($myIP, 67)
    If @error <> 0 Then Exit

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

    $j = 1
    While TrayGetMsg()<>$tExit
    $aResult = UDPRecv($socket,4000,3)
    If IsArray($aResult) Then
    ConsoleWrite("new DHCP Server paket received: " & $j & @CRLF & "-------------------------" & @CRLF)
    For $i = 0 To UBound($aResult)-1
    ConsoleWrite($i & ": " & $aResult[$i] & @CRLF)
    If $i = 0 And StringInStr($aResult[0],"FF") Then
    $sTemp = $aResult[0]
    While StringRight($sTemp,2) <> "FF"
    $sTemp = StringTrimRight($sTemp,1)
    WEnd
    getFormatedHex($sTemp)
    EndIf
    Next
    ConsoleWrite("-------------------------" & @CRLF)
    $j+=1
    EndIf
    WEnd

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

    UDPCloseSocket($socket)
    UDPShutdown()

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

    Func getFormatedHex($sData)
    Local $magicCookie = "63825363"
    Local $aSplit = StringSplit($sData,$magicCookie,1)
    If IsArray($aSplit) Then
    $sData = $aSplit[$aSplit[0]]
    Local $aData[stringlen($sData)/2]
    For $i = 0 To UBound($aData)-1
    $aData[$i] = StringMid($sData,($i*2)+1,2)
    Next
    ;_ArrayDisplay($aData)
    $sData = ""
    $type = "tagByte"
    $len = 0
    For $i = 0 To UBound($aData)-1
    If $i = UBound($aData)-1 Then
    If $aData[$i] <> "FF" Then Return -1
    $sData = StringReplace($sData,@CRLF,"",-1)
    ConsoleWrite($sData & @CRLF)
    $sData = getFormatedText($sData)
    ConsoleWrite($sData & @CRLF)
    Return 1
    EndIf
    If $type = "tagByte" Then
    $sData &= $aData[$i] & " "
    $type = "len"
    ContinueLoop
    EndIf
    If $type = "len" Then
    ;$sData &= $aData[$i] & " "
    $len = Dec($aData[$i])
    For $j = $i To $i+$len
    $sData &= $aData[$j] & " "
    Next
    $sData = StringReplace($sData," ",@CRLF,-1)
    $i += $len
    $type = "tagByte"
    ContinueLoop
    EndIf
    Next
    EndIf
    EndFunc

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

    Func getFormatedText($sData)

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

    ; http://www.networksorcery.com/enp/protocol/bootp/options.htm

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

    Local $aTagTypes[256] = [ "Pad","Subnet Mask","Time Offset (deprecated)","Router","Time Server","Name Server","Domain Name Server","Log Server","Quote Server","LPR Server","Impress Server","Resource Location Server", _
    "Host Name","Boot File Size","Merit Dump File","Domain Name","Swap Server","Root Path","Extensions Path","IP Forwarding enable/disable","Non-local Source Routing enable/disable","Policy Filter", _
    "Maximum Datagram Reassembly Size","Default IP Time-to-live","Path MTU Aging Timeout","Path MTU Plateau Table","Interface MTU","All Subnets are Local","Broadcast Address","Perform Mask Discovery", _
    "Mask supplier","Perform router discovery","Router solicitation address","Static routing table","Trailer encapsulation","ARP cache timeout","Ethernet encapsulation","Default TCP TTL", _
    "TCP keepalive interval","TCP keepalive garbage","Network Information Service Domain","Network Information Servers","NTP servers","Vendor specific information","NetBIOS over TCP/IP name server", _
    "NetBIOS over TCP/IP Datagram Distribution Server","NetBIOS over TCP/IP Node Type","NetBIOS over TCP/IP Scope","X Window System Font Server","X Window System Display Manager","Requested IP Address", _
    "IP address lease time","Option overload","DHCP message type","Server identifier","Parameter request list","Message","Maximum DHCP message size","Renew time value","Rebinding time value", _
    "Class-identifier","Client-identifier","NetWare/IP Domain Name","NetWare/IP information","Network Information Service+ Domain","Network Information Service+ Servers","TFTP server name","Bootfile name", _
    "Mobile IP Home Agent","Simple Mail Transport Protocol Server","Post Office Protocol Server","Network News Transport Protocol Server","Default World Wide Web Server","Default Finger Server", _
    "Default Internet Relay Chat Server","StreetTalk Server","StreetTalk Directory Assistance Server","User Class Information","SLP Directory Agent","SLP Service Scope","Rapid Commit", _
    "FQDN, Fully Qualified Domain Name","Relay Agent Information","Internet Storage Name Service","???? RFC 3679","NDS servers","NDS tree name","NDS context","BCMCS Controller Domain Name list", _
    "BCMCS Controller IPv4 address list","Authentication","client-last-transaction-time","associated-ip","Client System Architecture Type","Client Network Interface Identifier", _
    "LDAP, Lightweight Directory Access Protocol","???? RFC 3679","Client Machine Identifier","Open Group's User Authentication","GEOCONF_CIVIC","IEEE 1003.1 TZ String","Reference to the TZ Database", _
    "???? RFC 3679","???? RFC 3679","???? RFC 3679","???? RFC 3679","???? RFC 3679","???? RFC 3679","???? RFC 3679","???? RFC 3679","???? RFC 3679","???? RFC 3679","NetInfo Parent Server Address", _
    "NetInfo Parent Server Tag","URL","???? RFC 3679","Auto-Configure","Name Service Search","Subnet Selection","DNS domain search list","SIP Servers DHCP Option","Classless Static Route Option", _
    "CCC, CableLabs Client Configuration","GeoConf","Vendor-Identifying Vendor Class","Vendor-Identifying Vendor-Specific","???? RFC 3679","???? RFC 3679","TFTP Server IP address", _
    "Call Server IP address","Discrimination string","Remote statistics server IP address","802.1P VLAN ID","802.1Q L2 Priority","Diffserv Code Point","HTTP Proxy for phone-specific applications", _
    "PANA Authentication Agent","LoST Server","CAPWAP Access Controller addresses","OPTION-IPv4_Address-MoS","OPTION-IPv4_FQDN-MoS","SIP UA Configuration Service Domains","OPTION-IPv4_Address-ANDSF", _
    "OPTION-IPv6_Address-ANDSF","???? RFC 3942","???? RFC 3942","???? RFC 3942","???? RFC 3942","???? RFC 3942","???? RFC 3942","TFTP server address","status-code","base-time","start-time-of-state", _
    "query-start-time","query-end-time","dhcp-state","data-source","???? RFC 3942","???? RFC 3942","???? RFC 3942","???? RFC 3942","???? RFC 3942","???? RFC 3942","???? RFC 3942","???? RFC 3942", _
    "???? RFC 3942","???? RFC 3942","???? RFC 3942","???? RFC 3942","???? RFC 3942","???? RFC 3942","???? RFC 3942","???? RFC 3942","???? RFC 3942","Etherboot","IP Telephone", _
    "Etherboot / PacketCable and CableHome","???? RFC 3942","???? RFC 3942","???? RFC 3942","???? RFC 3942","???? RFC 3942","???? RFC 3942","???? RFC 3942","???? RFC 3942","???? RFC 3942","???? RFC 3942", _
    "???? RFC 3942","???? RFC 3942","???? RFC 3942","???? RFC 3942","???? RFC 3942","???? RFC 3942","???? RFC 3942","???? RFC 3942","???? RFC 3942","???? RFC 3942","???? RFC 3942","???? RFC 3942", _
    "???? RFC 3942","???? RFC 3942","???? RFC 3942","???? RFC 3942","???? RFC 3942","???? RFC 3942","???? RFC 3942","???? RFC 3942","pxelinux.magic (string) = F1:00:74:7E (241.0.116.126)", _
    "pxelinux.configfile (text)","pxelinux.pathprefix (text)","pxelinux.reboottime (unsigned integer 32 bits)","OPTION_6RD","OPTION_V4_ACCESS_DOMAIN","---","---","---","---","---","---","Subnet Allocation", _
    "Virtual Subnet Selection","???? RFC 3942","???? RFC 3942","Private use","Private use","Private use","Private use","Private use","Private use","Private use","Private use","Private use","Private use", _
    "Private use","Private use","Private use","Private use","Private use","Private use","Private use","Private use","Private use","Private use","Private use","Private use","Private use","Private use", _
    "Private use","Private use","Private use","Private use","Private use","Private use","Private use","End" _
    ]
    Local $aRequestTypes[9]=["---","DHCPDISCOVER","DHCPOFFER","DHCPREQUEST","DHCPDECLINE","DHCPACK","DHCPNAK","DHCPRELEASE","DHCPINFORM"]
    Local $aSplit = StringSplit(StringReplace($sData," ",""),@CRLF,1)
    If IsArray($aSplit) Then
    For $i=1 To $aSplit[0]
    $tagByte = StringLeft($aSplit[$i],2)
    $temp = StringTrimLeft($aSplit[$i],4)
    Switch $tagByte
    Case "35"
    $aSplit[$i]= "RequestType:" & @TAB & @TAB & @TAB & $aRequestTypes[dec($temp)]
    Case "3D"
    $aSplit[$i]= "Client Identifier (MAC):" & @TAB
    For $j = 3 to StringLen($temp)-1 Step 2
    $aSplit[$i] &= StringMid($temp,$j,2) & ":"
    Next
    $aSplit[$i] = StringReplace($aSplit[$i],":","",-1)
    Case "32"
    $aSplit[$i]= "Requested IP:" & @TAB & @TAB & @TAB
    $aSplit[$i] &= Dec(StringLeft($temp,2)) & "." & Dec(StringMid($temp,3,2)) & "." & Dec(StringMid($temp,5,2)) & "." & Dec(StringRight($temp,2))
    Case "39"
    $aSplit[$i] = "Maximum DHCP message size:" & @TAB & Dec($temp)
    Case "3C"
    $aSplit[$i] = "Class identifier:" & @TAB & @TAB & BinaryToString(Binary("0x" & $temp))
    Case "0C"
    $aSplit[$i] = "Hostname:" & @TAB & @TAB & @TAB & BinaryToString(Binary("0x" & $temp))
    Case "36"
    $aSplit[$i] = "Sever Identifier (IP):" & @TAB & @TAB
    $aSplit[$i] &= Dec(StringLeft($temp,2)) & "." & Dec(StringMid($temp,3,2)) & "." & Dec(StringMid($temp,5,2)) & "." & Dec(StringRight($temp,2))
    Case "37"
    $aSplit[$i] = "Parameter request list:" & @TAB & @TAB
    For $j = 1 to StringLen($temp)-1 Step 2
    ;ConsoleWrite(Dec(StringMid($temp,$j,2)) & @CRLF)
    $aSplit[$i] &= $aTagTypes[Dec(StringMid($temp,$j,2))] & "|"
    Next
    $aSplit[$i] = StringReplace($aSplit[$i],"|","",-1)
    Case "51"
    $aSplit[$i] = "FQDN:" & @TAB & @TAB & @TAB & @TAB & BinaryToString(Binary("0x" & StringTrimLeft($temp,6)))
    Case Else
    $aSplit[$i] = "Unsupported RAW Data:" & @TAB & @TAB & $tagByte & " " & StringMid($aSplit[$i],3,2) & " " & $temp
    EndSwitch
    Next
    Local $sReturn = ""
    For $i = 1 to $aSplit[0]
    $sReturn &= $aSplit[$i] & @CRLF
    Next
    Return StringReplace($sReturn,@CRLF,"",-1)
    EndIf
    EndFunc

    [/autoit]

    EDIT:

    Anmerkung zu deiner Variante um an MAC / IP / Hostname zu kommen... du solltest zum einen nicht vergessen, dass diverse Felder variable Längen haben und zum anderen, dass die TagTypes nicht zwingend einmalig im String vorkommen, da manche Felder wie z.B. der Hostname beliebige Zahlen und Strings enthalten kann, dadurch könnte dein binarymid() in _findbinary() ggf. eine falsche Stelle im Binär-String zurückgeben. Deswegen zerlege ich bei mir den String zunächst Byte für Byte mithilfe der Längenangaben in Sätze und kann diese dann im Anschluß anhand des jeweils ersten Byte eines jeden Satzes auswerten.

  • Anmeldungen im LAN via UDP Broadcast mitbekommen

    • misterspeed
    • 3. Juli 2013 um 17:15

    Bekommst du mehr als 1 Paket in der console angezeigt? Hab ein wenig hier rumgespielt und bekomme mit obigem Script immer nur 1 Paket:

    Code
    new DHCP packet received: 1
    -------------------------
    0: 0x0101060058D539990000000000000000000000000000000000000000Xmac-adresseX00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000Xoption feldXFF
    1: 0.0.0.0
    2: 68

    EDIT:
    Ist scheinbar nur bei meinem Nexus4 via wlan so, wenn ich am selben Rechner einen wlan Stick zusätzlich zur fixen LAN Verkabelung anschließe bekomme ich deutlich mehr Pakete von der DHCP aushandlung des Sticks mit. Seltsame Sache...

  • Anmeldungen im LAN via UDP Broadcast mitbekommen

    • misterspeed
    • 3. Juli 2013 um 15:04

    Hier mal ein kleines Testscript, welches mitbekommt wenn sich mein Smartphone mit dem WLAN verbindet, allerdings erhalte ich immer nur 1 UDP Paket, was möglicherweise damit zusammenhängt, dass entweder mein Smartphone die Daten gecached hat oder an der statischen MAC->IP Zuweisung in der Fritzbox:

    [autoit]


    Opt("TrayMenuMode",1)
    $tExit=TrayCreateItem("beenden")
    ;SERVER!! Start Me First !!!!!!!!!!!!!!!
    $myIP = "192.168.1.110"

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

    ; Start The UDP Services
    ;==============================================
    UDPStartUp()

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

    ; Create a Listening "SOCKET"
    ;==============================================
    $socket = UDPBind($myIP, 67)
    If @error <> 0 Then Exit

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

    $j = 1
    While TrayGetMsg()<>$tExit
    $aResult = UDPRecv($socket,576,3)
    If IsArray($aResult) Then
    ConsoleWrite("new DHCP packet received: " & $j & @CRLF & "-------------------------" & @CRLF)
    For $i = 0 To UBound($aResult)-1
    ConsoleWrite($i & ": " & $aResult[$i] & @CRLF)
    Next
    ConsoleWrite("-------------------------" & @CRLF)
    $j+=1
    EndIf
    WEnd

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

    UDPCloseSocket($socket)
    UDPShutdown()

    [/autoit]
  • Anmeldungen im LAN via UDP Broadcast mitbekommen

    • misterspeed
    • 3. Juli 2013 um 14:31

    Ich vermute mal du redest davon DHCP Anfragen in deinem Subnet zu erkennen um daraus letzlich auf ein neues Netzwerkgerät schließen zu können. Du müsstest also prinzipiell auf solche DHCP(-DHCPDISCOVER) Anfragen warten du wirst dabei aber keine IP Adresse des neuen Gerätes erfahren, denn dieses hat noch garkeine und möchte erstmal eine bekommen. Mehr als die MAC Adresse bekommst du dadurch also nicht. Der echte DHCP Server deines Netzwerkes (deine Fritzbox) wird solche Anfragen dann mit einem IP Vorschlag (DHCPOFFER) beantworten. Das neue Gerät wird im Anschluß alle IP Angebote der antwortenden DHCP Server auswerten und sich für eine der IP Adressen entscheiden, seine Wahl gibt es wiederum per DHCPREQUEST bekannt (=alle DHCP Server wissen nun ob ihr Angebot gewählt wurde). Alle 3 Pakete werden per Broadcast versendet und können demzufolge mitgeschnitten werden. Der DHCP Server muss dies dann noch mit einem DHCPACK (enthält die netz config, also gateway, client ip, dns server usw.) bestätigen oder mit einem DHCPNAK ablehnen (ich bin mir nicht sicher ob das auch noch per Broadcast oder eher per unicast passiert). Zu guter letzt findet noch eine ARP Anfrage des neuen Gerätes statt um sicherzustellen, dass kein anderes Gerät diese IP verwendet.

    Da DHCP eine lease time vorsieht wird die IP Zuweisung in regelmässigen Intervallen neu angefragt / bestätigt, was per unicast passiert, da das Gerät ja nun alle nötigen Informationen für eine direkte Kommunikation mit dem Server besitzt.

    Noch detailierter kannst du das hier nachlesen: http://de.wikipedia.org/wiki/Dynamic_H…P-Kommunikation

    Dort stehen auch die Ports und der genaue Aufbau der einzelnen Pakete.

    Ich sehe aber ein kleines Problem in deiner Vorgehensweise, denn niemand zwingt eine neues Gerät dazu DHCP zu nutzen, man könnte das Netzwerkinterface auch statisch konfigurieren. Das würde vermutlich in einer unicast Kommunikation zwischen Router und neuem Gerät resultieren, welche du nicht mitschneiden kannst. Das einzige was du eventuell mitschneiden könntest sind die ARP Request, welche sicherstellen sollen, dass die IP einmalig im Netzwerk verwendet wird.

    Am zuverlässigsten und einfachsten dürfte es wie vereits erwähnt wurde sein die bereitgestellten Schnittstellen der Fritzbox zu nutzen, denn diese zeigt alle verbundenen Geräte im Webinterface an.

  • Minimize GUI to Tray

    • misterspeed
    • 30. Juni 2013 um 19:21

    Poste zukünftig bitte eine komplette GUI in der der Fehler reproduzierbar ist. Der Fehler tritt in meiner Test GUI jedenfalls nicht auf.

    [autoit]


    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <Constants.au3>

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

    Opt("TrayMenuMode",1)
    TraySetState(2)

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

    $Form1 = GUICreate("Form1", 615, 438, 192, 124)
    $Button1 = GUICtrlCreateButton("Button1", 208, 72, 75, 25)
    GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    $ok = GUISetState(@SW_HIDE)
    ConsoleWrite($ok & @CRLF)
    TraySetState(1)
    TraySetToolTip ("Klicken um Oberfläche zu öffnen!")
    EndSwitch

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

    If TrayGetMsg()==$TRAY_EVENT_PRIMARYUP Then
    ConsoleWrite("up" & @CRLF)
    $ok = GUISetState(@SW_SHOW)
    ConsoleWrite($ok & @CRLF)
    EndIf
    WEnd

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


    Ich vermute mal, dass du die Pausefunktion des Trayicons nicht deaktiviert hast, welche beim Klick das ganze Script pausiert und somit auch erstmal kein nachfolgender Code ausgeführt wird.

    [autoit]

    Opt("TrayMenuMode",1)

    [/autoit]
  • sehr lange Zeile einer Batch-Datei nach Autoit "überführen"

    • misterspeed
    • 29. Juni 2013 um 21:04
    [autoit]


    $variable = ("C:\Program Files\Herstellerverzeichnis\program aufruf.exe" register "das ist der user" "rKzzX/dsQDfc/M3S\1Vwz03"')

    [/autoit]

    In dem man erstmal grundlegend Autoit verstanden hat? Die Klammern in deiner Variablenzuweisungen haben da jedenfalls nix verloren.

    [autoit]


    Run(@ComSpec & " /c " ...)

    [/autoit]

    @ComSpec brauchst du nur wenn du "DOS Befehle", also z.B. "dir", "copy" usw. verwenden willst. Für einfache Programmaufrufe mit Parametern brauchst du das nicht.
    Grundsätzlich ist zu beachten, dass bei cmdline Aufrufen Pfade und in der Regel auch Parameter mit Anführungszeichen umschlossen werden müssen wenn die betreffenden Teilstrings Leerzeichen enthalten.
    Da du in Autoit ebenfalls Strings mit Anführungszeichen kennzeichnen musst benötigst du in der Regel eine Kombination aus einfachen Anführungszeichen und normalen.

    In deinem Fall sollte der korrekte String also so ausschaun:

    [autoit]


    $variable = '"C:\Program Files\Herstellerverzeichnis\program aufruf.exe" register "das ist der user" "rKzzX/dsQDfc/M3S\1Vwz03"'

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

    run($variable,"",@SW_HIDE)

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

    ; oder sofern user und key variabel sein sollen könntest du das ganze auch so zusammenbauen:

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

    $program = "C:\Program Files\Herstellerverzeichnis\program aufruf.exe"
    $user = "das ist der user"
    $key = "rKzzX/dsQDfc/M3S\1Vwz03"
    $variable = '"' & $program & '" register "' & $user & '" "' & $key & '"'

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

    run($variable,"",@SW_HIDE)

    [/autoit]


    PS:
    Sehr lange Zeile sollte hoffentlich ein Witz sein. :D
    Wenn das bei dir schon lang ist, dann hast du wohl noch nie ein richtiges cmdline basiertes Programm gesehen.

  • Fenster mit Stil $WS_POPUP durch Klick auf Taskbar Icon minimieren?

    • misterspeed
    • 28. Juni 2013 um 23:03

    Füg einfach den Style $WS_MINIMIZEBOX hinzu, dann verhält sich das Fenster wie jedes andere auch und wird minimiert/wiederhergestellt wenn man auf den Eintrag in der Taskleiste klickt.

  • [Expertenrunde] Problem mit ID3_v3.4.au3 UDF

    • misterspeed
    • 27. Juni 2013 um 18:08

    Ein schneller fix könnte auch so ausschaun, dann kommt es jedenfalls nicht mehr zum Absturz in besagter Funktion, allerdings evtl. in späteren Funktionen die erwarten, dass die Daten von dieser Funktion verändert wurden...

    [autoit]


    Local $aIndex[1]
    $aIndex[0] = 0
    For $ibyte=1 To BinaryLen($ID3v2_RawDataBinary)-1
    If BinaryMid($ID3v2_RawDataBinary,$ibyte,1) == Binary("0xFF") Then
    If BinaryMid($ID3v2_RawDataBinary,$ibyte+1,1) == Binary("0x00") Then
    _ArrayAdd($aIndex,$ibyte)
    $aIndex[0] += 1
    EndIf
    EndIf
    Next
    ;~ _ArrayDisplay($aIndex)
    if ubound($aIndex) < 2 then return -1

    [/autoit]
  • [Expertenrunde] Problem mit ID3_v3.4.au3 UDF

    • misterspeed
    • 27. Juni 2013 um 17:59
    [autoit]


    Func _h_ID3v2Tag_RemoveUnsynchronisation()
    ;....
    Local $aIndex[1]
    $aIndex[0] = 0
    For $ibyte=1 To BinaryLen($ID3v2_RawDataBinary)-1
    If BinaryMid($ID3v2_RawDataBinary,$ibyte,1) == Binary("0xFF") Then
    If BinaryMid($ID3v2_RawDataBinary,$ibyte+1,1) == Binary("0x00") Then
    _ArrayAdd($aIndex,$ibyte)
    $aIndex[0] += 1
    EndIf
    EndIf
    Next
    ;~ _ArrayDisplay($aIndex)

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

    Local $ID3v2_RawDataBinary_Temp = BinaryMid($ID3v2_RawDataBinary,1,5)
    Local $bCurrentTagFlags = BinaryMid($ID3v2_RawDataBinary,6,1)
    $ID3v2_RawDataBinary_Temp &= Binary("0x" & Hex(BitAND(127, Dec(Hex($bCurrentTagFlags,2))),2)) ;Clear unsynchronisation flag in Tag header
    $ID3v2_RawDataBinary_Temp &= BinaryMid($ID3v2_RawDataBinary,7,$aIndex[1])
    Local $Start, $Length = $aIndex[1]
    For $ibyte = 1 To $aIndex[0]-1
    $ID3v2_RawDataBinary_Temp &= BinaryMid($ID3v2_RawDataBinary,$aIndex[$ibyte] + 2,$aIndex[$ibyte+1]-$aIndex[$ibyte]-1)
    Next
    $ID3v2_RawDataBinary_Temp &= BinaryMid($ID3v2_RawDataBinary,$aIndex[$aIndex[0]]+2)

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

    $ID3v2_RawDataBinary = $ID3v2_RawDataBinary_Temp

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

    EndFunc

    [/autoit]

    Der Fehler steckt wohl hier. Grund ist vermutlich eine nicht vorhandene Prüfung ob das Array überhaupt mit ArrayAdd vergrößert wurde oder nicht. Es wird einfach davon ausgegangen, dass das schon alles klappt.

  • ToolTip wird nicht angezeigt

    • misterspeed
    • 27. Juni 2013 um 11:38

    Es liegt an den Bildern. Ich hab mir mal die ganzen Test-Bilder gebastelt (leg sowas bitte zukünftig bei) und das Ergebnis ist eine GUI in der die Bilder die Checkboxen überlagern und unklickbar machen, als Nebeneffekt kann man auch die gesetzten Tooltips nicht mehr sehen. Das Problem ist eigentlich alt bekannt und kann durch "deaktivieren" des Image Controls behoben werden:

    [autoit]


    $image = GUICtrlCreatePic(@ScriptDir&"\0.bmp", 2, 25, $tabSize[0]-30, $tabSize[1]-30)
    GUICtrlSetState($image,$GUI_DISABLE) ; <--- löst dein Problem

    [/autoit]
  • Variable mit Variable angeben

    • misterspeed
    • 25. Juni 2013 um 12:38

    Steht doch alles da was du brauchst. Das was du vorhast geht nur durch die Nutzung von Eval(). Ich würde aber von der Nutzung von eval() abraten und stattdessen meine Daten in Arrays packen die es dir auch ermöglichen mit einer Indexvariable zu arbeiten. Dein Beispiel schreit aber eigentlich förmlich nach einer stinknormalen if...then...else Verzweigung, keine Ahnung warum du das komlizierter machen willst als es ist.


    [autoit]


    $test1 = "falsch"
    $test2 = "ziel"

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

    For $i = 1 to 2
    msgbox(0,"",Eval("test" & $i))
    Next

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

    ; oder

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

    dim $aTest[2] = ["falsch","ziel"]

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

    For $i = 1 to 2
    msgbox(0,"",$aTest[$i-1])
    Next

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

    ; oder

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

    $test1 = "falsch"
    $test2 = "ziel"

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

    For $i = 1 to 2
    if $i = 1 then msgbox(0,"",$test1)
    if $i = 2 then msgbox(0,"",$test2)
    Next

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

    ; oder

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

    $test1 = "falsch"
    $test2 = "ziel"

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

    For $i = 1 to 2
    if $i = 1 then
    msgbox(0,"",$test1)
    else
    msgbox(0,"",$test2)
    endif
    Next

    [/autoit]
  • Variable mit Variable angeben

    • misterspeed
    • 25. Juni 2013 um 11:58

    Erst vor 2 Tagen oder so hier behandelt: https://autoit.de/index.php?page=Thread&amp;threadID=41747

  • Drag & Drop einer Datei in externes Programmfenster automatisieren

    • misterspeed
    • 24. Juni 2013 um 15:15

    Kleiner Nachtrag... das oben verlinkte Posting enthält noch eine fehlerhafte Version, eine fehlerfreie Version findet man hier: http://www.autoitscript.com/forum/topic/89…e-3#entry650573

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™