• Offizieller Beitrag

    Die neue Version bringt eine Unterstützung für 7z mit. Damit lassen sich markierte Einträge (Verzeichnisse/Dateien) packen (als ZIP- oder 7z-Archiv) und die genannten Archive lassen sich auch wieder entpacken.
    Die Consolenversion von 7z habe ich beigepackt (im Verzeichnis: "7-zip").

    Noch eine Neuerung ist der Aufruf des Eigenschaftendialogs von Windows. Wenn dort aber Änderungen vorgenommen werden, muss das Verzeichnis neu eingelesen werden. Mir ist noch keine Möglichkeit eingefallen, wie man im Skript auf diese Änderungen reagieren kann. Falls da jemand etwas weiss, bitte melden!

    Außerdem wird bei Netzwerkpfaden nun die entsprechende LAN-IP angezeigt.

    Neue Version in Post #1.

  • Hi Oscar!


    Für dein Eigenschaftsanligen o. für andere Veränderungen am Vezeichnis/Datei!

    Spoiler anzeigen
    [autoit]

    ;######### FindFirstChangeNotification Funktion
    Global Const $FILE_NOTIFY_CHANGE_FILE_NAME = 0x00000001; Jede Datei Namensänderung im überwachten Verzeichnis oder Teilbaum
    Global Const $FILE_NOTIFY_CHANGE_DIR_NAME = 0x00000002; Jedes Verzeichnis-Namen ändern in den überwachten Verzeichnis oder Teilbaum
    Global Const $FILE_NOTIFY_CHANGE_ATTRIBUTES = 0x00000004; Jedes Attribut ändern im überwachten Verzeichnis oder Teilbaum
    Global Const $FILE_NOTIFY_CHANGE_SIZE = 0x00000008; Jede Datei-Größe ändern im überwachten Verzeichnis oder Teilbaum
    Global Const $FILE_NOTIFY_CHANGE_LAST_WRITE = 0x00000010; Jede Änderung des letzten Schreib-Zeit von Dateien in den überwachten Verzeichnis oder Teilbaum
    Global Const $FILE_NOTIFY_CHANGE_SECURITY = 0x00000100; Jede sicherheitsrelevante Deskriptor Änderung der überwachten Verzeichnis oder Teilbaum
    Global Const $FILE_NOTIFY_CHANGE_All = BitOR(0x00000001, 0x00000002, 0x00000004, 0x00000008, 0x00000010, 0x00000100)

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

    ;######### WaitForSingleObjectEx Funktion
    Global Const $WAIT_ABANDONED = 0x00000080; Das angegebene Objekt ist ein Mutex-Objekt
    Global Const $WAIT_IO_COMPLETION = 0x000000C0; beendet durch einen oder mehrere Benutzer
    Global Const $WAIT_OBJECT_0 = 0x00000000; Der Zustand der angegebenen Objekt signalisiert wird.
    Global Const $WAIT_TIMEOUT = 0x00000102; Die Timeoutintervall verstrichen ist, und den Zustand des Objekts wird nicht signalisiert.
    Global Const $WAIT_FAILED = 0xFFFFFFFF; Die Funktion ist fehlgeschlagen.

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

    ;Local $Ewee = _WinAPI_FindFirstChangeNotification('D:\', True, $FILE_NOTIFY_CHANGE_All)
    ;WaitForSingleObject($Ewee)

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

    Func _WinAPI_FindFirstChangeNotification($lpPathName, $bWatchSubtree = 0, $dwNotifyFilter = 1)
    Local $aRe1 = DllCall('Kernel32.dll', 'ptr', 'FindFirstChangeNotificationW', 'wstr', $lpPathName, 'bool', $bWatchSubtree, 'dword', $dwNotifyFilter)
    If @error Or $aRe1[0] = -1 Then Return SetError(1, @error, -1)
    Return $aRe1[0]
    EndFunc ;==>_WinAPI_FindFirstChangeNotification

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

    Func WaitForSingleObject($hWnd, $sTime = -1)
    Local $aRe1 = DllCall('Kernel32.dll', 'dword', 'WaitForSingleObject', 'ptr', $hWnd, 'dword', $sTime)
    If @error Then Return SetError(1, @error, -2)
    ;ConsoleWrite($aRe1[0] & ' ' & $aRe1[1] & ' ' & $aRe1[2] & @CRLF)
    Return $aRe1[1]
    EndFunc ;==>WaitForSingleObject

    [/autoit]

    der nachteil das Sktipt wird pausiert, mit ein paar Ideen kannst du das einbaun.

    Lg Kleiner

    • Offizieller Beitrag

    Es gibt wieder eine neue Version (siehe Post #1).

    Kopieren/Verschieben via Drag&Drop zwischen den Dateilisten funktioniert nun. Man kann das Datei-/Verzeichnisdatum ändern (noch ein GUI-Fenster :) ).
    Man kann außerdem einen externen Hex-Editor einbinden (ich bevorzuge da den Freeware-Editor: HxD).
    Und einige Kleinigkeiten mehr. Den Screenshot habe ich auch mal mit der neuen Version gemacht.

  • Bis jetzt noch keinen Bug entdeckt.
    Aber eine nette Funktion wäre noch die Vorschau oder Miniaturansicht im Zusammenhang mit Bildern ;)

  • Wow wird immer besser, Respekt :D

    Meine Vorschläge
    - Laufwerkssymbol.
    In Zeile 1680 könntest du folgendes einfügen

    Spoiler anzeigen
    [autoit]

    $lw_symbol = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\DriveIcons\" & StringLeft($sDrive, 1) & "\DefaultIcon", "")
    $hImage = _GUIImageList_Create(20, 20, 5, 3, 1)
    $split_tmp = StringSplit($lw_symbol, ",")
    $lw_datei = $split_tmp[1]
    If UBound($split_tmp) = 3 Then
    $lw_id = $split_tmp[2]
    Else
    $lw_id = 0
    EndIf
    _GUIImageList_AddIcon($hImage, $lw_datei, $lw_id, True)
    _GUICtrlButton_SetImageList($ahDriveButtons[$i - 1][0], $hImage)

    [/autoit]


    - Zusätzliche Fenster mit der Ordnerstruktur.
    - Beim kopieren, sollte es noch die Option geben "Kopieren und umbenennen"
    - Das kopieren innerhalb einer Fensterhälfte sollte wie im Explorer mit der Strg-Taste + Maustaste funktionieren
    - Zu dem ändern des Dateidatums, könnte auch das Exifdatum geändert werden

    Kannst schauen was du einbauen kannst :thumbup:

  • Hallo Oscar

    zuerst mal ein grosses Kompliment für die Entwicklung des "FileCommanders". Ich benutze schon seit Jahren den TotalCommander. In der kurzen Zeit hat der Filecommander schon sehr viele Funktionen erhalten. Ich bin wirklich beeindruckt von den Möglichkeiten von AutoIt. (wenn man sie nutzen kann :thumbup: ).

    Wird es in Zukunft auch eine Unterstützung von Tastenkombinationen geben (z.b Kopieren, Verzeichnisse erstellen, Auswahl des Laufwerks, Verzeichnisswechsel etc.) oder ist das mit AutoIt nicht so einfach zu lösen?


    Gruss
    johny

  • Komisch, unter XP werden bei mir keine Laufwerkssymbole angezeigt. Unter Win 7 allerdings schon.

    Wenn du den Bereich mit den Icons so änderst, dann werde falls vorhanden die individuellen Laufwerkssymbole verwendet.
    Sind diese nicht da, so werden deine Symbole verwendet
    Dies funktioniert unter Win XP und Win 7 :thumbup:

    Spoiler anzeigen
    [autoit]

    For $i = 1 To $aDrives[0]
    $sDrive = StringUpper($aDrives[$i])
    $ahDriveButtons[$i - 1][0] = GUICtrlCreateButton($sDrive, 2 + ($i - 1) * 26, 1, 26, 29)
    GUICtrlSetFont(-1, 9)
    GUICtrlSetOnEvent(-1, '_ReadDriveLeft')
    GUICtrlSetResizing(-1, $GUI_DOCKHEIGHT)
    Switch DriveGetType($sDrive)
    Case 'Removable'
    $sDriveIcon = 'removable.ico'
    If $sDrive = 'A:' Or $sDrive = 'B:' Then $sDriveIcon = 'floppy.ico'
    Case 'Fixed'
    $sDriveIcon = 'hdd.ico'
    Case 'CDROM'
    $sDriveIcon = 'cdrom.ico'
    Case 'Network'
    $sDriveIcon = 'workgroup.ico'
    Case 'Unknown'
    $sDriveIcon = 'unknown.ico'
    EndSwitch
    $lw_symbol = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\DriveIcons\" & StringLeft($sDrive, 1) & "\DefaultIcon", "")
    $hImage = _GUIImageList_Create(20, 20, 5, 3, 1)
    $split_tmp = StringSplit($lw_symbol, ",")
    $lw_datei = $split_tmp[1]
    If UBound($split_tmp) = 3 Then
    $lw_id = $split_tmp[2]
    Else
    $lw_id = 0
    EndIf
    If $lw_symbol = "" Then
    _GUIImageList_AddIcon($hImage, $sIconDir & $sDriveIcon, 0, True)
    Else
    _GUIImageList_AddIcon($hImage, $lw_datei, $lw_id, True)
    EndIf
    _GUICtrlButton_SetImageList($ahDriveButtons[$i - 1][0], $hImage)
    $sTmpContext = GUICtrlCreateContextMenu($ahDriveButtons[$i - 1][0])
    GUICtrlCreateMenuitem('Eigenschaften', $sTmpContext)
    GUICtrlSetOnEvent(-1, '_DriveProperties')
    Next

    [/autoit]
  • Es funktioniert korrekt.
    Mit ALT + Buchstabe kann ich die gewünschten Funktionen ausführen. Wird es auch eine Möglichkeit geben diese Vorgänge mit den Funktionstasten auszuführen. z.b F5 für Kopieren oder F7 für Verzeichnis erstellen oder ALT + F1 für die Laufwerksauswahl?

  • @johny: Mit den von mir genannten Funktionen lässt sich das einbauen.

    Oscar : Mit x64 gibt es ein paar Proboeme. Fixes:

    [autoit]

    Global Const $tagSHFILEINFO = 'ptr hIcon; int iIcon; DWORD dwAttributes; CHAR szDisplayName[255]; CHAR szTypeName[80];'

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

    ; Author: progandy (http://www.autoit.de)
    Func _WinAPI_SHGetFileInfo($pszPath, $dwFileAttributes, $psfi, $cbFileInfo, $uFlags)
    Local $return = DllCall("shell32.dll", "dword_ptr", "SHGetFileInfo", "str", $pszPath, "DWORD", $dwFileAttributes, "ptr", $psfi, "UINT", $cbFileInfo, "UINT", $uFlags)
    If @error Then Return SetError(@error, 0, 0)
    Return $return[0]
    EndFunc ;==>_WinAPI_SHGetFileInfo

    [/autoit]
    • Offizieller Beitrag

    johny1099: Die Tasten für die Buttons funktionieren doch bereits (jeweils [ALT] und der unterstrichene Buchstabe).

    @progandy: Als X64 gibt es sowieso Probleme. Lass mal das "#AutoIt3Wrapper_UseX64=n" weg und mach einen Doppelklick auf einen Listview-Eintrag. Irgendwas stimmt da nicht mit der Struktur $tagNMITEMACTIVATE unter X64. Da wird als Index immer Null zurückgeliefert. Deswegen: am besten nur als 32-Bit Version benutzen.

    Tweaky: Ich verstehe nicht, warum Du unter Win7 dort Laufwerkicons eingetragen hast. Benutzt Du irgendein besonderes Theme?

  • @progandy: Als X64 gibt es sowieso Probleme. Lass mal das "#AutoIt3Wrapper_UseX64=n" weg und mach einen Doppelklick auf einen Listview-Eintrag. Irgendwas stimmt da nicht mit der Struktur $tagNMITEMACTIVATE unter X64. Da wird als Index immer Null zurückgeliefert. Deswegen: am besten nur als 32-Bit Version benutzen.


    Hmm, so funktioniert es, aber es entpsricht nicht der MSDN-Dokumentation...

    [autoit]

    $tagTEST = "hwnd hWndFrom;uint_ptr IDFrom;INT_ptr Code;int Index;int SubItem;int NewState;int OldState;" & _
    "int Changed;int X;int Y;int lParam;int KeyFlags"

    [/autoit]
  • Ja ich habe ein anderes Theme.
    Aber du hast doch in Zeile 1696 dies stehen

    [autoit]

    GUICtrlSetImage(-1, $sIconDir & $sDriveIcon, 0, 0)

    [/autoit]


    Dies bedeutet doch, dass du deine Icons auf jedem Laufwerksbuchstaben anzeigen läßt, oder etwa nicht?