In der Funktion _ShowSubFolders($Folder) ist die Variable $str enthalten. Diese mußt du in deinem Skript deklarieren, damit sie auch außerhalb der Funktion zur Verfügung steht.
Also
Global $str
[/autoit]an den Anfang und schon paßt es.
In der Funktion _ShowSubFolders($Folder) ist die Variable $str enthalten. Diese mußt du in deinem Skript deklarieren, damit sie auch außerhalb der Funktion zur Verfügung steht.
Also
Global $str
[/autoit]an den Anfang und schon paßt es.
Outlook - Import - CSV ?
Oder wo liegt das Problem? Und warum führst du immer wieder das AD an, sehe da keinen Zusammenhang.
ins Active Directory importieren.
Verstehe ich nicht, was willst du im Verzeichnisdienst mit den Daten?
In welchem Programm willst du denn die Daten nutzen?
Das kannst du mit den Funktionen der ListView-UDF erledigen. #Include <GuiListView.au3>
Schau dir die Bsp. in der Hilfe an, ist eigentlich verständlich erklärt. Wenn noch Fragen sind melde dich wieder.
(Beachte: Für die Funktion wird das Handle des Listview benötigt!)
FileSetAttrib($OrdnerPfad & '\*.*', '+A-R', 1)
[/autoit]Archiv muß nicht unbedingt gesetzt werden, also '-R' reicht auch.
Warum das Programm abbricht, ist mir nicht ganz klar.
Edit: Habs gefunden - die Auflistung enthält ja alle Pfadangaben einzeln, somit wird ein Parent-Folder bereits gelöscht und anschließend folgt der Verweis auf einen Subfolder (der jetzt nicht mehr existiert). Einfach eine FolderExists-Abfrage einbauen - dann läuft es.
Dim $oFSO = ObjCreate('Scripting.FileSystemObject')
Dim $Path = 'D:\Profile\Dokumente und Einstellungen'
Dim $str = ''
_ShowSubFolders($oFSO.GetFolder($Path))
Func _ShowSubFolders($Folder)
For $Subfolder in $Folder.SubFolders
$str &= $Subfolder.Path & @LF
_ShowSubFolders($Subfolder)
Next
EndFunc
$aAllFolder = StringSplit($str, @LF)
For $i = 1 To UBound($aAllFolder) -1
If StringInStr($aAllFolder[$i], 'gotomaxx') And $oFSO.FolderExists($aAllFolder[$i]) Then _
$oFSO.DeleteFolder($aAllFolder[$i])
Next
FireFlyer
Woher man das weiß?
Ein Großteil von Skripten, die in VBS erstellt sind kann man 1:1 in AutoIt umsetzen. Auch VB-Code läßt sich als Grundlage verwenden. Also fleißig in VB-Archiven stöbern und vor allem sehr zu empfehlen: MSDN - Objektmodelle
Hier mal der Link zum FSO
Der Speicherort der INI-Datei wird bei der Variablendeklaration festgelegt:
[autoit]Global $INI = @ScriptDir & '\Meine.ini'
[/autoit]In diesem Fall wird das Makro @ScriptDir verwendet, also das Verzeichnis, indem sich auch das Skript selbst befindet.
Global legt in der Variablendeklaration den Gültigkeitsbereich der Variablen fest. Näheres findest du in der Hilfe unter Variablen.
Das Bsp. mit der Case-Abfrage:
Ja, jedem Font wird eine Ziffer zugeordnet und diese wird in der INI eingetragen. (Macht ja wenig Sinn, für jede Schriftart einen eigenen Schlüssel in der INI anzulegen)
Oh man, du "Siezt" mich. Hast wohl in mein Profil geschaut und gesehen, wie alt ich bin
. Da fühle ich mich gleich noch älter ![]()
Also, wir duzen uns hier alle ![]()
Danke Tam0r für die hoffnungsvollen Aussichten.
Wünsche dir viel Erfolg bei den Prüfungen. Toi, Toi, Toi. ![]()
Das geht so:
#include <GUIConstants.au3>
Global $INI = @ScriptDir & '\Meine.ini'
If Not FileExists($INI) Then IniWrite($INI, 'font', 'Arial', 1) ; wenn nicht vorhanden, wird INI erstellt
Global $font = IniRead($INI, 'font', 'Arial', 1)
GUICreate("Test", 150, 100)
$menu2 = GUICtrlCreateMenu("Schriftart")
$item4 = GUICtrlCreateMenuItem("Arial", $menu2)
$item5 = GUICtrlCreateMenuItem("Arial Black", $menu2)
If $font = 1 Then
GUICtrlSetState($item4, $GUI_CHECKED)
GUICtrlSetState($item5, $GUI_UNCHECKED)
Else
GUICtrlSetState($item4, $GUI_UNCHECKED)
GUICtrlSetState($item5, $GUI_CHECKED)
EndIf
GUISetState()
[/autoit] [autoit][/autoit] [autoit]While 1
$msg = GUIGetMsg()
Switch $msg
Case $GUI_EVENT_CLOSE
Exit
Case $item4
$arial = "Arial"
GUICtrlSetState($item4, $GUI_CHECKED)
GUICtrlSetState($item5, $GUI_UNCHECKED)
IniWrite($INI, 'font', 'Arial', 1)
Case $item5
$arialblack = "Arial Black"
GUICtrlSetState($item5, $GUI_CHECKED)
GUICtrlSetState($item4, $GUI_UNCHECKED)
IniWrite($INI, 'font', 'Arial', 0)
EndSwitch
WEnd
Edit:
Falls du mehrere Schriftarten einbinden willst würde ich so vorgehen:
Je Font eine Ziffer vergeben und die aktuelle Ziffer in der INI speichern.
;~ beim Laden den zugehörigen Font markieren
$font = IniRead($INI, 'font', 'type', 1)
Switch $font
Case 1 ; Arial
; Code zum Check des Eintrags
Case 2 ; Arial Black
; Code zum Check des Eintrags
Case 3 ; Arial Narrow
; Code zum Check des Eintrags
Case 4 ; Comic Sans Serife
; Code zum Check des Eintrags
Case 5 ; Courier New
; Code zum Check des Eintrags
Case 6 ; TimesNewRoman
; Code zum Check des Eintrags
EndSwitch
Vielleicht gefällt dir diese Lösung?
[autoit]Dim $oFSO = ObjCreate('Scripting.FileSystemObject')
Dim $Path = 'D:\Profile\Dokumente und Einstellungen'
Dim $str = ''
_ShowSubFolders($oFSO.GetFolder($Path))
Func _ShowSubFolders($Folder)
For $Subfolder in $Folder.SubFolders
$str &= $Subfolder.Path & @LF
_ShowSubFolders($Subfolder)
Next
EndFunc
$aAllFolder = StringSplit($str, @LF)
For $i = 1 To UBound($aAllFolder) -1
If StringInStr($aAllFolder[$i], 'gotomaxx') Then $oFSO.DeleteFolder($aAllFolder[$i])
Next
Edit: Hatte die Rekursion vergessen, nun passt es.
Ja, INI ist am einfachsten, schau mal die Bsp. in der Hilfe zu INIWrite(), INIRead(), usw. an.
Eine andere Variante ist die Verwendung von Registryeinträgen. Mag ich persönlich gar nicht, das müllt einen Rechner zu schnell zu.
Mal als Anregung, versuche es dann umzusetzen:
- Gehe durch das Ergebnis-Array
- Schreibe Wert 1 in ein Temporäres Array (hat jetzt kleinstes X)
- Solange Y gleich ist tue nichts
- Wenn Y den nächsten Wert annnimmt wird auch dieser Wert in Tmp-Array geschrieben
- der vorhergehende Wert ist dann der letzte und somit mit größtem X für das vorige Y (auch in Tmp-Array schreiben)
- der letzte Eintrag im Array ist auch der mit größtem X für das letzte Y
so weiter bis zum Ende
Analog vorgehen nach dem Umsortieren (des Ergebnisarray, nicht des Tmp-Array) für X und zugehörige Y
Am Ende sind nur die größten und kleinsten Werte im Tmp-Array.
Edit: Ich habs mal auf die Schnelle gemacht, ungetestet. Befehlszeile für Sortieren mußt du noch einfügen.
$aErgebnisse[100][2] ; Ergebnisse sortiert nach Y fallend, X steigend ; [n][0] = X, [n][1] = Y
$aTmp[1][2] ; leer, zum Aufnehmen der begrenzenden Koordinaten
$aTmp[0][0] = $aErgebnisse[0][0] ; vorbelegen mit erstem Eintrag
$aTmp[0][1] = $aErgebnisse[0][1]
For $i = 1 To UBound($aErgebnisse) -1
If $aTmp[UBound($aTmp)-1][1] <> $aErgebnisse[$i][1] Then ; Y hat neuen Wert
ReDim $aTmp[UBound($aTmp)+2][2]
$aTmp[UBound($aTmp)-2][0] = $aErgebnisse[$i-1][0] ; vorhergehenden Wert als größten Wert übernehmem
$aTmp[UBound($aTmp)-2][1] = $aErgebnisse[$i-1][1] ; falls nur einer ist der doppelt (min u. max) wird später gelöscht
$aTmp[UBound($aTmp)-1][0] = $aErgebnisse[$i][0] ; aktueller Wert als neuer kleinster Wert
$aTmp[UBound($aTmp)-1][1] = $aErgebnisse[$i][1]
EndIf
Next
ReDim $aTmp[UBound($aTmp)+1][2]
$aTmp[UBound($aTmp)-1][0] = $aErgebnisse[UBound($aErgebnisse)-1][0] ; letzter Wert ist letzter größter Wert
$aTmp[UBound($aTmp)-1][1] = $aErgebnisse[UBound($aErgebnisse)-1][1]
;=========================================
; HIER NOCH DAS $aErgebnisse UMSORTIEREN!!
;=========================================
; jetzt mit umsortiertem Array alles wie gehabt aber für X
ReDim $aTmp[UBound($aTmp)+1][2]
$aTmp[UBound($aTmp)-1][0] = $aErgebnisse[0][0] ; vorbelegen mit erstem Eintrag
$aTmp[UBound($aTmp)-1][1] = $aErgebnisse[0][1]
For $i = 1 To UBound($aErgebnisse) -1
If $aTmp[UBound($aTmp)-1][0] <> $aErgebnisse[$i][0] Then ; X hat neuen Wert
ReDim $aTmp[UBound($aTmp)+2][2]
$aTmp[UBound($aTmp)-2][0] = $aErgebnisse[$i-1][0] ; vorhergehenden Wert als größten Wert übernehmem
$aTmp[UBound($aTmp)-2][1] = $aErgebnisse[$i-1][1] ; falls nur einer ist der doppelt (min u. max) wird später gelöscht
$aTmp[UBound($aTmp)-1][0] = $aErgebnisse[$i][0] ; aktueller Wert als neuer kleinster Wert
$aTmp[UBound($aTmp)-1][1] = $aErgebnisse[$i][1]
EndIf
Next
ReDim $aTmp[UBound($aTmp)+1][2]
$aTmp[UBound($aTmp)-1][0] = $aErgebnisse[UBound($aErgebnisse)-1][0] ; letzter Wert ist letzter größter Wert
$aTmp[UBound($aTmp)-1][1] = $aErgebnisse[UBound($aErgebnisse)-1][1]
; jetzt doppelte Einträge entfernen
_Array2DDblDel($aTmp)
Func _Array2DDblDel(ByRef $ARRAY, $CASESENS=0)
Local $arTmp[1] = [''], $dbl = 0, $count = 0, $x, $l, $val, $valTmp, $i, $k
If ( Not IsArray($ARRAY) ) Then
SetError(1)
Return 0
EndIf
Local $Ubound2nd = UBound($ARRAY,2)
If @error = 2 Then
For $i = 0 To UBound($ARRAY)-1
$dbl = 0
For $k = 0 To UBound($arTmp)-1
Switch $CASESENS
Case 0
If $arTmp[$k] = $ARRAY[$i] Then
$dbl = 1
$count += 1
EndIf
Case 1
If $arTmp[$k] == $ARRAY[$i] Then
$dbl = 1
$count += 1
EndIf
EndSwitch
Next
If $dbl = 0 Then
If $arTmp[0] = "" Then
$arTmp[0] = $ARRAY[$i]
Else
ReDim $arTmp[UBound($arTmp)+1]
$arTmp[UBound($arTmp)-1] = $ARRAY[$i]
EndIf
Else
$dbl = 0
EndIf
Next
Else
ReDim $arTmp[1][$Ubound2nd]
$arTmp[0][0] = ''
$x = 0
For $i = 0 To UBound($ARRAY)-1
$dbl = 0
$val = ''
$valTmp = ''
For $l = 0 To $Ubound2nd-1
$val &= $ARRAY[$i][$l]
Next
For $k = 0 To UBound($arTmp)-1
For $l = 0 To $Ubound2nd-1
$valTmp &= $arTmp[$k][$l]
Next
Switch $CASESENS
Case 0
If $valTmp = $val Then
$dbl = 1
$count += 1
EndIf
Case 1
If $valTmp == $val Then
$dbl = 1
$count += 1
EndIf
EndSwitch
$valTmp = ''
Next
If $dbl = 0 Then
If $x = 1 Then ReDim $arTmp[UBound($arTmp)+1][$Ubound2nd]
For $l = 0 To $Ubound2nd-1
If $arTmp[0][0] = '' Or $x = 0 Then
$arTmp[0][$l] = $ARRAY[0][$l]
If $l = $Ubound2nd-1 Then $x = 1
Else
$arTmp[UBound($arTmp)-1][$l] = $ARRAY[$i][$l]
$x = 2
If $l = $Ubound2nd-1 Then $x = 1
EndIf
Next
Else
$dbl = 0
EndIf
Next
EndIf
$ARRAY = $arTmp
Return $count
EndFunc ; ==>_Array2DDblDel
Also ich weise dir gerne den Weg, aber ich bin kein Taxifahrer, der dich auch noch fährt, weil du nicht laufen möchtest. ![]()
#Include <GuiComboBox.au3>
$Text = ''
$index = _GUICtrlComboBox_GetCurSel($hComboBox) ; Index der aktuellen Auswahl
_GUICtrlComboBox_GetLBText($hComboBox, $index, $Text) ; Text der aktuellen Auswahl wird in $Text geschrieben
Na dann könnte dir das weiterhelfen: http://www.autoitscript.com/forum/index.php?showtopic=65027&hl=embedded++flash
(Allerdings sind die von dir angegebenen SWF-Links wohl nicht verfügbar, ich kann mit keinem Player unter Angabe des Links darauf zugreifen)
Machst du keinen Syntax-Check?
Dann würdest du sofort die Fehlermeldung bekommen, dass "_FileWriteLog()" eine unbekannte Funktion ist.
Weil: #include <file.au3> fehlt ![]()
Ja, das Bsp. aus der Hilfe etwas abgewandelt:
#include <GUIConstantsEx.au3>
#include <IE.au3>
#include <WindowsConstants.au3>
_IEErrorHandlerRegister ()
[/autoit] [autoit][/autoit] [autoit]$oIE = _IECreateEmbedded ()
GUICreate("Embedded Web control Test", 640, 580, (@DesktopWidth - 640) / 2, _
(@DesktopHeight - 580) / 2, $WS_OVERLAPPEDWINDOW + $WS_VISIBLE + $WS_CLIPSIBLINGS)
$GUIActiveX = GUICtrlCreateObj($oIE, 10, 40, 600, 360)
$GUI_Button_Start = GUICtrlCreateButton("Start", 10, 420, 100, 30)
GUISetState()
While 1
$msg = GUIGetMsg()
Select
Case $msg = $GUI_EVENT_CLOSE
ExitLoop
Case $msg = $GUI_Button_Start
_IENavigate ($oIE, "http://de.sevenload.com/videos/KzvjaXn-Book-1-04")
EndSelect
WEnd
GUIDelete()
Exit
Ja klar. Da muß der Pfad für die Datei rein ![]()
z.B.:
Global $LogFilePath = @ScriptDir & '\MeineUser.log'
[/autoit]Ah, Problem erkannt. Das wird wohl nicht gehen, da kein Link zum Video selber existiert, sondern nur zur Website mit eingebettetem Video. Die Website kpl. kannst du natürlich in eine Oberfläche einbetten, aber ich denke, das ist nicht was du willst.
Was geht denn nicht?
Im LogFile sollte in etwa erscheinen:
DATUM ZEIT: AccountType: .......
Caption: .....
Description: .....
Domain: .....
FullName: .....