Warum einzeln löschen? Mit FileDelete("Pfad-zum-Ordner") werden alle Dateien im Ordner gelöscht, der Ordner bleibt erhalten. Ausgenommen sind Dateien, die aufgrund bestimmter Attribute nicht löschbar sind.
Beiträge von BugFix
-
-
Es gibt optional die Möglichkeit Textelemente des Fensters/Controls zur Erkennung heranzuziehen (der 2.te Parameter, wo wir immer die schönen Leerstrings setzen
). Kannst das mal testen.
Lass dir auf jeden Fall alle Handle, die du ermittelst in die Konsole ausgeben, prüfe rückwärts, ob das richtige Fenster erwischt wurde (WinGetTitle($hWnd)) -
Warum soo kompliziert? Das Abfragen der Gruppenitem sind doch nur ein paar Zeilen Code:
AutoIt
Alles anzeigen#include <GUIConstantsEx.au3> #include <GuiImageList.au3> #include <GuiListView.au3> #include <MsgBoxConstants.au3> _Example() Func _Example() Local $hImage, $idListview GUICreate("ListView Get Item Group ID", 400, 300) $idListview = GUICtrlCreateListView("", 2, 2, 394, 268) GUISetState(@SW_SHOW) ; Load images $hImage = _GUIImageList_Create() _GUIImageList_Add($hImage, _GUICtrlListView_CreateSolidBitMap($idListview, 0xFF0000, 16, 16)) _GUIImageList_Add($hImage, _GUICtrlListView_CreateSolidBitMap($idListview, 0x00FF00, 16, 16)) _GUIImageList_Add($hImage, _GUICtrlListView_CreateSolidBitMap($idListview, 0x0000FF, 16, 16)) _GUICtrlListView_SetImageList($idListview, $hImage, 1) ; Add columns _GUICtrlListView_AddColumn($idListview, "Column 1", 100) _GUICtrlListView_AddColumn($idListview, "Column 2", 100) _GUICtrlListView_AddColumn($idListview, "Column 3", 100) ; Add items _GUICtrlListView_AddItem($idListview, "Row 1: Col 1", 0) _GUICtrlListView_AddSubItem($idListview, 0, "Row 1: Col 2", 1) _GUICtrlListView_AddSubItem($idListview, 0, "Row 1: Col 3", 2) _GUICtrlListView_AddItem($idListview, "Row 2: Col 1", 1) _GUICtrlListView_AddSubItem($idListview, 1, "Row 2: Col 2", 1) _GUICtrlListView_AddItem($idListview, "Row 3: Col 1", 2) ; Build groups _GUICtrlListView_EnableGroupView($idListview) _GUICtrlListView_InsertGroup($idListview, -1, 1, "Group 1") _GUICtrlListView_InsertGroup($idListview, -1, 2, "Group 2") _GUICtrlListView_SetItemGroupID($idListview, 0, 1) _GUICtrlListView_SetItemGroupID($idListview, 1, 2) _GUICtrlListView_SetItemGroupID($idListview, 2, 2) ; Display Item 3 group ID MsgBox($MB_SYSTEMMODAL, "Information", "Item 3 Group ID: " & _GUICtrlListView_GetItemGroupID($idListview, 2)) Local $a = _GUICtrlListView_GetItemByGroupID($idListview, 2) ConsoleWrite('Member of group 2' & @CRLF) For $i = 0 To UBound($a) -1 ConsoleWrite('Index: ' & $a[$i] & ', Text: ' & _GUICtrlListView_GetItemTextString($idListview, $a[$i]) & @CRLF) Next ; Loop until the user exits. Do Until GUIGetMsg() = $GUI_EVENT_CLOSE GUIDelete() EndFunc ;==>Example Func _GUICtrlListView_GetItemByGroupID($hWnd, $iIDGroup) Local $iCount = _GUICtrlListView_GetItemCount($hWnd) If $iCount = 0 Then Return SetError(1,0,0) Local $aGroup[$iCount], $iIndex=0 For $i = 0 To $iCount -1 If _GUICtrlListView_GetItemGroupID($hWnd, $i) = $iIDGroup Then $aGroup[$iIndex] = $i $iIndex += 1 EndIf Next ReDim $aGroup[$iIndex] Return $aGroup EndFunc -
Nein, nur die ID eintragen: ControlCommand($hWnd, '', 346, 'Check', '')
Ich nehme ID nur ungern, weil diese häufig dynamisch sind und bei jedem Aufruf einen andren Wert haben. -
Mal nebenbei: Warum das mühsame Auseinanderfriemeln, statt ausschliesslich CN abzufragen?
-
Du kannst auch die ID verwenden anstatt "CLASS/INSTANCE".
Um das Fenster mit Teilen des Textes (also hier das Wort "Aktualisierung") zu erkennen, setze die Option: Opt("WinTitleMatchMode", 2) -
Wenn du WinWaitActive verwendest, bekommst du sowieso das Handle zurück:
AutoIt; statt: $sTitle = "Arbeitsplatzaktualisierung - Aktualisierung" $hWnd = WinGetHandle($sTitle) WinWaitActive($sTitle) ; verwende: $sTitle = "Arbeitsplatzaktualisierung - Aktualisierung" $hWnd = WinWaitActive($sTitle)Hast du eventuell eine Option gesetzt, dass Fenster auch mit Teilen des Namens erkannt werden und somit das falsche Fenster ermittelt wird?
-
Checkbox ist ein Button.
Und für fremde Fenster gelten keine GUI-Befehle, sondern Window-Befehle.AutoIt
Alles anzeigen; Handle des Fensters holen $sTitle = "Arbeitsplatzaktualisierung - Neuinstallation" $hWnd = WinGetHandle($sTitle) ; Checkbox ist ein Button, ebenso wie Radio #cs "IsChecked", "" Returns 1 if Button is checked, 0 otherwise "Check", "" Checks radio or check Button "UnCheck", "" Unchecks radio or check Button #ce ; ist checked? $iResult = ControlCommand($hWnd, '', '[CLASS:Button;INSTANCE:1]', 'IsChecked', '') ; check ControlCommand($hWnd, '', '[CLASS:Button;INSTANCE:1]', 'Check', '') ; uncheck ControlCommand($hWnd, '', '[CLASS:Button;INSTANCE:1]', 'UnCheck', '') -
-
Na dann bau dir mal zusammen:
- multiline
- cn=(alles-ausser-Komma)
- Flag 3 (Array) -
-
$memberof ist ja ein Array
Es wird in der Funktion ein Array, du mußt nur die Variable deklarieren (Global $irgendeineVariable). Die Funktion macht daraus ein Array, befüllt es und gibt die Anzahl der Member zurück. Die Member selber sind dann in der vorab deklarierten Variable verfügbar.
-
$GUI_CHECKED + $GUI_ENABLE
Poooh - DAS kann tödlich sein. Nicht in diesem Fall, aber Konstanten enthalten oft Kombinationen von Werten. Wenn du dann addierst, wird unter Umständen eine völlig andere Kombination als gewollt entstehen.
Deshalb dafür ausschliesslich BitOr verwenden (so wie bei der Abfrage BitAnd).AutoIt
Alles anzeigen$a = BitOR(1,2,4,8) ConsoleWrite('Result: ' & $a & @CRLF) $a = (1+2+4+8) ConsoleWrite('Result like before: ' & $a & @CRLF) $a = BitOR(1,2,4,8,4,8) ; 4 and 8 2-times ==> BUT NOT added!! ConsoleWrite('Result: ' & $a & @CRLF) $a = (1+2+4+8+4+8) ; 4 and 8 2-times ==> AND ALSO added!! ConsoleWrite('Result is different: ' & $a & @CRLF) -
Steht doch im Funktionskopf:
Func _ADGetGroupMemberOf(ByRef $memberof, $groupdn, $sort = 0)
$sort ist optional, der Rest muß übergeben werden. Wobei $memberof eine ByRef-Variable ist, die also bereits vorher deklariert sein muss. -
[OT]
Mir ist heute alles Banane, aber sowas von.
- absolut gängige Aussage
[/OT] -
Hi,
meine Mutter ist inzwischen etwas schwach auf den Ohren. Da ist der Lautsprecher eines Flat-TV keine Erbauung (wirklich guter, klarer Klang nur hinter dem TV
).
Nun wollte ich da was Basteln. Eine Bedingung: Nicht noch eine Fernbedienung.
Meine Überlegung war jetzt, ein paar gute PC-Lautsprecher zu verwenden, Kopfhörerausgang hat der TV.Was ich jetzt nicht sicher weiß: Regelt die Lautstärkeänderung der Fernbedienung auch den Kopfhörerausgang? Konnte es noch nicht testen, war noch nicht vor Ort. Ich nehme aber an - ja.
Könnt ihr PC-Lautsprecher empfehlen? Klangregelung ist zwingend erforderlich um den Ton in den für meine Mutter hörbaren Frequenzbereich zu transponieren.
Ein zusätzlicher Kopfhörerausgang am Lautsprecher (parallel zu betreiben) wäre auch nicht schlecht, ihr Mann hört noch schlechter und braucht eigentlich einen Kopfhörer.Falls ihr mir bei meiner Suche helfen könnt, eventuell selber derartiges hinter euch habt, ich bin für jeden Tipp dankbar.
-
Da sich mal wieder im Forum jemand für AutoIt-OOP interessiert hat, möchte ich mal noch eine weitere Spielerei nachschieben: Gui-Elemente als Objekte. Dazu habe ich einige Gui-Ctrl "objektisiert"

