Beiträge von Oscar
-
-
Du hast die Funktion falsch verstanden. Diese Funktion sucht nach einer bestimmten Datei (muss angegeben sein). Du willst aber alle Dateien mit einer bestimmten Dateiendung haben. Dafür hat BugFix noch eine andere Funktion (Rekursive Datei/Ordner Auflistung per Objekt) geschrieben.
-
Vielleicht?!
Wo ist doch gleich Dein Script?
-
Ich habe mich heute etwas ausführlicher mit den TreeView-Befehlen befasst und dabei ist mir noch eine andere Möglichkeit zum de-/markieren der Checkboxen eingefallen:
Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
#include<GUIConstantsEx.au3>
#include<GuiTreeView.au3>
#include<TreeViewConstants.au3>
#include<WindowsConstants.au3>Dim $hauptitem[10]
[/autoit] [autoit][/autoit] [autoit]
Dim $hItem[10][10]
Dim $status[10][10]
Dim $status_hauptitem[10]Local $iStyle = BitOR($TVS_EDITLABELS, $TVS_HASBUTTONS, $TVS_HASLINES, $TVS_LINESATROOT, $TVS_DISABLEDRAGDROP, $TVS_SHOWSELALWAYS, $TVS_CHECKBOXES)
[/autoit] [autoit][/autoit] [autoit]
$hGui = GUICreate("(UDF Created) TreeView Create", 400, 450)$hTreeView = GUICtrlCreateTreeView(2, 2, 396, 446, $iStyle, $WS_EX_CLIENTEDGE)
[/autoit] [autoit][/autoit] [autoit]
$hRoot = GUICtrlCreateTreeViewItem("Root", $hTreeView)_GUICtrlTreeView_BeginUpdate($hTreeView)
[/autoit] [autoit][/autoit] [autoit]
For $x = 1 To 4
$hauptitem[$x] = _GUICtrlTreeView_AddChild($hTreeView, GUICtrlGetHandle($hRoot), StringFormat("[%02d] New Item", $x))
For $y = 1 To 5
$hItem[$x][$y] = _GUICtrlTreeView_AddChild($hTreeView, $hauptitem[$x], StringFormat("[%02d] New Child", $y))
Next
Next
_GUICtrlTreeView_EndUpdate($hTreeView)
_GUICtrlTreeView_Expand($hTreeView)
GUISetState()#cs
[/autoit] [autoit][/autoit] [autoit]
$iAdjust = Korrekturwert, weil die GUIGetCursorInfo-Werte relativ zur GUI sind,
_GUICtrlTreeView_HitTest() aber Werte relativ zum TreeView benötigt.
#ce
$iAdjust = 4
While True
Switch GUIGetMsg()
Case $GUI_EVENT_PRIMARYDOWN
$aInfo = GUIGetCursorInfo($hGui)
If $aInfo[4] = $hTreeView Then
If BitAND(_GUICtrlTreeView_HitTest($hTreeView, $aInfo[0]-$iAdjust, $aInfo[1]), 64) Then
$checked = _GUICtrlTreeView_GetChecked($hTreeView, _GUICtrlTreeView_GetSelection($hTreeView))
$hItem = _GUICtrlTreeView_GetFirstChild($hTreeView, _GUICtrlTreeView_GetSelection($hTreeView))
If $hItem Then _MarkChildItems($hTreeView, $hItem, $checked)
EndIf
EndIf
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEndFunc _MarkChildItems($hTreeView, $hItem, $checked)
[/autoit]
Do
$hNewItem = _GUICtrlTreeView_GetFirstChild($hTreeView, $hItem)
If $hNewItem Then _MarkChildItems($hTreeView, $hNewItem, $checked)
_GUICtrlTreeView_SetChecked($hTreeView, $hItem, $checked)
$hItem = _GUICtrlTreeView_GetNextChild($hTreeView, $hItem)
Until $hItem = 0
EndFunc -
-
Diese Funktion liest ein Verzeichnis rekursiv ein und stellt den Inhalt in einem TreeView dar.
Man kann angeben, ob auch Dateien in das TreeView aufgenommen werden sollen (Achtung! Das dauert u.U. sehr lange).
Die Funktion gibt (wenn erfolgreich) ein Array mit 2 Werten zurück ( [0] = Anzahl der Verzeichnisse, [1] = Anzahl der Dateien ).Screenshot:
Der Inhalt kann nicht angezeigt werden, da er nicht mehr verfügbar ist. Ausführliches Beispielscript ist dabei:
Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
#include<GuiTreeView.au3> ; erforderlich; Beispiel Anfang
[/autoit] [autoit][/autoit] [autoit]
#include<EditConstants.au3>
#include<GUIConstantsEx.au3>
#include<TreeViewConstants.au3>
#include<WindowsConstants.au3>Global $sPath = 'c:\programme\autoit3\'
[/autoit] [autoit][/autoit] [autoit]
Global $width = 800, $height = 600
Global $hGui = GUICreate('Directory-Treeview-Beispiel', $width, $height, -1, 0)
Global $hInput = GUICtrlCreateInput($sPath, 10, 10, $width - 160, 20, BitOR($ES_AUTOHSCROLL, $ES_READONLY))
Global $hChoose = GUICtrlCreateButton('...', $width - 148, 9, 30, 22)
GUICtrlSetFont(-1, 9, 600, 0, 'Verdana')
Global $hFiles = GUICtrlCreateCheckbox('inkl. Dateien', $width - 100, 10, 80, 16)
Global $bFiles = False
Global $hTreeView = GUICtrlCreateTreeView(10, 40, $width - 20, $height - 70, BitOR($GUI_SS_DEFAULT_TREEVIEW, $TVS_CHECKBOXES), $WS_EX_STATICEDGE)
GUICtrlSetFont(-1, 10, 400, 0, 'Arial')
GUICtrlSetBkColor(-1, 0xF8F8F8)
Global $hContextMenu = GUICtrlCreateContextMenu($hTreeView)
Global $hInfo = GUICtrlCreateMenuItem('Informationen', $hContextMenu)
Global $hExpand = GUICtrlCreateMenuItem('alles auseinanderfalten', $hContextMenu)
Global $hCollapse = GUICtrlCreateMenuItem('alles zusammenfalten', $hContextMenu)
Global $hStatus1 = GUICtrlCreateLabel('', 0, $height - 16, $width / 2, 16, -1, $WS_EX_STATICEDGE)
Global $hStatus2 = GUICtrlCreateLabel('', $width / 2 + 1, $height - 16, $width / 2, 16, -1, $WS_EX_STATICEDGE)
GUISetState()_TreeViewUpdate()
[/autoit] [autoit][/autoit] [autoit]While True
[/autoit] [autoit][/autoit] [autoit]
Switch GUIGetMsg()
Case $hChoose
$sTmp = FileSelectFolder('Verzeichnis auswählen', '', 0, $sPath, $hGui)
If Not @error Then
$sPath = $sTmp
GUICtrlSetData($hInput, $sPath)
_TreeViewUpdate()
EndIf
Case $hFiles
$bFiles = BitAND(GUICtrlRead($hFiles), $GUI_CHECKED) = $GUI_CHECKED
_TreeViewUpdate()
Case $GUI_EVENT_PRIMARYDOWN
$aInfo = GUIGetCursorInfo($hGui)
If $aInfo[4] = $hTreeView Then
$oldGUIDataSeparatorChar = Opt('GUIDataSeparatorChar', '\')
GUICtrlSetData($hStatus1, ' ' & StringReplace(_GUICtrlTreeView_GetTree($hTreeView), '\\', '\'))
Opt('GUIDataSeparatorChar', $oldGUIDataSeparatorChar)
If BitAND(_GUICtrlTreeView_HitTest($hTreeView, $aInfo[0] - 11, $aInfo[1] - 41), 64) Then
$checked = _GUICtrlTreeView_GetChecked($hTreeView, _GUICtrlTreeView_GetSelection($hTreeView))
_GUICtrlTreeView_SetBold($hTreeView, _GUICtrlTreeView_GetSelection($hTreeView), $checked)
$hItem = _GUICtrlTreeView_GetFirstChild($hTreeView, _GUICtrlTreeView_GetSelection($hTreeView))
If $hItem Then _MarkChildItems($hTreeView, $hItem, $checked)
EndIf
EndIf
Case $hInfo
$oldGUIDataSeparatorChar = Opt('GUIDataSeparatorChar', '\')
$TempPath = StringReplace(_GUICtrlTreeView_GetTree($hTreeView), '\\', '\')
Opt('GUIDataSeparatorChar', $oldGUIDataSeparatorChar)
MsgBox(0, 'Informationen', $TempPath & @CRLF & 'Dateigröße: ' & FileGetSize($TempPath) & ' Bytes')
Case $hExpand
_ExpandAll($hTreeView)
Case $hCollapse
_CollapseAll($hTreeView)
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEndFunc _MarkChildItems(ByRef $hTreeView, $hItem, $checked)
[/autoit] [autoit][/autoit] [autoit]
Do
$hNewItem = _GUICtrlTreeView_GetFirstChild($hTreeView, $hItem)
If $hNewItem Then _MarkChildItems($hTreeView, $hNewItem, $checked)
_GUICtrlTreeView_SetChecked($hTreeView, $hItem, $checked)
_GUICtrlTreeView_SetBold($hTreeView, $hItem, $checked)
$hItem = _GUICtrlTreeView_GetNextChild($hTreeView, $hItem)
Until $hItem = 0
EndFunc ;==>_MarkChildItemsFunc _ExpandAll($hTreeView)
[/autoit] [autoit][/autoit] [autoit]
_GUICtrlTreeView_Expand($hTreeView)
EndFunc ;==>_ExpandAllFunc _CollapseAll($hTreeView)
[/autoit] [autoit][/autoit] [autoit]
_GUICtrlTreeView_Expand($hTreeView, 0, False)
EndFunc ;==>_CollapseAllFunc _TreeViewUpdate()
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
GUICtrlSetData($hStatus1, ' Bitte warten! Verzeichnis wird eingelesen...')
GUICtrlSetData($hStatus2, '')
$Timer = TimerInit()
Local $aCount = _GUICtrlTreeView_CreateDirectory($hTreeView, $sPath, $bFiles)
If Not @error Then
$msg = ' Benötigte Zeit: ' & Round(TimerDiff($Timer) / 1000, 3) & ' sek.'
$msg &= ' | ' & $aCount[1] & ' Datei(en) und ' & $aCount[0] & ' Verzeichniss(e)'
GUICtrlSetData($hStatus1, ' Fertig.')
GUICtrlSetData($hStatus2, $msg)
EndIf
EndFunc ;==>_TreeViewUpdate
; Beispiel Ende;===============================================================================
[/autoit] [autoit][/autoit] [autoit]
; Function Name: _GUICtrlTreeView_CreateDirectory($hTreeView, $sPath, $bFiles)
; Description:: erstellt ein TreeView mit Verzeichnissen (+Dateien)
; Parameter(s): $hTreeView = ControlID/Handle des TreeViews
; $sPath = Verzeichnispfad, der dargestellt werden soll
; $bFiles = True = auch Dateien anzeigen, False = nur Verzeichnisse
; Requirement(s): #include<GuiTreeView.au3>
; Return Value(s): Array mit Anzahl der Verzeichnisse=[0] und Dateien=[1]
; 0 und @error = 1, wenn der Pfad nicht existiert bzw. kein Verzeichnis ist
; 0 und @error = 2, wenn das FileSystemObject nicht erstellt werden konnte
; Author(s): Oscar (http://www.autoit.de)
;===============================================================================
Func _GUICtrlTreeView_CreateDirectory($hTreeView, $sPath, $bFiles = False)
Local $hFileItem, $FolderColor = 0x0000FF, $Folder, $aCount[2] = [0, 0]
If Not StringInStr(FileGetAttrib($sPath), 'D') Then Return SetError(1, 0, 0)
$sPath = FileGetLongName($sPath)
Local $oFSO = ObjCreate('Scripting.FileSystemObject')
If @error Then Return SetError(2, 0, 0)
_GUICtrlTreeView_BeginUpdate($hTreeView)
_GUICtrlTreeView_DeleteAll(GUICtrlGetHandle($hTreeView))
Local $hTreeViewItem = GUICtrlCreateTreeViewItem($sPath, $hTreeView)
GUICtrlSetColor(-1, $FolderColor)
_GUICtrlTreeView_SetIcon($hTreeView, $hTreeViewItem, 'shell32.dll', 0)
$Folder = $oFSO.GetFolder($sPath)
_CreateDirectoryRecursive($hTreeView, $Folder, $hTreeViewItem, $bFiles, $aCount)
If $bFiles Then
For $Files In $Folder.Files
$hFileItem = GUICtrlCreateTreeViewItem($Files.Name, $hTreeViewItem)
$aCount[1] += 1
Next
EndIf
_GUICtrlTreeView_SetIcon($hTreeView, $hTreeViewItem, 'shell32.dll', 3, 2)
_GUICtrlTreeView_SetIcon($hTreeView, $hTreeViewItem, 'shell32.dll', 110, 4)
_GUICtrlTreeView_EndUpdate($hTreeView)
GUICtrlSetState($hTreeViewItem, $GUI_EXPAND)
$oFSO = ''
Return $aCount
EndFunc ;==>_GUICtrlTreeView_CreateDirectoryFunc _CreateDirectoryRecursive($hTreeView, $Folder, $ItemOld, $bFiles, ByRef $aCount)
[/autoit]
Local $hFolderItem, $hFileItem, $FolderColor = 0x0000FF
For $Subfolder In $Folder.SubFolders
$hFolderItem = GUICtrlCreateTreeViewItem($Subfolder.Name, $ItemOld)
GUICtrlSetColor(-1, $FolderColor)
_GUICtrlTreeView_SetIcon($hTreeView, $hFolderItem, 'shell32.dll', 3, 2)
_GUICtrlTreeView_SetIcon($hTreeView, $hFolderItem, 'shell32.dll', 110, 4)
$aCount[0] += 1
_CreateDirectoryRecursive($hTreeView, $Subfolder, $hFolderItem, $bFiles, $aCount)
If $bFiles Then
For $Files In $Subfolder.Files
$hFileItem = GUICtrlCreateTreeViewItem($Files.Name, $hFolderItem)
$aCount[1] += 1
Next
EndIf
Next
EndFunc ;==>_CreateDirectoryRecursiveEdit ( 06.01.09
Ich habe jetzt herausgefunden, dass die Icons an die Child-Items "vererbt" werden, wenn man nicht explizit ein Icon angibt. Das habe ich mir zunutze gemacht und weise dem ersten Verzeichnis zuerst das Datei-Icon zu, was dann an alle Childs vererbt wird. Den Unterverzeichnissen weise ich dann jeweils das Verzeichnis-Icon zu (dauert nicht so lange) und am Schluß ändere ich das Icon vom ersten Verzeichnis auf das Verzeichnis-Icon. So spare ich mir die Zuweisung bei den Dateien, was ja sonst sehr lange gedauert hat.
Jetzt dauert das Beispielscript (mit Dateien anhaken) bei mir nur noch 1,3 Sek. statt vorher 9,5 Sek.
-
WoEf, Dein Misstrauen in allen Ehren, aber die Erklärung des FileInstall-Befehls sehe ich nicht als Unterstützung zum Bau eines Trojaners.
Und dass er die Exe'n unbedingt nach System32 installieren will, halte ich auch nicht für ein ausreichendes Indiz. Mit solchen Anschuldigungen sollte man schon vorsichtig sein. -
Schau Dir mal GUICtrlCreateContextMenu in der Hilfe an.
-
Einfach mal die Listview-UDF durchsuchen:
[autoit]
[/autoit]
#Include <GuiListView.au3>
_GUICtrlListView_GetItemCount($hWnd) -
Beim erstellen des Listviews die Spaltenüberschriften angeben:
[autoit]
[/autoit]
$ListView1 = GUICtrlCreateListView("Seite|Status|Ping", 192, 0, 311, 335)
$ListView1_0 = GUICtrlCreateListViewItem("test|test|test", $ListView1)Edit: Zu langsam...

-
Die einzige Hilfestellung, die wir hier geben können ohne gleichzeitig Virenprogrammierer zu unterstützen, ist das setzen des entsprechenden Dateiattributs:
[autoit]FileSetAttrib("C:\blabla.txt", "+R")
[/autoit] -
Warum sollte da 90% rauskommen?

Nee, im Ernst, wie lautet denn die Aufgabe?
-
Und wenn Du eigene UDFs einbindest:
[autoit]#include <CMD.au3>
[/autoit]dann solltest Du diese auch mitposten.

-
Ich möchte bezweifeln, dass das funktioniert.
Sollte es aber tatsächlich funktionieren, dann dürfte das hier nicht gepostet werden, denn das würde einem Keylogger sehr nahe kommen. -
Wenn es Dich nicht stört, dass das Systemweit (für alle Fenster) passiert, dann könntest Du das auch so machen:
Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
#include<WinAPI.au3>
#include<WindowsConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>; ===============================================================================
[/autoit] [autoit][/autoit] [autoit]
; Farben für das Menü (Systemweit!)
Global $aElements[3] = [$COLOR_MENUBAR, $COLOR_MENU, $COLOR_MENUHILIGHT]
Global $aColors[3] = [0x4444FF, 0x4444FF, 0x44FFFF] ; Farben hier im BGR-Format!
Global $aSaveColors[3]
$aSaveColors[0] = _WinAPI_GetSysColor($COLOR_MENUBAR) ; bisherige Farben sichern
$aSaveColors[1] = _WinAPI_GetSysColor($COLOR_MENU)
$aSaveColors[2] = _WinAPI_GetSysColor($COLOR_MENUHILIGHT)
_WinAPI_SetSysColors($aElements, $aColors) ; neue Farben setzen
; ===============================================================================Global $defaultstatus = "Ready", $status, $filemenu, $fileitem
[/autoit] [autoit][/autoit] [autoit]
Global $helpmenu, $saveitem, $infoitem, $exititem, $recentfilesmenu
Global $separator1, $viewmenu, $viewstatusitem, $okbutton, $cancelbutton
Global $statuslabel, $msg, $file
GUICreate("My GUI menu", 300, 200)
$filemenu = GUICtrlCreateMenu("&File")
$fileitem = GUICtrlCreateMenuItem("Open", $filemenu)
GUICtrlSetState(-1, $GUI_DEFBUTTON)
$helpmenu = GUICtrlCreateMenu("?")
$saveitem = GUICtrlCreateMenuItem("Save", $filemenu)
GUICtrlSetState(-1, $GUI_DISABLE)
$infoitem = GUICtrlCreateMenuItem("Info", $helpmenu)
$exititem = GUICtrlCreateMenuItem("Exit", $filemenu)
$recentfilesmenu = GUICtrlCreateMenu("Recent Files", $filemenu, 1)
$separator1 = GUICtrlCreateMenuItem("", $filemenu, 2)
$viewmenu = GUICtrlCreateMenu("View", -1, 1)
$viewstatusitem = GUICtrlCreateMenuItem("Statusbar", $viewmenu)
GUICtrlSetState(-1, $GUI_CHECKED)
$okbutton = GUICtrlCreateButton("OK", 50, 130, 70, 20)
GUICtrlSetState(-1, $GUI_FOCUS)
$cancelbutton = GUICtrlCreateButton("Cancel", 180, 130, 70, 20)
$statuslabel = GUICtrlCreateLabel($defaultstatus, 0, 165, 300, 16, BitOR($SS_SIMPLE, $SS_SUNKEN))
GUISetState()
While 1
$msg = GUIGetMsg()
If $msg = $fileitem Then
$file = FileOpenDialog("Choose file...", @TempDir, "All (*.*)")
If @error <> 1 Then GUICtrlCreateMenuItem($file, $recentfilesmenu)
EndIf
If $msg = $viewstatusitem Then
If BitAND(GUICtrlRead($viewstatusitem), $GUI_CHECKED) = $GUI_CHECKED Then
GUICtrlSetState($viewstatusitem, $GUI_UNCHECKED)
GUICtrlSetState($statuslabel, $GUI_HIDE)
Else
GUICtrlSetState($viewstatusitem, $GUI_CHECKED)
GUICtrlSetState($statuslabel, $GUI_SHOW)
EndIf
EndIf
If $msg = $GUI_EVENT_CLOSE Or $msg = $cancelbutton Or $msg = $exititem Then ExitLoop
If $msg = $infoitem Then MsgBox(0, "Info", "Only a test...")
WEnd
GUIDelete(); ===============================================================================
[/autoit]
_WinAPI_SetSysColors($aElements, $aSaveColors) ; alte Farben wiederherstellen
; ===============================================================================
ExitIch habe die wichtigen Teile mal kommentiert. Der Rest ist aus einem Hilfe-Beispiel.
-
Ich wünsch' euch auch einen guten Rutsch und dass ihr alle gesund das Feiern übersteht.

-
Ein Blick in die Hilfe schadet nie:
Success: Returns a two-element array of pixel's coordinates. (Array[0] = x, Array[1] = y)
-
Wo ist das Script, damit wir das nachvollziehen können?
-
Die Frage ist doch: Von wem hast Du das Script? Frag' den...
Testen werde ich das auch nicht. Dazu ist mir mein System zu wichtig.
-
Den Fehler (GUI-Fenster wird nicht mehr refresht beim kopieren über's Netz) konnte ich beheben (neue Version in Post #1).
Ich habe nun ein Popup-Fenster daraus gemacht und damit tritt der Fehler nicht mehr auf. Zumindest bei mir. Vielleicht könnt ihr das auch mal testen und eine Rückmeldung geben...