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. Andy

Beiträge von Andy

  • Script lässt sich nach Start nicht beenden

    • Andy
    • 26. Juni 2009 um 15:27
    Zitat

    Hat jemand ne Idee warum ihc es nicht beenden kann, nachdem es gestartet ist :(


    Ja, weil du vor dem "Beenden" auf "Start" geklickt hast und aus der while/wend Schleife ab zeile 28 nicht rauskommst.

  • Verschlüssellungs Methode!?

    • Andy
    • 26. Juni 2009 um 08:57

    @ Der_Doc, Anno2008, peethebee

    ich weiss, daß hier im Forum hitzig diskutiert wird wg Decompiler usw, aber man sollte trotzdem einen neuen Thread lesen, bevor man irgendetwas schreibt, was mit dem AKTUELLEN Thema garnichts zu tun hat.
    Hier ging es in keinster Weise um irgendwelche Decompiler, die Einträge in der INI sollten lediglich so "verschlüsselt" AUSSEHEN wie auf dem Beispielbild. Hätte der Benman statt einer EXE eine MP3 oder eine DLL in Scite geladen und gescreent, dann wäre kein Wort gefallen wahrscheinlich^^....

    @Benman, gewöhne dir schnellstens einen Schreibstil an, bei dem man auf Anhieb nachvollziehen kann, wo das Problem ist und was du meinst! Nicht jeder hat Lust, mehrmals nachzufragen was du meinen KÖNNTEST....

    ciao
    Andy

  • Verschlüssellungs Methode!?

    • Andy
    • 26. Juni 2009 um 08:41
    Zitat

    Nun möchte ich aber nicht so eine verschlüsslung die in AutoIt vorhanden ist
    sondern eine die den Text so ändert wie ca in den Bild...


    Siehste, geht doch ^^
    Da wirst du mit dem IniWrite() Probleme bekommen, denn in deinem gescreenten "Text" sind Nullbytes (die viereckigen Dinger mit dem NUL drin) und die werden mit den "normalen" AutoIt-Stringfunktionen nicht behandelt^^
    Spass beiseite, die

    [autoit]

    _stringencrypt()

    [/autoit]

    gibt nur die Ziffern "0123456789ABCDEF" zurück, sieht irgendwie garnicht verschlüsselt aus^^
    Daher hab ich mich mal an an das da gehalten,

    Zitat

    sondern eine die den Text so ändert wie ca in den Bild..

    und die Ausgabe von Stringencrypt "aufgehübscht". Jetzt werden die Ascii-codes von 30 bis 251 verwendet,

    Zitat

    XEš²È8Û/ ç•ê±KOÖÄoßS&–;àÁg䨝¾àSµÎkX2·ÊJ)¤,ÒŸ"ì®æEÈ/× Ôx4‡F²êyOeã½rv©’§É“Ãl¥Tg×Àɰ4l²¬\ÓäÐãÌÉŽG}C;~êíf³Û•‡á¨L(+€œìYEt

    das sieht doch schon wesentlich gefährlicher aus, als das langweilige

    Zitat

    7CFE30A0F70A172B1BF42481AC9D098580D8F4C6DC90FE0256BE6AD2CA4C02FD7CFE30A0F70A172B1BF42481AC9D098


    oder etwa nicht^^ :rofl:

    ciao
    Andy

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <GuiConstantsEx.au3>
    #include <String.au3>

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

    Local $pass = "Passphrase" ;Passwort zum Verschlüsseln mittels _stringencrypt()

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

    $Form = GUICreate("Verschlüsseln", 358, 93, 193, 115)
    $Input = GUICtrlCreateInput("Geheimtext", 14, 24, 181, 21)
    $button = GUICtrlCreateButton("Verschlüsseln", 225, 24, 129, 25, 0)
    $button2 = GUICtrlCreateButton("Entschlüsseln", 225, 54, 129, 25, 0)
    GUICtrlCreateLabel("", 24, 72, 4, 4)
    GUISetState(@SW_SHOW)

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

    While 1
    $msg = GUIGetMsg()
    Switch $msg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $button ;verschluesseln
    $in = GUICtrlRead($Input)
    If $in <> "" Then
    $text = _verschluesseln(_StringEncrypt(1, $in, $pass, 1))
    GUICtrlSetData($Input, $text)
    EndIf
    Case $button2 ;entschluesseln
    $in = GUICtrlRead($Input)
    If $in <> "" Then
    $text = _StringEncrypt(0, _entschluesseln($in), $pass, 1)
    GUICtrlSetData($Input, $text)
    EndIf
    EndSwitch
    WEnd

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

    Func _verschluesseln($string) ;nix grossartig verschlüsselt, sieht nur anders aus^^
    Local $x = "" ;macht aus den Buchstaben 0-F (Rückgabe von _stringencrypt)
    For $i = 1 To StringLen($string) ;zufällige Ascii-Codes von 30-251
    $s = StringMid($string, $i, 1)
    $r = Random(0, 12, 1)
    $x &= Chr((dec($s)) * 13 + $r + 30)
    Next
    Return $x
    EndFunc ;==>_verschluesseln

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

    Func _entschluesseln($string)
    Local $e = ""
    For $i = 1 To StringLen($string)
    $x = StringMid($string, $i, 1)
    $e &= hex(((Asc($x) - 30) - (Mod((Asc($x) - 30), 13))) / 13,1)
    Next
    Return $e
    EndFunc ;==>_entschluesseln

    [/autoit]
  • Listview: Inhalt rechtsbündig anzeigen // Inhalt ins Clipboard kopieren

    • Andy
    • 25. Juni 2009 um 22:36
    [autoit]

    _GUICtrlListView_SetExtendedListViewStyle

    [/autoit]


    in der Hilfe gefunden "Doppelklick"
    Das müsste es sein!
    ciao
    Andy

  • Listview: Inhalt rechtsbündig anzeigen // Inhalt ins Clipboard kopieren

    • Andy
    • 25. Juni 2009 um 22:15

    Hallo,

    [autoit]

    clipput() und clipget()

    [/autoit]

    handeln die Zwischenablage
    und mit

    [autoit]

    _GUICtrlListView_JustifyColumn

    [/autoit]

    klapppts auch mit der Ausrichtung!
    ciao
    Andy

  • Verschlüssellungs Methode!?

    • Andy
    • 25. Juni 2009 um 22:09

    ach, sowas?
    LoginWrapper
    Das packt deine *.EXE nur nach Passworteingabe aus...

    Zitat

    Gibt es den sonst nix was man direkt in autoit einbaun kann..

    Drück dich einfach verständlich aus, damit man dir weiterhelfen kann... ich weiß immer noch nicht genau um was es dir geht, und die anderen sicher auch nicht, sonst hätte längst jemand geantwortet.

  • VBS zu EXE Konvertieren

    • Andy
    • 25. Juni 2009 um 20:46

    Hallo,
    bei VBS und AutoIt muss ich immer an sowas denken

    Spoiler anzeigen
    Code
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    '
    ' Example WSH Script (VBScript)
    '
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    
    
    ' Require Variants to be declared before used
    Option Explicit 
    
    
    
    
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Declare Variables & Objects
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    
    
    Dim oShell
    Dim oAutoIt
    
    
    
    
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Initialise Variables & Objects
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    
    
    Set oShell = WScript.CreateObject("WScript.Shell")
    Set oAutoIt = WScript.CreateObject("AutoItX3.Control")
    
    
    
    
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Start of Script
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    
    
    WScript.Echo "This script will run some test calculations"
    
    
    oShell.Run "calc.exe", 1, FALSE
    
    
    ' Wait for the calc window to become active
    oAutoIt.WinWaitActive "Rechner", ""
    
    
    ' Send some keystokes to calc
    oAutoIt.Send "2*2="
    oAutoIt.Sleep 500
    oAutoIt.Send "4*4="
    oAutoIt.Sleep 500
    oAutoIt.Send "8*8="
    oAutoIt.Sleep 500
    oAutoIt.WinClose "Calc", ""
    oAutoIt.WinWaitClose "Calc", ""
    
    
    WScript.Quit
    Alles anzeigen


    Zeile 3 :rofl: ...Zeile 24 :rock: und ab Zeile 38 :thumbup:
    Das schöne daran ist, man braucht diese "Scripte" nicht zu "kompilieren" um sie weiterzugeben....eigentlich müsste es einen AU3toVBS-Konverter geben^^

    ciao
    Andy

  • Verschlüssellungs Methode!?

    • Andy
    • 25. Juni 2009 um 20:30

    Hi,
    https://autoit.de/www.gidf.de ....
    mit "Datei verschlüsseln" findest du tausende Programme die das machen.

    Oder aber per Autoit vom CHEFFE persönlch :rock: DAMIT

    Ich hab zwar keinerlei Ahnung warum diese "Datenbank" verschlüsselt werden muss, aber naja^^

    Zitat

    Woher wusstest du die drei nächsten Fragen, anno?


    ....es wird immer enger, bald sind alle Fragen verbraucht und die Fee ist verschwundibus :rofl:

    ciao
    Andy

  • Textausgaben von HyperTerminal auswerten

    • Andy
    • 25. Juni 2009 um 20:13

    Der_Doc
    genau das funktioniert leider nicht, weder mit controlgettext() noch mit controlcommand()

  • Textausgaben von HyperTerminal auswerten

    • Andy
    • 25. Juni 2009 um 20:06

    Hab mich mal umgeschaut.Terminalprogramme gibts wie Sand am Meer, aber die meisten sind nicht gerade gesprächig.
    Aber ich habe eine Methode gefunden, den "Text" bzw die Terminalbefehle zu lesen, und zwar aus der LOG-Datei
    Schau dir mal das ZOC von Emtec an, hat auch eine Scriptsprache, leider nicht per COM, sondern nur per DDE anzusprechen. Schreibt eine Logdatei mit allem IN/OUTPUT, die brauchst du nur auszulesen.
    Oder du kannst per controlsend einen Befehl an ZOC senden, bei dem der aktuelle Puffer in die Zwischenabllage geschrieben wird, und diese kannst du per Autoit bearbeiten.
    Also per controlsend den Modembefehl senden, nach einer Sekunde wieder mit controlsend den Terminal-Puffer in die Zwischenablage schreiben, von dort mit clipget() auslesen und gucken was passsiert ist.
    viel Spass dabei^^

    ciao
    Andy

  • Eine Zeile aus Textdatei löschen

    • Andy
    • 25. Juni 2009 um 17:51
    Zitat

    es geht bestimmt auch einfacher.. aber so klappts auch


    Hab auch erst gedacht, die Zeile sollte aus der *.TXT-Datei gelöscht werden.
    Aber das geht einfacher: *.TXT mit Editor öffnen, Zeile löschen, Speichern, fertig. Da braucht man kein Script für^^
    ciao
    Andy

  • Textausgaben von HyperTerminal auswerten

    • Andy
    • 25. Juni 2009 um 17:23

    Bist du auf Hyperterminal festgelegt?
    Ich frage deswegen, weil das "Textfeld" in Hyperterminal nicht ohne weiteres auszulesen ist. Mit Controlsend() kann man zwar Nachrichten hinschicken, aber nicht von dort lesen. Ähnlich wie bei den Java-basierten Chatprogrammen.
    Ggf funktioniert es bei anderen Terminalprogrammen. Wahrscheinlich ist es aber einfacher, direkt den COM-Port zu schreiben oder zu lesen.
    Ich gehe davon aus, daß du sowieso nur "einfache" Kommandos senden und die antwort empfangen willst.
    ciao
    Andy

  • Eine Zeile aus Textdatei löschen

    • Andy
    • 25. Juni 2009 um 17:17

    Hi,
    du willst in der LISTVIEW eine Zeile löschen? Oder in der *.TXT-Datei?

    [autoit]

    _GUICtrlListView_DeleteItemsSelected($Handle)

    [/autoit]

    löscht u.a. bei listview
    ciao
    Andy

  • Kommunikation mit UMTS / Modem COM Schnittstelle

    • Andy
    • 25. Juni 2009 um 15:25

    Hallo,
    sowohl bei http://www.autoitscript.com/forum/index.php?showtopic=45842&st=0&p=341916&#entry341916 als auch bei http://www.autoitscript.com/forum/index.php?showtopic=45842&st=0&p=341916&#entry341916 wird der Zugriff mittels Autoit auf die COM-Ports beschrieben.
    Wobei ich die Methode im ersten Link erfolgreich verwendet habe.

  • Klappt das so?

    • Andy
    • 24. Juni 2009 um 23:05

    Hi,
    hab mal was auf die Schnelle gebastelt:

    Spoiler anzeigen
    [autoit]

    #include <Constants.au3>
    #include <String.au3>
    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_UseUpx=n
    #AutoIt3Wrapper_Change2CUI=y
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****

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

    MsgBox(0, 0, _GetIP_FromName("www.autoit.de"))

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

    Func _GetIP_FromName($hostname) ;Rückgabe: bei Erfolg die IP, bei Fehler -1
    Local $console = Run(@ComSpec & " /c ping " & $hostname, @ScriptDir, @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
    Local $line
    While 1
    $line &= StdoutRead($console)
    If @error Then ExitLoop
    WEnd
    ;msgbox(0,0,$line)
    $ip = _StringBetween($line, "[", "]") ;regex folgt^^
    if @error then
    return -1
    else
    Return $ip[0]
    endif
    EndFunc ;==>_GetIP_FromName

    [/autoit]


    Richtet euch kostenlos bei z.B. https://autoit.de/www.dyndns.com einen Hostnamen ein und tragt diesen in euren Router ein. Anleitung dazu z.B. hier
    Jedes Mal, wenn ihr eine neue IP zugewiesen bekommt, überträgt der Router den Namen und die neue IP an den DNS. Somit seid ihr jederzeit unter eurem Hostnamen und eurer IP zu erreichen.
    D.H. im konkreten Fall, da du nicht auf den Rechner deines Freundes pingen kannst (weisst ja die IP nicht), musst du statt der IP mit dem HOSTNAMEN pingen. Ping macht auch eine Namensauflösung, so erhält man die IP des gegenübers und kann in Autoit loslegen.

    *edit*
    Bei der Client/Serve-Anwendung die Portweiterleitung und Löcher in die Firewall bohren nicht vergessen, auch PING darf nicht durch die Firewall geblockt werden.

    viel Spass
    Andy

  • Wort suchen Iron

    • Andy
    • 24. Juni 2009 um 19:07

    *ich muss dringend meine ZEN-Übungen machen*

    Du definierst EINMAL, EIN EINZIGES MAL das Suchmuster von deinem "Button". EINMAL!

    Wenn du die FOR/TO-Schleife noch in eine WHILE/WEND einpackst, dann läuft das Script permanent und sucht den Bildschirm nach deinem Button ab, DEN GESAMTEN BILDSCHIRM, solange bis du das Script abschiesst!!

    [autoit]

    $psum= ;diesen wert mit ctrl+V aus der zwischenablage einfügen s.o.
    while 1
    for $x=0 to @DesktopWidth-60 ;bildschirmbreite minus breite des suchmusters
    for $y=50 to @DesktopHeight-30 ; oben browser, unten taskleiste aussparen
    if pixelchecksum($x,$y,$x+60,$y)=$psum Then msgbox (0,$x+30,$y) ;wenns klappt, kommt das Vögelchen^^
    next
    next
    wend

    [/autoit]


    Wenn du den Desktop anzeigst, wird NICHTS gefunden, denn das Script sucht den "Button" und der ist NICHT auf dem Desktop. Lade im Browser https://autoit.de/www.autoit.de und das Script findet wieder nichts, denn der "Button" ist NICHT auf dem Bildschirm.
    Jetzt lädst du deine Website und BINGO findet das Script den "Button" denn der ist auf dem Bildschirm....egal wo, denn der gesamte Bildschirm wird nach dem "Button" abgesucht....

    Ist das so schwer?

  • Wort suchen Iron

    • Andy
    • 24. Juni 2009 um 17:20

    Meine Vorgehensweise:
    Website aufgemacht, Button auf dem Bildschirm
    Mit Autoit Window Info - Programm die "Koordinaten" des Buttons herausgefunden, dazu Mauszeiger mittig auf den Button
    Mauskoordinaten x und y aufgeschrieben, angenommen 730 und 612
    Wir wollen einen 60 Pixel breiten Streifen von 1 Pixel Höhe abfragen, der waagrecht mittig durch den Button läuft, also sind die x-koordinaten x1=730-30=700 und x2=730+30=760 , die y-koordinaten sind ja gleich, wir bleiben ja in derselben "Zeile"
    x1,x2, und y aufschreiben für Pixelchecksum(x1,y,x2,y)
    Scite aufgemacht, Fenster so verschoben, dass der "Button" sichtbar ist und kleines Script geschrieben

    [autoit]

    clipput(PixelChecksum(700,612,760,612)) ;x- und y-koordinaten eintragen

    [/autoit]


    das Script starten, es schreibt die Pixelchecksumme in die Zwischenablage
    Script ändern in

    [autoit]

    $psum=640861211 ;diesen wert mit ctrl+V aus der zwischenablage einfügen!
    for $x=300 to @DesktopWidth-60 ;bildschirmbreite minus breite des suchmusters
    for $y=100 to @DesktopHeight-30 ; oben browser, unten taskleiste aussparen
    if pixelchecksum($x,$y,$x+60,$y)=$psum Then msgbox (0,$x+30,$y) ;wenns klappt, kommt das Vögelchen^^
    next
    consolewrite($x&@crlf) ;q&d :o)
    next

    [/autoit]


    für $psum mit ctrl+V den Wert aus der Zwischenablage einfügen
    script starten, es wird der Bildschirm nach dem "Button" abgesucht, in der Msgbox sollten die Koordinaten des Buttons angezeigt werden
    die Startkoordinaten für die Schleifen $x und $y sollte man je nach Browser und Website anpassen


    *Edit*
    Warum nur einen kleinen "Pixelstreifen" und nicht den gesamten Button suchen?
    Weil Pixelchecksum relativ langsam ist, auf einer 24´´-Glotze dauert das sonst ewig....

  • Wort suchen Iron

    • Andy
    • 24. Juni 2009 um 14:59
    Zitat

    doch mal ist der text auf der seite länger -breiter, und mal nicht...


    Naja, aber der Button sieht doch immer gleich aus, oder?
    Also suchst du erst nach der "Buttonhintergrundfarbe" mit PixelSearch.
    Wenn du einen solchen Button gefunden hast, suchst du z.B. mit PixelChecksum nach dem "Buttoninhalt"
    Du kannst natürlich direkt mit Pixelchecksum den kompletten Button auf dem Screen suchen lassen, hab jetzt keine Ahnung ob das Geschwindigkeitsmäßig was bringt...

    *Edit*
    Habs mal getestet, ein 80 Pixel großes Bitmap (Teil eines "Buttons") finde ich auf einer Website in ca. 1-2 Sekunden pro Seite, wenn der "Button" weiter unten ist, scrollen hilft^^

  • ListView sortieren

    • Andy
    • 24. Juni 2009 um 14:41

    ...oder mittels Sortierung per Spaltenüberschriften und Icons^^

    Spoiler anzeigen
    [autoit]

    #include <ListViewConstants.au3>
    #include <WindowsConstants.au3>
    #include <GuiImageList.au3>
    #include <Array.au3>
    #include <ListBoxConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <GuiListView.au3>
    Global $SelDia
    Local $aIcons[4] = [0, 3, 6, 9]

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

    Local $iExWindowStyle = BitOR($WS_EX_DLGMODALFRAME, $WS_EX_CLIENTEDGE)
    Local $iExListViewStyle = BitOR($LVS_EX_FULLROWSELECT, $LVS_EX_SUBITEMIMAGES, $LVS_EX_GRIDLINES, $LVS_EX_CHECKBOXES, $LVS_EX_DOUBLEBUFFER)

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

    #Region ### START Koda GUI section ### Form=
    $Form1_1 = GUICreate("Löschomat", 777, 447, 195, 126)
    GUISetFont(8, 800, 0, "MS Sans Serif")
    GUISetBkColor(0x878787)
    $ListView1 = GUICtrlCreateListView("Dateiname|Größ (KB)|Endung|Pfad", 0, 0, 605, 445, $LBS_EXTENDEDSEL, $iExListViewStyle)

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

    GUICtrlSendMsg(-1, 0x101E, 0, 200)
    GUICtrlSendMsg(-1, 0x101E, 1, 80)
    GUICtrlSendMsg(-1, 0x101E, 2, 70)
    GUICtrlSendMsg(-1, 0x101E, 3, 250)

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

    GUICtrlCreateGroup("Handlungen", 612, 4, 157, 189)
    GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
    $Button1 = GUICtrlCreateButton("Auswahl löschen", 620, 32, 143, 33)
    GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
    $Checkbox1 = GUICtrlCreateCheckbox("Löschanfrage ein/aus", 620, 168, 145, 17)
    GUICtrlSetState(-1, $GUI_CHECKED)
    GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
    $Button2 = GUICtrlCreateButton("Aktuallisieren", 620, 112, 143, 25)
    GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
    $Button3 = GUICtrlCreateButton("Ordner aufrufen", 620, 140, 143, 25)
    GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    _GUICtrlListView_SetExtendedListViewStyle($ListView1, $iExListViewStyle)
    $hImage = _GUIImageList_Create(18, 18, 5, 3)
    _GUIImageList_AddIcon($hImage, @SystemDir & "\shell32.dll", -5) ;Das sind die Icons für die files
    _GUIImageList_AddIcon($hImage, @SystemDir & "\shell32.dll", -3)
    _GUIImageList_AddIcon($hImage, @SystemDir & "\shell32.dll", -5)
    _GUIImageList_AddIcon($hImage, @SystemDir & "\shell32.dll", -6)
    _GUIImageList_AddIcon($hImage, @SystemDir & "\shell32.dll", -9)
    _GUIImageList_AddIcon($hImage, @SystemDir & "\shell32.dll", -10)
    _GUIImageList_AddIcon($hImage, @SystemDir & "\shell32.dll", -11)
    _GUICtrlListView_SetImageList($ListView1, $hImage, 1)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    ExitLoop
    Case $Button3
    _DirSelect($ListView1, 0)
    Case $Button1
    $Read1 = GUICtrlRead($Checkbox1)
    If $Read1 = $GUI_CHECKED Then
    $Ch = 1
    Else
    $Ch = 0
    EndIf
    _Delete($ListView1, $Ch)
    Case $Button2
    _DirSelect($ListView1, 1)
    Case $ListView1
    ; Kick off the sort callback
    _GUICtrlListView_SortItems($ListView1, GUICtrlGetState($ListView1))
    EndSwitch
    WEnd
    _GUICtrlListView_UnRegisterSortCallBack($ListView1)
    GUIDelete()
    Exit

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

    Func _DirSelect($Handle, $Update)
    If $Update = 0 Then
    $SelDia = FileSelectFolder("Bitte wählen Sie einen Ordner aus.", "", 4)
    EndIf
    If Not @error Then
    _GUICtrlListView_DeleteAllItems($Handle)
    $Search = FileFindFirstFile($SelDia & "\*.*")
    $FileCount = DirGetSize($SelDia, 3)
    ;_arraydisplay($filecount)
    For $i = 1 To $FileCount[1] Step 1
    $NextFile = FileFindNextFile($Search)
    $attribute = FileGetAttrib($SelDia & "\" & $NextFile) ;dateiattribut
    If @error Then
    MsgBox(4096, "Error", "Konnte die Attribute nicht auslesen.")
    Exit
    EndIf
    If StringInStr($attribute, "D") <> 0 Then ;wenn unterverzeichnis
    $split = "<DIR>"
    $size = Round(DirGetSize($SelDia & "\" & $NextFile) / 1024) ;größe in kilobyte incl unterverzeichnissen
    $filename = $NextFile
    $fileicon = 0 ;das erste icon in der iconliste

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

    Else
    If StringInStr($NextFile, ".") <> 0 Then ;wenn "." im dateinamen...
    $split = StringTrimLeft($NextFile, StringInStr($NextFile, ".", 0, -1)) ;...dann endung ausgeben
    $filename = StringTrimRight($NextFile, StringLen($split) + 1)

    Else
    $split = "" ;...hat keine dateiendung
    $filename = $NextFile

    EndIf
    $fileicon = 1
    $size = Round(FileGetSize($SelDia & "\" & $NextFile) / 1024) ;dateigröße
    EndIf

    _AddRow($ListView1, $filename & "|" & $size & "|" & $split & "|" & $SelDia, $fileicon)
    ;GUICtrlCreateListViewItem ($filename & "|" & $size & "|" & $Split & "|" & $SelDia, $Handle)
    Next
    _GUICtrlListView_RegisterSortCallBack($ListView1, True, False)
    ;_GUICtrlListView_SimpleSort ($Handle, $trueorfalse, _GUICtrlListView_GetColumnCount($listview1))
    EndIf
    EndFunc ;==>_DirSelect

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

    Func _Delete($Handle, $Checked)
    $i1 = _GUICtrlListView_GetSelectedIndices($Handle, True)
    $i2 = _GUICtrlListView_GetItem($Handle, $i1[1], 0)
    $dateiname = $i2[3]
    $i3 = _GUICtrlListView_GetItem($Handle, $i1[1], 3)
    $pfad = $i3[3]
    $delfile = $pfad & "\" & $dateiname
    If $Checked = 1 Then
    If MsgBox(4, "Wirklich löschen?", "Soll die folgende Datei wirklich gelöscht werden:" & @CRLF & $delfile) = 6 Then
    FileDelete($delfile)
    _GUICtrlListView_DeleteItemsSelected($Handle)
    EndIf
    Else
    FileDelete($delfile)
    _GUICtrlListView_DeleteItemsSelected($Handle)
    EndIf
    EndFunc ;==>_Delete

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

    Func _AddRow($hWnd, $sItem, $ifile)
    Local $aItem = StringSplit($sItem, "|")
    Local $iIndex = _GUICtrlListView_AddItem($hWnd, $aItem[1], $ifile, _GUICtrlListView_GetItemCount($hWnd) + 9999)
    For $x = 2 To $aItem[0]
    _GUICtrlListView_AddSubItem($hWnd, $iIndex, $aItem[$x], $x - 1)
    Next
    EndFunc ;==>_AddRow

    [/autoit]
  • ListView sortieren

    • Andy
    • 24. Juni 2009 um 10:59

    Hallo,
    habe mir erlaubt, einiges auszubessern.

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    #include <ListBoxConstants.au3>
    #include <GUIConstantsEx.au3>
    #Include <GuiListView.au3>
    Global $SelDia

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

    #Region ### START Koda GUI section ### Form=
    $Form1_1 = GUICreate("Löschomat", 777, 447, 195, 126)
    GUISetFont(8, 800, 0, "MS Sans Serif")
    GUISetBkColor(0x878787)
    $ListView1 = GUICtrlCreateListView("Dateiname|Größ (KB)|Endung|Pfad", 0, 0, 605, 445,$LBS_EXTENDEDSEL)
    GUICtrlSendMsg(-1, 0x101E, 0, 200)
    GUICtrlSendMsg(-1, 0x101E, 1, 80)
    GUICtrlSendMsg(-1, 0x101E, 2, 70)
    GUICtrlSendMsg(-1, 0x101E, 3, 250)
    GUICtrlCreateGroup("Handlungen", 612, 4, 157, 189)
    GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
    $Button1 = GUICtrlCreateButton("Auswahl löschen", 620, 32, 143, 33)
    GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
    $Checkbox1 = GUICtrlCreateCheckbox("Löschanfrage ein/aus", 620, 168, 145, 17)
    GUICtrlSetState(-1, $GUI_CHECKED)
    GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
    $Button2 = GUICtrlCreateButton("Aktuallisieren", 620, 112, 143, 25)
    GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
    $Button3 = GUICtrlCreateButton("Ordner aufrufen", 620, 140, 143, 25)
    GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button3
    _DirSelect ($ListView1, 0)
    Case $Button1
    $Read1 = GUICtrlRead ($Checkbox1)
    If $Read1 = $GUI_CHECKED Then
    $Ch = 1
    Else
    $Ch = 0
    EndIf
    _Delete ($ListView1, $Ch)
    Case $Button2
    _DirSelect ($ListView1, 1)
    EndSwitch
    WEnd

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

    Func _DirSelect ($Handle, $Update)
    If $Update = 0 Then
    $SelDia = FileSelectFolder ("Bitte wählen Sie einen Ordner aus.", "", 4)
    EndIf
    If Not @Error Then
    _GUICtrlListView_DeleteAllItems($Handle)
    $Search = FileFindFirstFile ($SelDia & "\*.*")
    $FileCount = DirGetSize ($SelDia, 3)
    ;_arraydisplay($filecount)
    For $i = 1 To $FileCount[1] Step 1
    $NextFile = FileFindNextFile ($Search)
    $attribute=FileGetAttrib ($seldia&"\"&$nextfile) ;dateiattribut
    If @error Then
    MsgBox(4096,"Error", "Konnte die Attribute nicht auslesen.")
    Exit
    endif
    if stringinstr($attribute,"D")<>0 then ;wenn unterverzeichnis
    $split="<DIR>"
    $size=round(DirGetSize ($seldia&"\"&$nextfile)/1024) ;größe in kilobyte incl unterverzeichnissen
    else
    if stringinstr($nextfile,".")<>0 then ;wenn "." im dateinamen...
    $split= Stringtrimleft ($NextFile, stringinstr($nextfile,".",0,-1)) ;...dann endung ausgeben
    else
    $split="" ;...hat keine dateiendung
    EndIf
    $size=Round (FileGetSize ($SelDia & "\" & $NextFile) /1024) ;dateigröße
    endif

    GUICtrlCreateListViewItem ($NextFile & "|" & $size & "|" & $Split & "|" & $SelDia, $Handle)
    Next
    $trueorfalse=False
    _GUICtrlListView_SimpleSort ($Handle, $trueorfalse, _GUICtrlListView_GetColumnCount($listview1))
    EndIf
    EndFunc ;==> _DirSelect

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

    Func _Delete ($Handle, $Checked)
    $i1 = _GUICtrlListView_GetSelectedIndices ($Handle, True)
    ;_arraydisplay($i1)
    $i2 = _GUICtrlListView_GetItem ($Handle, $i1[1], 0)
    $dateiname=$i2[3]
    $i3 = _GUICtrlListView_GetItem ($Handle, $i1[1], 3)
    $pfad=$i3[3]
    $delfile=$pfad&"\"&$dateiname
    If $Checked = 1 Then
    If MsgBox (4, "Wirklich löschen?", "Soll die folgende Datei wirklich gelöscht werden:" & @CRLF &$delfile) = 6 Then
    FileDelete ($delfile)
    _GUICtrlListView_DeleteItemsSelected ($Handle)
    EndIf
    Else
    FileDelete ($delfile)
    _GUICtrlListView_DeleteItemsSelected ($Handle)
    endif
    EndFunc ;==> _Delete

    [/autoit]


    Auswahl auch mehrerer Dateien mit Shift- bzw- Ctrl-Mausklick

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™