Das Beispiel:
AutoIt
Alles anzeigen#include "oopAU3.au3" ; == Assignment Objekterstellung: Global $objGui = _objGUI_Create Global $objBtn = _objGUI_ButtonCreate Global $objInput = _objGUI_InputCreate Global $objRadio = _objGUI_RadioCreate Global $objCheck = _objGUI_CheckBoxCreate Global $objLabel = _objGUI_LabelCreate ; == Erstellen Gui + Zuweisen Events + Show in Einem $oGUI = $objGui('Test').Event('_MyDblClick', $_ON_DBLCLICK_).Event('_MyRightClick', $_ON_SECUP_).Event('_End', $_ON_CLOSE_).Show ; == Erstellen Button + Hintergrundfarbe + Event in Einem $oBtn_1 = $objBtn($oGUI, 'Button 1', 10, 10, 150, 22).BkCol(0xFFFFFF).Event('_BtnClick') $oBtn_2 = $oBtn_1.Clone('Button 2').y(40).Col(0xFFFFFF).BkCol(0x0000FF).Event('_BtnClick') ConsoleWrite('Text 1. Button: ' & $oBtn_1.Read & @CRLF) ; Methode 'Read' ConsoleWrite('Text 2. Button: ' & $oBtn_2.Text & @CRLF) ; Eigenschaft 'Text' ; == Erstellen Input mit InfoText $oInp = $objInput($oGUI, '', 10, 70, 200).InfoText('Gib mir Input ;-)') ; == Erstellen Radio mit Event / und $GUI_CHECKED $oRadio_1 = $objRadio($oGUI, 'Input ReadOnly', 20, 95, 90).Event('_RadioClick') $oRadio_2 = $oRadio_1.Clone('Input Zugriff').x(130).Checked.Event('_RadioClick') ; == Erstellen Checkbox mit Event $oCB_1 = $objCheck($oGUI, 'Button 1 - ROT', 10, 130, 150).Event('_CBClick') $oCB_2 = $oCB_1.Clone('Button 2 - WEISS').y(155).Event('_CBClick') ; == Erstellen Label + weiteren Button $oLbl_1 = $objLabel($oGUI, 'Label-1', 10, 185, 120, 22) $oLbl_2 = $oLbl_1.Clone('Label-2').y(207) $oBtn_3 = $objBtn($oGUI, 'Set Size Lbl-2', 260, 185, 100, 22).Event('_Lbl2_Font') ;~ Sleep(2000) ;~ $oGUI.Title = "Das ist ein neuer Titel" ;~ Sleep(2000) ;~ $oGUI.x = 200 ;~ Sleep(2000) ;~ $oGUI.y = 100 ; == Syntactic Sugar: MainLoop als Call $__MainLoop__() Func _Lbl2_Font() $oLbl_2.FontName('Courier New') Sleep(1000) $oLbl_2.FontName('Segoe UI').FontSize(8.5) ;~ ConsoleWrite('FontSize: ' & $oLbl_2.FontSize() & ' pt' & @CRLF) EndFunc Func _BtnClick() Local $aEvt = _objGUI_EventArray() ; [ID, Objekt] For $i = 1 To $aEvt[0][0] If @GUI_CtrlId = $aEvt[$i][0] Then ConsoleWrite('Klick: ' & '[CLASS: ' & $aEvt[$i][1].__class__ & '], Text: ' & $aEvt[$i][1].Text & @CRLF) ExitLoop EndIf Next EndFunc Func _MyDblClick() ConsoleWrite('Doppelklick auf GUI' & @CRLF) EndFunc Func _MyRightClick() ConsoleWrite('Rechtsklick auf GUI' & @CRLF) EndFunc Func _RadioClick() Switch @GUI_CtrlId Case $oRadio_1.ID $oInp.ReadOnly Case $oRadio_2.ID $oInp.ReadOnly(0) EndSwitch EndFunc Func _CBClick() Switch @GUI_CtrlId Case $oCB_1.ID If $oCB_1.Checked($_GET) Then $oBtn_1.BkCol(0xFF0000) $oCB_1.Text('Button 2 - WEISS') Else $oBtn_1.BkCol(0xFFFFFF) $oCB_1.Text('Button 2 - ROT') EndIf Case $oCB_2.ID If $oCB_2.Checked($_GET) Then $oBtn_2.BkCol(0xFFFFFF).Col(0x000000) $oCB_2.Text('Button 2 - BLAU') Else $oBtn_2.BkCol(0x0000FF).Col(0xFFFFFF) $oCB_2.Text('Button 2 - WEISS') EndIf EndSwitch EndFunc Func _End() Exit EndFuncIm Anhang sind alle erforderlichen Dateien enthalten, ebenso nochmal das Bsp. aus Post #1
EDIT: Gerade bemerkt: In der Zwischenzeit hat sich etwas geändert mit der AutoIt Version. Wenn ich das Window-HWnd aus dem Speicher abrufe muss ich es vor der Verwendung mit HWnd($hWnd) erst wieder nutzbar machen. Dadurch lief meine Methode .Clone nicht. Jetzt korrigiert.
-
Kann man in AutoIT nicht, die rechenlastigen aufgaben, an irgenteine C++ Bibliothek übergeben, und sich das Ergebnis holen?
Ist auch durchaus üblich, bei denen, die rechenintensive Aufgaben abarbeiten. Da wird z.B. ASM genutzt oder wie ich gerade selbst bei einem Projekt bemerkt habe, kann man die schnarchende Langsamkeit bei rekursiven Dateioperationen einfach von Powershell erledigen lassen, in einem Bruchteil der Zeit, die AutoIt braucht.
Das ist letztlich aber alles OK: AutoIt bietet ein einfach zu nutzendes Interface und wenns schnell gehen muss, wird der Auftrag weitergereicht.
-
Warscheinlich is der Vorteil von ByRef, das es schneller geht, da nix erstellt werden muss sondern immer weiterverarbeitet, richtig?
Die Geschwindigkeit (durch das Sparen des Kopierens des Originals) ist ein Punkt. Aber wesentlicher bei Objekten ist die Nutzung von ByRef bei Methoden des Objektes. Und das geht leider nicht mit AutoIt-OOP. Das Problem hatte ich mal hier geschildert.
-
Hier mal das Pattern erläutert:
Code
Alles anzeigen(\$[_\w]+)(?:\s*=([^,]+))? (\$[_\w]+) - der Variablenname () - in Klammern/ Capture fängt das Ergebnis auf \$ - das Zeichen "$", als Metazeichen muß es mit dem Backslash maskiert werden [] - eine Zeichenklasse für alle Zeichen die im Variablennamen erlaubt sind _ - das Zeichen "_" \w - alle Word-Zeichen (0-9 a-z A-Z) + - Quantifier, Zeichen in der Gruppe mindestens 1 bis unendlich viele (?:\s*=([^,]+))? - die (optionale) Zuweisung ()? - Capture mit folgendem "?" macht den Inhalt optional ?: - Inhalt soll NICHT im Capture enthalten sein \s* - Leerzeichen mit Quantifier "*", 0 bis unendlich oft = - das Zeichen "=" HIER könnte man nochmal \s* einfügen - mögliches Leerzeichen nach dem Zuweisungsoperator ([^,]+) - der zugewiesene Wert [^,] - eine negierte Klasse, alles ausser dem Zeichen "," ist erlaubt + - Quantifier, Zeichen in der Gruppe mindestens 1 bis unendlich vieleDein Skript habe ich noch nicht getestet.
Ich habe viel mit AutoItOOP experimentiert. Bei einem Problem bin ich aber stecken geblieben: AutoitOOP-Objekte lassen sich nicht ByRef nutzen. Das liegt leider in der Natur dieses Objektes und läßt sich nicht ändern. Dadurch geht leider viel Objekt-Funktionalität verloren.