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

Beiträge von Oscar

  • WIndows API Funktion LockFile

    • Oscar
    • 22. Januar 2010 um 18:06

    Andy: Den gleichen Fehler habe ich seinerzeit gemacht, als diese Funktion in die Beta eingeflossen ist: http://www.autoit.de/index.php?page=Thread&postID=97821#post97821 :rolleyes:

  • Gibt es eine SoundGetWaveVolume() func.?

    • Oscar
    • 22. Januar 2010 um 17:55

    Ich denke, Du meinst diese Funktion:

    Spoiler anzeigen
    [autoit]


    MsgBox(0,0,_SoundGetWaveVolume())

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

    Func _SoundGetWaveVolume()
    Local $WaveVol = -1, $p, $ret
    Local Const $MMSYSERR_NOERROR = 0
    $p = DllStructCreate('dword')
    If @error Then Return SetError(2, 0, -2)
    $ret = DllCall('winmm.dll', 'long', 'waveOutGetVolume', 'long', -1, 'long', DllStructGetPtr($p))
    If ($ret[0] == $MMSYSERR_NOERROR) Then
    $WaveVol = Round(Dec(StringRight(Hex(DllStructGetData($p, 1), 8), 4)) / 0xFFFF * 100)
    Else
    SetError(1)
    EndIf
    $p = 0
    Return $WaveVol
    EndFunc ;==>_SoundGetWaveVolume

    [/autoit]


    Allerdings funktioniert sie nicht unter Win7 (64 Bit). Dort wird immer "100" ausgegeben. Ich bin noch auf der Suche nach einer Alternative...

  • Kopieren des Temp Ordners in ein anderen Ordner mit Hilfe von DirCopy unter Windows 7

    • Oscar
    • 22. Januar 2010 um 08:11

    Ok, vielleicht Verständnisproblem, aber wenn ich den gesamten AutoIt-Ordner (wie in Deinem Beispiel) kopieren will, dann möchte ich doch auch den AutoIt-Ordner selbst als Verzeichnis im Zielverzeichnis haben.
    Ich bin mir jetzt nicht 100%ig sicher, aber war das in den alten AutoIt-Versionen nicht anders?

    Dann müsste man ja immer erst das Verzeichnis (Beispiel: AutoIt) im Zielverzeichnis erstellen. Für mich ist das irgendwie ein Widerspruch zu:

    Zitat

    If the destination directory structure doesn't exist, it will be created (if possible).

    Und wenn das Verzeichnis leer ist, wird es gar nicht kopiert/erstellt. Ich müsste also vorher feststellen, ob das Verzeichnis leer ist und es dann mit DirCreate erstellen. :(

    Bezüglich des kopierens der Datei in dem Ordner, siehe den Edit meines letzten Postings. :sleeping:

  • Kopieren des Temp Ordners in ein anderen Ordner mit Hilfe von DirCopy unter Windows 7

    • Oscar
    • 22. Januar 2010 um 01:34

    Es scheint so, als wäre das ein Bug in DirCopy.

    Ich habe eben folgendes ausprobiert:

    [autoit]


    $ret = DirCopy('d:\temp\BluetoothBTW', 'e:\hallo', 1)
    ConsoleWrite($ret & @CRLF)

    [/autoit]


    Der Ordner "BluetoothBTW" existiert und in dem befindet sich ein weiterer Ordner namens "BTW_6.2.1.0100" und darin befinden sich dann noch mehrere Dateien und noch einige Ordner.
    Obiges Script liefert "1" zurück, aber im Verzeichnis "e:\hallo" wird nicht das Verzeichnis "BluetoothBTW" erstellt, sondern der Ordner "BTW_6.2.1.0100" und alle Dateien und Ordner, die sich in diesem befinden, werden kopiert.
    Edit: Dieser Teil stimmt nicht: Eine Datei, die sich direkt in "BluetoothBTW" befindet (Pfad: "d:\temp\BluetoothBTW\test.bmp") wird hingegen nicht kopiert. Das lag vermutlich an der späten Uhrzeit und meiner daher schon eingeschränkten Wahrnehmung. :sleeping:
    Nächster Test mit dem gleichen Pfad, dieses mal jedoch mit einem leeren Ordner "d:\temp\BluetoothBTW". Das Script liefert auch dieses mal eine "1" zurück, aber das Verzeichnis "BluetoothBTW" wird auch hier nicht im Zielverzeichnis erstellt.

    Ich habe absichtlich nicht @TempDir gewählt, um evtl. Berechtigungen auszuschließen. Das hat aber offensichtlich auch nichts damit zu tun, weil der Fehler ebenso unter WinXP auftritt.

    Getestest mit: "Win7, 64 Bit" und "WinXP, 32 Bit"
    AutoIt-Version: v3.3.4.0

    Vielleicht kann das mal jemand mit besseren Englischkenntnissen als Bugmeldung abgeben.

  • standartbrowser bestimmen?

    • Oscar
    • 20. Januar 2010 um 17:29

    Oh, mann! Hast aber 'ne Leiche ausgebuddelt. :D

    Nimm lieber "HKEY_CURRENT_USER\Software\Classes\http\shell\open\command", dann bekommst Du den Pfad vom gerade angemeldeten User.

    Das geht übrigens auch als Einzeiler:

    [autoit]


    MsgBox(0,0,_GetStandardBrowser())

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

    Func _GetStandardBrowser()
    Return StringRegExpReplace(RegRead('HKEY_CURRENT_USER\Software\Classes\http\shell\open\command', ''), '.+\\(.+)\.exe.+', '$1')
    EndFunc

    [/autoit]

    Und vor allem: Standard bitte!

  • Hilfe "Open this Script" funkt. nicht mehr

    • Oscar
    • 20. Januar 2010 um 16:59

    Hmm...das ist ja eigenartig...
    Hast Du beim Installieren angeben, dass die .au3-Dateien ausgeführt (run) oder in SciTE angezeigt (edit) werden sollen?
    Ich benutze immer "edit", vielleicht ist das der Grund?
    Ansonsten fällt mir auch nichts mehr ein. Müsste sich mal einer mit Vista zu Wort melden.

  • Treeview FileExplorer

    • Oscar
    • 20. Januar 2010 um 16:22

    Ich habe jetzt zumindest die Laufwerk-Icons eingebaut. Außerdem noch etwas an der Geschwindigkeit verbessert. Neue Version in Post#1.

  • Wie nur Dateien mit heutigen Datum kopieren?

    • Oscar
    • 20. Januar 2010 um 16:13

    Naja, sind nur ein paar Zeilen:

    Spoiler anzeigen
    [autoit]


    $sSourceDir = 'c:\temp\' ; alle Dateien aus diesem Verzeichnis
    $sDestDir = 'd:\temp\' ; in dieses Verzeichnis kopieren
    $aFileList = _FileListToArray($sSourceDir, '*', 1)
    If Not IsArray($aFileList) Then Exit
    For $i = 1 To $aFileList[0]
    If StringLeft(FileGetTime($sSourceDir & $aFileList[$i], 0, 1), 8) = @YEAR & @MON & @MDAY Then
    FileCopy($sSourceDir & $aFileList[$i], $sDestDir)
    EndIf
    Next

    [/autoit]
  • WinFlash() blinken bis Fenster offen

    • Oscar
    • 20. Januar 2010 um 15:02

    Pack das WinFlash in eine Funktion und rufe sie Timergesteuert auf. Entweder mit _Timer_SetTimer oder mit AdlibRegister.

  • Hilfe "Open this Script" funkt. nicht mehr

    • Oscar
    • 20. Januar 2010 um 14:58

    Naja, ich habe Win7, aber es funktioniert alles (auch ohne Adminrechte). :)
    Die von Dir beschriebene Fehlermeldung kenne ich aber auch nur, wenn die Pfade nicht stimmen, sprich: Du hast die Hilfedatei nicht im AutoIt-Verzeichnis oder Du hast die Beispieldateien nicht (oder nicht richtig) installiert.

  • PC Gehäuse-Lüfter

    • Oscar
    • 20. Januar 2010 um 13:18

    Hmm...da ist was dran...
    Demzufolge müsste ich mir jetzt ein paar Nanoxia FX zulegen. :D

  • Wie: Text suchen zwischen zwei Textstellen

    • Oscar
    • 20. Januar 2010 um 13:14

    Oder so:

    [autoit]


    $string= '<td><select name="country" onchange="__doPostBack("country","")" language="javascript" id="country"> <option value="-1">Please Select</option> <option value="1">Afghanistan</option> <option value="2">Albania</option> <option value="3">Algeria</option> <option value="4">American Samoa</option> ..... da sind noch mehrere Länder aufgeführt.... <option value="82">Georgia</option> <option selected="selected" value="83">Germany</option> <option value="84">Ghana</option>'
    $select = StringRegExpReplace($string, '(?s).+<option selected="selected" value=".*?">(.+?)<\/option>.*', '$1')
    MsgBox(0, 0, $select)

    [/autoit]
  • Verhindern, daß das Script zweimal zur gleichen Zeit läuft

    • Oscar
    • 20. Januar 2010 um 11:53

    Schau Dir mal _Singleton() in der Hilfe an.
    Von SciTE aus kannst Du das Script aber sowieso nur einmal starten. Also entweder den Interpreter von Hand starten und dort das Script angeben oder das Script erst compilieren und dann starten.

  • PC Gehäuse-Lüfter

    • Oscar
    • 20. Januar 2010 um 08:33

    Uh! Noiseblocker nicht gut? Na dann, werden wohl bald wieder neue fällig...

    Aber die Nanoxia und Xigmatek kommen mal mit auf meine Liste. :thumbup:

  • Slider mit Prozent/Zahlenangabe

    • Oscar
    • 20. Januar 2010 um 08:23

    Na dann aber mit WM_HSCROLL:

    Spoiler anzeigen
    [autoit]


    #include <StructureConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

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

    #Region ### START Koda GUI section ### Form=e:\dokumente und einstellungen\phfroherz\eigene dateien\koda forms\tools.kxf
    $Tools = GUICreate("Tools", 594, 454, 466, 353)
    $Tab1 = GUICtrlCreateTab(16, 16, 569, 425)
    GUICtrlSetResizing(-1, $GUI_DOCKWIDTH + $GUI_DOCKHEIGHT)
    $TabSheet1 = GUICtrlCreateTabItem("Inventar Verkaufen")
    $hSlider = GUICtrlCreateSlider(152, 240, 310, 45)
    GUICtrlSetLimit(-1, 50, 0)
    $verkaufen = GUICtrlCreateButton("Verkaufen", 272, 344, 75, 25, 0)
    $slots = GUICtrlCreateLabel(GUICtrlRead($hSlider), 288, 288, 27, 17)
    GUICtrlCreateTabItem("")
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###
    GUIRegisterMsg($WM_HSCROLL, "_WM_HSCROLL")
    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

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

    Func _WM_HSCROLL($hWnd, $Msg, $wParam, $lParam)
    Local $nID
    $nID = BitAND($wParam, 0x0000FFFF)
    If $nID = $hSlider Then GUICtrlSetData($slots, GUICtrlRead($hSlider))
    Return $GUI_RUNDEFMSG
    EndFunc ;==>_WM_HSCROLL

    [/autoit]
  • Treeview FileExplorer

    • Oscar
    • 19. Januar 2010 um 19:34

    Das mit den Dateisymbolen habe ich schon versucht, aber das auslesen aus den Dateien dauert zu lange.
    Hier mal mein Versuch:

    Spoiler anzeigen
    [autoit]


    #include <StructureConstants.au3>
    #include <GuiImageList.au3>
    #include <TreeViewConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <GuiTreeView.au3>
    #include <File.au3>

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

    $sPath = 'C:'

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

    $hGui = GUICreate('Select File or Folder', 400, 400)
    $hTreeview = GUICtrlCreateTreeView(10, 10, 380, 360, BitOR($TVS_HASBUTTONS, $TVS_HASLINES, $TVS_DISABLEDRAGDROP, $TVS_SHOWSELALWAYS))
    $hWndTreeview = GUICtrlGetHandle($hTreeview)
    $hOk = GUICtrlCreateButton('Ok', 240, 375, 60, 22)
    $hCancel = GUICtrlCreateButton('Cancel', 320, 375, 60, 22)

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

    $hImage = _GUIImageList_Create(16, 16, 5, 3)
    _GUIImageList_AddIcon($hImage, 'shell32.dll', 4)
    _GUIImageList_AddIcon($hImage, 'shell32.dll', 1)
    _GUICtrlTreeView_SetNormalImageList($hTreeview, $hImage)

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

    GUISetState()
    GUICtrlSetStyle($hTreeview, Default, $WS_EX_COMPOSITED + $WS_EX_CLIENTEDGE)

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

    $hRoot = _GUICtrlTreeView_Add($hTreeview, $hTreeview, $sPath, 0, 0)
    _GUICtrlTreeView_SetState($hTreeview, $hRoot, $TVIS_EXPANDED)

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

    _GUICtrlTreeView_BeginUpdate($hTreeview)
    GUISetCursor(15, 1, $hGui)
    _GUICtrlTreeView_FileExplorerRecursive($hTreeview, $hRoot, $sPath, 2)
    GUISetCursor(2, 1, $hGui)
    _GUICtrlTreeView_EndUpdate($hTreeview)

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

    GUIRegisterMsg($WM_NOTIFY, '_WM_NOTIFY')
    While True
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE, $hCancel
    Exit
    Case $hOk
    _GUIImageList_Destroy($hImage)
    $iSelect = _GUICtrlTreeView_GetSelection($hTreeview)
    $sTree = StringReplace(_GUICtrlTreeView_GetTree($hTreeview, $iSelect), '|', '\')
    MsgBox(0, 'Selected Path/File', $sTree)
    EndSwitch
    WEnd

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

    Func _WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
    #forceref $hWnd, $iMsg, $iwParam
    GUIRegisterMsg($WM_NOTIFY, '')
    Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR
    $tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
    $hWndFrom = HWnd(DllStructGetData($tNMHDR, 'hWndFrom'))
    $iCode = DllStructGetData($tNMHDR, 'Code')
    If $hWndFrom = $hWndTreeview And $iCode = $NM_CLICK Then
    ToolTip('Please wait...', Default, Default, 'Read Directory', 1)
    _GUICtrlTreeView_FileExplorer($hGui, $hTreeview)
    ToolTip('')
    EndIf
    GUIRegisterMsg($WM_NOTIFY, '_WM_NOTIFY')
    Return $GUI_RUNDEFMSG
    EndFunc ;==>_WM_NOTIFY

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

    Func _GUICtrlTreeView_FileExplorer($hGui, $hTreeview)
    Local $aTVPos, $aPos, $hItem, $hChild, $sTree
    $aTVPos = ControlGetPos($hGui, '', $hTreeview)
    $aPos = GUIGetCursorInfo($hGui)
    $hItem = _GUICtrlTreeView_HitTestItem($hTreeview, $aPos[0], $aPos[1] - $aTVPos[1])
    If _GUICtrlTreeView_GetExpanded($hTreeview, $hItem) Then Return
    $hChild = _GUICtrlTreeView_GetFirstChild($hTreeview, $hItem)
    _GUICtrlTreeView_BeginUpdate($hTreeview)
    If $hChild <> 0 Then
    $sTree = StringReplace(_GUICtrlTreeView_GetTree($hTreeview, $hChild), '|', '\')
    _GUICtrlTreeView_DeleteChildren($hTreeview, $hChild)
    _GUICtrlTreeView_FileExplorerRecursive($hTreeview, $hChild, $sTree, 1)
    EndIf
    Do
    $hChild = _GUICtrlTreeView_GetNextChild($hTreeview, $hChild)
    If $hChild <> 0 Then
    $sTree = StringReplace(_GUICtrlTreeView_GetTree($hTreeview, $hChild), '|', '\')
    _GUICtrlTreeView_DeleteChildren($hTreeview, $hChild)
    $iTimer = TimerInit()
    _GUICtrlTreeView_FileExplorerRecursive($hTreeview, $hChild, $sTree, 1)
    EndIf
    Until $hChild = 0
    _GUICtrlTreeView_EndUpdate($hTreeview)
    EndFunc ;==>_GUICtrlTreeView_FileExplorer

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

    Func _GUICtrlTreeView_FileExplorerRecursive($hTreeview, $hItem, $sPath, $iRec)
    Local $aDirList, $aFileList, $tmp, $hIcon
    $iRec -= 1
    $aDirList = _FileListToArray($sPath, '*', 2)
    If IsArray($aDirList) Then
    For $i = 1 To $aDirList[0]
    If Not StringInStr(FileGetAttrib($sPath & '\' & $aDirList[$i]), 's') Then
    $tmp = _GUICtrlTreeView_AddChild($hTreeview, $hItem, $aDirList[$i], 0, 0)
    If $iRec > 0 Then _GUICtrlTreeView_FileExplorerRecursive($hTreeview, $tmp, $sPath & '\' & $aDirList[$i], $iRec)
    EndIf
    Next
    EndIf
    $aFileList = _FileListToArray($sPath, '*', 1)
    If IsArray($aFileList) Then
    For $i = 1 To $aFileList[0]
    If Not StringInStr(FileGetAttrib($sPath & '\' & $aFileList[$i]), 's') Then
    $hIcon = _GUIImageList_AddIcon($hImage, $sPath & '\' & $aFileList[$i], 0) ; <-- von hier
    If $hIcon = 0 Then
    $hIcon = 1
    Else
    _GUICtrlTreeView_SetNormalImageList($hTreeview, $hImage) ; <-- bis hier
    EndIf
    $tmp = _GUICtrlTreeView_AddChild($hTreeview, $hItem, $aFileList[$i], $hIcon, $hIcon)
    EndIf
    Next
    EndIf
    EndFunc ;==>_GUICtrlTreeView_FileExplorerRecursive

    [/autoit]


    Oder kennst Du eine schnellere Methode?
    Weil so ist das nicht wirklich brauchbar. :S

  • Indexsuche

    • Oscar
    • 19. Januar 2010 um 12:35

    Wie soll das jemand nachvollziehen können?
    Poste bitte Dein ganzes Script und die "S2.dat" oder eine entsprechende Beispieldatei, wenn da private Dinge drin stehen.
    Wenn wir raten sollen, ist weder uns noch Dir geholfen...

  • Einstellunge bzw Konfigurationen speichern

    • Oscar
    • 19. Januar 2010 um 12:30

    Ja, immer im WorkingDir, aber das kann sich ändern und entspricht dann nicht mehr dem ScriptDir.
    Verwende also lieber @ScriptDir & "\konfig.ini" (wichtig ist der Backslash vor dem Dateinamen).

  • Indexsuche

    • Oscar
    • 19. Januar 2010 um 12:16

    Eine Indexsuche würde ich so programmieren:

    Spoiler anzeigen
    [autoit]


    #include <Array.au3>
    #include <EditConstants.au3>
    #include <File.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    $sPath = StringRegExpReplace(@AutoItExe, '(.+\\).+', '$1') & 'Include\'
    $aFiles = _FileListToArray($sPath, '*.au3', 1)
    $hGui = GUICreate('Indexsearch', 400, 300)
    $hInput = GUICtrlCreateInput('', 10, 10, 380, 20)
    $hFound = GUICtrlCreateInput('', 10, 60, 380, 20, $ES_READONLY)
    GUICtrlSetBkColor(-1, 0xffaaaa)
    GUISetState()
    GUIRegisterMsg($WM_COMMAND, '_WM_COMMAND')
    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE

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

    Func _WM_COMMAND($hWnd, $Msg, $wParam, $lParam)
    Local $nID, $sSearch, $iIndex
    $nID = BitAND($wParam, 0x0000FFFF)
    If $nID = $hInput Then
    $sSearch = GUICtrlRead($hInput)
    $iIndex = _ArraySearch($aFiles, $sSearch, 0, 0, 0, 1)
    If Not @error Then
    GUICtrlSetData($hFound, $aFiles[$iIndex])
    GUICtrlSetBkColor($hFound, 0xaaffaa)
    Else
    GUICtrlSetData($hFound, '')
    GUICtrlSetBkColor($hFound, 0xffaaaa)
    EndIf
    EndIf
    Return $GUI_RUNDEFMSG
    EndFunc

    [/autoit]
  • Treeview FileExplorer

    • Oscar
    • 19. Januar 2010 um 08:25

    @kleiner27: Warum so kompliziert? Gibt doch einen AutoIt-Befehl dazu:

    [autoit]


    $aDrives = DriveGetDrive('ALL')
    _ArrayDisplay($aDrives)

    [/autoit]

    autoBert: Der Unterschied zu _GUICtrlTreeView_CreateDirectory() ist ja der, dass _GUICtrlTreeView_FileExplorer() die Daten nicht alle auf einmal einliest, sondern am Anfang zwei Verzeichnisebenen und anschließend (immer dann, wenn Du auf einen Plus-Button klickst) eine weitere Ebene. Das ist für den Anwender angenehmer, weil er eher den Verzeichnisbaum zu sehen bekommt und schneller darin navigieren kann. Das man dann, wenn ein Ordner viele Unterordner und Dateien enthält (wie beispielsweise das Windows-Verzeichnis), nochmal etwas warten muss, ist der Nachteil dieser Methode. :huh:

    nuts: Hast Du Dir die neue _FileListToArray-Funktion mal angesehen? Die arbeitet nicht mehr mit ReDims. Ich denke nicht, dass man da noch viel mehr rausholen kann.
    Die Funktion von Prog@ndy ist nicht schlecht, aber ja auch kein echtes TreeView.

    @Ludwig: Die Dateiicons einzulesen kostet aber enorm Zeit und da muss man in AutoIt schon Kompromisse machen.


    Edit: Ok, es geht noch etwas schneller, wenn man das Ganze nicht zweimal einliest, sondern alles in eine Schleife packt:

    Spoiler anzeigen
    [autoit]


    #include <StructureConstants.au3>
    #include <GuiImageList.au3>
    #include <TreeViewConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <GuiTreeView.au3>
    #include <File.au3>

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

    $sPath = 'c:'

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

    $hGui = GUICreate('Select File or Folder', 400, 400)
    $hTreeview = GUICtrlCreateTreeView(10, 10, 380, 360, BitOR($TVS_HASBUTTONS, $TVS_HASLINES, $TVS_DISABLEDRAGDROP, $TVS_SHOWSELALWAYS))
    $hWndTreeview = GUICtrlGetHandle($hTreeview)
    $hOk = GUICtrlCreateButton('Ok', 240, 375, 60, 22)
    $hCancel = GUICtrlCreateButton('Cancel', 320, 375, 60, 22)

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

    $hImage = _GUIImageList_Create(16, 16, 5, 3)
    _GUIImageList_AddIcon($hImage, 'shell32.dll', 1)
    _GUIImageList_AddIcon($hImage, 'shell32.dll', 4)
    _GUICtrlTreeView_SetNormalImageList($hTreeview, $hImage)

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

    GUISetState()
    GUICtrlSetStyle($hTreeview, Default, $WS_EX_COMPOSITED + $WS_EX_CLIENTEDGE)

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

    $hRoot = _GUICtrlTreeView_Add($hTreeview, $hTreeview, $sPath, 1, 1)
    _GUICtrlTreeView_SetState($hTreeview, $hRoot, $TVIS_EXPANDED)

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

    _GUICtrlTreeView_BeginUpdate($hTreeview)
    GUISetCursor(15, 1, $hGui)
    _GUICtrlTreeView_FileExplorerRecursive($hTreeview, $hRoot, $sPath, 2)
    GUISetCursor(2, 1, $hGui)
    _GUICtrlTreeView_EndUpdate($hTreeview)

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

    GUIRegisterMsg($WM_NOTIFY, '_WM_NOTIFY')
    While True
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE, $hCancel
    Exit
    Case $hOk
    $iSelect = _GUICtrlTreeView_GetSelection($hTreeview)
    $sTree = StringReplace(_GUICtrlTreeView_GetTree($hTreeview, $iSelect), '|', '\')
    MsgBox(0, 'Selected Path/File', $sTree)
    EndSwitch
    WEnd

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

    Func _WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
    #forceref $hWnd, $iMsg, $iwParam
    GUIRegisterMsg($WM_NOTIFY, '')
    Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR
    $tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
    $hWndFrom = HWnd(DllStructGetData($tNMHDR, 'hWndFrom'))
    $iCode = DllStructGetData($tNMHDR, 'Code')
    If $hWndFrom = $hWndTreeview And $iCode = $NM_CLICK Then
    ToolTip('Please wait...', Default, Default, 'Read Directory', 1)
    _GUICtrlTreeView_FileExplorer($hGui, $hTreeview)
    ToolTip('')
    EndIf
    GUIRegisterMsg($WM_NOTIFY, '_WM_NOTIFY')
    Return $GUI_RUNDEFMSG
    EndFunc ;==>_WM_NOTIFY

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

    Func _GUICtrlTreeView_FileExplorer($hGui, $hTreeview)
    Local $aTVPos, $aPos, $hItem, $hChild, $sTree
    $aTVPos = ControlGetPos($hGui, '', $hTreeview)
    $aPos = GUIGetCursorInfo($hGui)
    $hItem = _GUICtrlTreeView_HitTestItem($hTreeview, $aPos[0], $aPos[1] - $aTVPos[1])
    If _GUICtrlTreeView_GetExpanded($hTreeview, $hItem) Then Return
    $hChild = _GUICtrlTreeView_GetFirstChild($hTreeview, $hItem)
    _GUICtrlTreeView_BeginUpdate($hTreeview)
    If $hChild <> 0 Then
    $sTree = StringReplace(_GUICtrlTreeView_GetTree($hTreeview, $hChild), '|', '\')
    _GUICtrlTreeView_DeleteChildren($hTreeview, $hChild)
    _GUICtrlTreeView_FileExplorerRecursive($hTreeview, $hChild, $sTree, 1)
    EndIf
    Do
    $hChild = _GUICtrlTreeView_GetNextChild($hTreeview, $hChild)
    If $hChild <> 0 Then
    $sTree = StringReplace(_GUICtrlTreeView_GetTree($hTreeview, $hChild), '|', '\')
    _GUICtrlTreeView_DeleteChildren($hTreeview, $hChild)
    $iTimer = TimerInit()
    _GUICtrlTreeView_FileExplorerRecursive($hTreeview, $hChild, $sTree, 1)
    EndIf
    Until $hChild = 0
    _GUICtrlTreeView_EndUpdate($hTreeview)
    EndFunc ;==>_GUICtrlTreeView_FileExplorer

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

    Func _GUICtrlTreeView_FileExplorerRecursive($hTreeview, $hItem, $sPath, $iRec)
    Local $aDirList, $aFileList, $tmp
    $iRec -= 1
    If StringRight($sPath, 1) <> '\' Then $sPath &= '\'
    $hSearch = FileFindFirstFile($sPath & '*.*')
    If $hSearch <> -1 Then
    While True
    $sFile = FileFindNextFile($hSearch)
    If @error Then ExitLoop
    If @extended Then
    If Not StringInStr(FileGetAttrib($sPath & $sFile), 's') Then
    $tmp = _GUICtrlTreeView_AddChild($hTreeview, $hItem, $sFile, 1, 1)
    If $iRec > 0 Then _GUICtrlTreeView_FileExplorerRecursive($hTreeview, $tmp, $sPath & $sFile, $iRec)
    EndIf
    Else
    If Not StringInStr(FileGetAttrib($sPath & $sFile), 's') Then
    _GUICtrlTreeView_AddChild($hTreeview, $hItem, $sFile, 0, 0)
    EndIf
    EndIf
    WEnd
    FileClose($hSearch)
    EndIf
    EndFunc ;==>_GUICtrlTreeView_FileExplorerRecursive

    [/autoit]

    Aber dann ist die Sortierung auch eine andere (Vorher: erst die Verzeichnisse, dann die Dateien. Jetzt: Verzeichnisse und Dateien gemischt). Tja, wohl eine Geschmacksfrage... :rolleyes:

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™