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

Beiträge von FKFK

  • Run startet nicht minimiert sondern verkleinert

    • FKFK
    • 25. Juli 2019 um 11:55

    Hallo alle zusammen,

    ich habe zahlreiche unterschiedliche Programme, die ich durch einen Klick auf eine GUI öffne.

    Diese möchte ich minimiert aber als maximierte Fenster starten über

    Code
    Run($sPfad, "", $sParameter)

    Wenn ich SW_HIDE oder SW_MINIMIZE verwende, werden sie verkleinert gestartet aber nicht im Hintergrund.

    Für mich ist das Maximieren blöder als sie minimieren zu müssen und das minimierte starten geht weder über HIDE noch über MINIMIZE Daher starte ich sie aktuell maximiert:

    Code
    Run($sPfad, "", 3)

    Gibt es eine Lösung, wie ich sie minimiert starte und sie maximiert sind?

    LG

  • IP in IP-Bereich? Zerlegung in Hostbereich und Netzadresse

    • FKFK
    • 10. September 2015 um 11:09

    Genial! Vielen Dank!
    Mir ist noch ein Bug/Feature aufgefallen: Bei 192.168.1.23/30 gibt er mir dies aus:
    [0]|192.168.1.20
    [1]|0.0.0.3
    Für meine Zwecke reicht es auf jeden Fall aus. Ich frage mich, was die korrekte Angabe des Hosts ist. Wahrscheinlich benötigt man 0.0.0.3 sogar gar nicht, weil man den Host ja mit 192.168.1.23 addressiert. Eine nützliche Angabe ist es sicherlich trotzdem.

    Willst du daraus eine UDF machen?
    :)

    //Edit: Ich habe mal die SetErrors der Unterfunktionen als Weiterreichung eingebaut:

    Spoiler anzeigen
    AutoIt
    ; Zerlegt eine IP/Subnetzkombi in Netz- und Hostanteil
    Func _IP2NetHost($s_IPpSubnet)
    	; by AspirinJunkie
    	Local $s_Pattern = "(?x)^\h*                                                                                                              " & @CRLF & _
    			"((?:(?:25[0-5]|2[0-4]\d|[01]\d\d|\d?\d)(?(?=\.?\d)\.)){4}\b)      # erste IP-Adresse (mit Wertebereichscheck)                        " & @CRLF & _
    			"(?:                                                               # Beginn der Netzmaske                                             " & @CRLF & _
    			"    \s?/?\s?                                                      # das optionale Trennzeichen mit eventuellen Leerzeichen           " & @CRLF & _
    			"    \b(                                                           # falls etwas existiert soll es auch als Group gematcht werden     " & @CRLF & _
    			"        (?:[1-9]|[0-2][0-9]|3[0-2])(?!\.)                         # Die Netzmaske als einfache Zahl (=Anzahl der 1-Bits in der Maske)" & @CRLF & _
    			"        |                                                                                                                            " & @CRLF & _
    			"        (?:(?:0|128|192|224|240|248|252|254)\.0\.0\.0)|(?:255\.(?:(?:(?:0|128|192|224|240|248|252|254)\.0\.0)|(?:255\.(?:(?:(?:0|128|192|224|240|248|252|254)\.0)|255\.(?:0|128|192|224|240|248|252|254|255)))))  # Die Netzmaske als IP-Maske                                       " & @CRLF & _
    			"    )(?:[^\d]|$)                                                                                                                     " & @CRLF & _
    			")\s*$"
    
    
    	Local $a_IPParts = StringRegExp($s_IPpSubnet, $s_Pattern, 3)
    	If @error Then Return SetError(1, @error, 0)
    	Local $b_IP = _IP_BinFromString($a_IPParts[0])
    	If @error Then Return SetError(2, @error, 0)
    	Local $b_SubMask = _IP_SubMask2Bin($a_IPParts[1])
    	If @error Then Return SetError(3, @error, 0)
    
    
    	Local $a_Ret[4] = [_IP_Bin2String(BitAND($b_IP, $b_SubMask)), _IP_Bin2String(BitAND($b_IP, BitNOT($b_SubMask)))]
    	$a_Ret[2] = _IP_2BinString($a_Ret[0])
    	$a_Ret[3] = _IP_2BinString($a_Ret[1])
    	Return $a_Ret
    EndFunc   ;==>_IP2NetHost
    
    
    ; Konvertiert eine Subnetzmaskenangabe (IP- oder Ganzzahlform) in ihre binäre Entsprechung
    Func _IP_SubMask2Bin($s_Subnet)
    	; by AspirinJunkie
    	If StringRegExp($s_Subnet, "^([1-9]|[0-2][0-9]|3[0-2])$") Then ; Ganzzahlform
    		Return Binary(BitNOT((2 ^ (32 - Int($s_Subnet, 1))) - 1))
    	ElseIf StringRegExp($s_Subnet, "^(?:(?:128|192|224|240|248|252|254)\.0\.0\.0)|(?:255\.(?:(?:(?:0|128|192|224|240|248|252|254)\.0\.0)|(?:255\.(?:(?:(?:0|128|192|224|240|248|252|254)\.0)|255\.(?:0|128|192|224|240|248|252|254|255)))))$") Then ; IP-Form
    		Return _IP_BinFromString($s_Subnet)
    	Else
    		Return SetError(1, 0, 0)
    	EndIf
    EndFunc   ;==>_IP_SubMask2Bin
    
    
    ; Konvertiert einen IP-Adressstring in deren binäre Entsprechung
    Func _IP_BinFromString($s_IP)
    	; by AspirinJunkie
    	Local $a_IPParts = StringRegExp($s_IP, '\b(25[0-5]|2[0-4]\d|[01]\d\d|\d?\d)\.(25[0-5]|2[0-4]\d|[01]\d\d|\d?\d)\.(25[0-5]|2[0-4]\d|[01]\d\d|\d?\d)\.(25[0-5]|2[0-4]\d|[01]\d\d|\d?\d)\b', 3)
    	If @error Then Return SetError(1, @error, 0)
    
    
    	Local $d_Ret = 0
    	For $i = 0 To 3
    		$d_Ret += BitShift(Int($a_IPParts[$i], 1), (-3 + $i) * 8)
    	Next
    	Return Binary($d_Ret)
    EndFunc   ;==>_IP_BinFromString
    
    
    ; konvertiert eine binär vorliegende IP-Adresse in deren String-Darstellung
    Func _IP_Bin2String($b_IP)
    	; by AspirinJunkie
    	Local $s_Ret = ""
    	For $i = 0 To 3
    		$s_Ret &= StringFormat("%d.", BitAND(BitShift($b_IP, (3 - $i) * 8), 255))
    	Next
    	Return StringTrimRight($s_Ret, 1)
    EndFunc   ;==>_IP_Bin2String
    
    
    ; Konvertiert eine IP-Adresse (String oder binär) in ihre binäre Stringdarstellung
    Func _IP_2BinString($b_IP)
    	; by AspirinJunkie
    	If IsString($b_IP) Then $b_IP = _IP_BinFromString($b_IP)
    	If @error Then Return SetError(1, @error, "")
    	Local $s_Ret = ""
    	For $i = 1 To 32
    		$s_Ret &= BitAND(BitShift($b_IP, 32 - $i), 1)
    	Next
    	Return $s_Ret
    EndFunc   ;==>_IP_2BinString
    Alles anzeigen
  • IP in IP-Bereich? Zerlegung in Hostbereich und Netzadresse

    • FKFK
    • 1. September 2015 um 19:52

    Hallo alle zusammen,

    ich habe eine Neztadresse mit folgendem Aufbau: 1.2.3.4/24
    Außerdem habe ich eine IP-Adresse mit folgendem Aufbau: 1.2.3.10/24
    Ich möchte herausfinden, ob diese IP in dem Netzbereich (Subnetz) ist oder in einem anderen. Gibt es dafür eine UDF?

    Wahrscheinlich müsste ich anhand der /24 den Netzbereich an der Adresse bestimmen und anschließend schauen, ob die IP denselben Subnetz-Bereich hat.

  • Benutzte Datei trotzdem öffnen

    • FKFK
    • 6. Juli 2015 um 11:43

    Kopieren klappt leider nicht und seltsamerweise gibt FileExists 0 zurück ^^
    Ich habe noch etwas herausgefunden: Diese Situation tritt bei sämtlichen XML-Dateien in dem Verzeichnis auf. Dies betrifft auch XML-Dateien, die dort neu erstelle.
    Kann ich vielleicht Windows-Klassen für das Kopieren benutzen? Mit Windows scheint es zu funktionieren.

  • Benutzte Datei trotzdem öffnen

    • FKFK
    • 1. Juli 2015 um 18:27

    Da diese Fehlermeldung im Windows Explorer kommt, ist es unabhängig vom Code. Das ist eine Config-Datei von dem Programm Empirum. Der entsprechende Fehler ist bekannt und auch bei anderen Organisationen vorhanden.
    Die Datei lässt sich im Windows Explorer nur per Notepad öffnen, alle anderen Programme können dies nicht. Wahrscheinlich weil andere Programme exklusiven Zugriff haben möchten.

  • Benutzte Datei trotzdem öffnen

    • FKFK
    • 1. Juli 2015 um 16:13

    Ich habe gehofft, diese Lösung umgehen zu können.
    Noch eine Info: Als Fehlermeldung beim Öffnen kommt: "xy konnte nicht gefunden werden"

  • Benutzte Datei trotzdem öffnen

    • FKFK
    • 1. Juli 2015 um 14:23

    FileOpen 0 hat leider nichts gebracht.

    //edit: Kann ich über irgendwelche Windows-Klassen arbeiten? Notepad schafft das ja auch irgendwie :)

  • Benutzte Datei trotzdem öffnen

    • FKFK
    • 1. Juli 2015 um 14:11

    Hallo alle zusammen,

    ich habe eine XML-Datei, die ich mit AutoIt auslesen möchte.
    Leider ist diese XML-Datei in Benutzung. Weil sie in Benutzung ist, lässt sie sich von keinem Programm, außer Notepad öffnen.
    RequireAdmin hat keinen Erfolg gebracht, da es keine Berechtigungsfrage ist.

    Wie kann ich mit AutoIt eine Datei auslesen, die aktuell in Benutzung ist? Notepad schafft es ja auch :)

    LG FKFK

  • For In Next mit Unterobjekten von Objekten

    • FKFK
    • 8. Dezember 2014 um 18:20

    Sorry, ich habe es nachgetragen.

    In der UDF gibt es die Funktion Tree_Append. Diese regelt das. Wie kann man denn Objekte bei Value verschachteln? Es gibt doch sowieso immer nur eine Referenz zu einem Objekt?

    [autoit]

    Func __Tree_Append($oSelf, $sKey, $vValue = Null)
    Local $avKeys = $oSelf.keys

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

    If $oSelf.exists($sKey) Then
    Return False
    Else
    _AutoItObject_AddProperty($oSelf, $sKey, $ELSCOPE_PUBLIC, $vValue)
    ReDim $avKeys[$avKeys[0] +2]
    $avKeys[0] += 1
    $avKeys[$avKeys[0]] = StringLower($sKey)
    $oSelf.keys = $avKeys
    EndIf

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

    Return True
    EndFunc

    [/autoit][autoit][/autoit][autoit][/autoit]
  • "Tree"-Variable

    • FKFK
    • 8. Dezember 2014 um 15:28

    Yeah, du hast mich auf eine genial Idee gebracht!
    $oTree.1 geht nicht, aber $oTree._1 geht. => Ich habe nun "_" & $i als Fortlaufende Nummerierung :)

    Da ich die Objektsammlung mit For In Next durchgehen wollte und das nicht geklappt hat, habe ich einen Thread eröffnet: autoit.de/index.php/Thread/46033-For-In-Next-mit-Unterobjekten-von-Objekten/?postID=365155#post365161
    Eigentlich dachte ich, es wäre eine einfache Lösung und wollte somit diesen Thread hier nicht zumüllen

    //edit: Sorry, dass ich noch etwas nachfrage: Ich muss die einzelnen Ebenen ja rekursiv abklappern können. Meines Wissens geht das nur indem ich den Objektnamen dynamisch benenne. Es geht allerdings weder per &-Operator noch per Eval:

    [autoit]

    $oTreeChilds = Eval("$oTree." & $oTree.keys[$i])
    $oTreeChilds = $oTree. & $oTree.keys[$i]
    $oTreeChilds = $oTree. & Eval($oTree.keys[$i])

    [/autoit]


    Hast du oder jemand anderes noch einen Tipp für mich?

  • For In Next mit Unterobjekten von Objekten

    • FKFK
    • 8. Dezember 2014 um 15:13

    Das Objekt kommt aus einer UDF, die Objekte erzeugt, die wieder Objekte enthalten kann, siehe unten. Die entscheidende Frage ist ja erst einmal: Kann die Variable, der ein Element zugewiesen wird ($oTreeChilds) überhaupt ein Objekt sein?

    Seltsamerweise wird weder 1) noch 2) angezeigt.

    Meine Funktion:

    [autoit]

    $oTree = _FromPathToTree('\\LAREN2\Fachbereichuebergreifend$\', _AttribRules, 2)
    For $oTreeChilds In $oTree ;Durchläuft Childs des Tree
    MsgBox(0, "", "1");;; 1)
    MsgBox(0, "Type", VarGetType($oTreeChilds));;; 2)
    Next

    [/autoit]
    _AttribRules
    [autoit]


    Func _AttribRules($sPath)
    $sAttrib = FileGetAttrib($sPath)
    ;~ If MsgBox(0, $sPath, StringRegExp($sPath, '(?i)\.lnk(?!.)'), 1);;;
    If StringRegExp($sPath, '(?i)\.lnk(?!.)') Then Return True ;Wenn Verknüpfung dann OK
    Return StringRegExp($sAttrib, '[D]') ;Wenn Directory dann OK, sonst nicht
    EndFunc ;==>_AttribRules

    [/autoit]
    _FromPathToTree-Funktion
    [autoit]


    Func _FromPathToTree($sPath, $hRules, $iLevel = -1)
    Local $oTree = _Tree_Object()
    Local $hFile = FileFindFirstFile($sPath & '*')
    Local $sFile = FileFindNextFile($hFile)
    Local $bDir = @extended
    Local $bRules, $sKey, $vTmp, $i = 0

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

    $oTree.append('__obj__') = $sPath ; Fügt Pfad hinzu immer an erster Stelle im Array

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

    If $iLevel Then
    While $sFile
    $bRules = $hRules($sPath & $sFile)

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

    If 1 Then ;$bRules Then
    ;~ $sKey = StringRegExpReplace($sFile, '[^a-zA-Z_]', '')
    $i += 1
    $sKey = $i
    If $bDir Then
    $vTmp = _FromPathToTree($sPath & $sFile & '\', $hRules, $iLevel - 1)
    $oTree.append($sKey) = ((IsObj($vTmp)) ? ($vTmp) : ($sPath & $sFile))
    Else
    $oTree.append($sKey) = $sPath & $sFile
    EndIf
    EndIf

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

    $sFile = FileFindNextFile($hFile)
    $bDir = @extended
    WEnd
    Else
    FileClose($hFile)
    Return
    EndIf

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

    FileClose($hFile)
    Return $oTree
    EndFunc ;==>_FromPathToTree

    [/autoit]
    Tree-UDF
    [autoit]


    ; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +

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

    #include-once
    #include <AutoItObject.au3>

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

    _AutoItObject_Startup()
    OnAutoItExitRegister('__Tree_UDF')

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

    ; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +

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

    Func _Tree_Object()
    Local $aiArr[1] = [0]

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

    Local $oTree = _AutoItObject_Create()
    ; PUBLIC
    _AutoItObject_AddMethod($oTree, 'append', '__Tree_Append')
    _AutoItObject_AddMethod($oTree, 'exists', '__Tree_Exists')
    _AutoItObject_AddMethod($oTree, 'remove', '__Tree_Remove')
    _AutoItObject_AddMethod($oTree, 'insert', '__Tree_Insert')
    _AutoItObject_AddMethod($oTree, 'copy', '__Tree_Copy')
    ; READONLY
    _AutoItObject_AddProperty($oTree, 'keys', $ELSCOPE_READONLY, $aiArr)

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

    Return $oTree
    EndFunc

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

    ; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +

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

    Func __Tree_Append($oSelf, $sKey, $vValue = Null)
    Local $avKeys = $oSelf.keys

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

    If $oSelf.exists($sKey) Then
    Return False
    Else
    _AutoItObject_AddProperty($oSelf, $sKey, $ELSCOPE_PUBLIC, $vValue)
    ReDim $avKeys[$avKeys[0] +2]
    $avKeys[0] += 1
    $avKeys[$avKeys[0]] = StringLower($sKey)
    $oSelf.keys = $avKeys
    EndIf

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

    Return True
    EndFunc

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

    Func __Tree_Exists($oSelf, $sKey)
    Local $avKeys = $oSelf.keys
    Local $i

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

    For $i = 1 To $avKeys[0]
    If $avKeys[$i] = $sKey Then Return $i
    Next

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

    Return False
    EndFunc

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

    Func __Tree_Remove($oSelf, $sKey)
    Local $avKeys = $oSelf.keys
    Local $iPos, $i

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

    If $sKey Then
    $iPos = $oSelf.exists($sKey)
    If $iPos Then
    Execute('$oSelf.' & $sKey & ' = Null')
    For $i = $iPos To $avKeys[0] -1
    $avKeys[$i] = $avKeys[$i +1]
    Next
    ReDim $avKeys[$avKeys[0]]
    $avKeys[0] -= 1
    $oSelf.keys = $avKeys
    Else
    Return False
    EndIf
    EndIf

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

    Return $oSelf
    EndFunc

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

    Func __Tree_Insert($oSelf, $sKey)
    Local $oTmp = $oSelf.copy

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

    $oSelf = _Tree_Object()
    $oSelf.append($sKey) = $oTmp

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

    Return $oSelf
    EndFunc

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

    Func __Tree_Copy($oSelf)
    Local $oTmp = _AutoItObject_Create($oSelf)

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

    Return $oTmp
    EndFunc

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

    ; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +

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

    Func __Tree_UDF()
    _AutoItObject_Shutdown()
    EndFunc

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

    ; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +

    [/autoit]
  • For In Next mit Unterobjekten von Objekten

    • FKFK
    • 8. Dezember 2014 um 12:46

    Hallo alle zusammen,

    ich habe folgende Objektstruktur: oHauptobjekt.oUnterobjekt.oUnterUnterobjekt.Attribut
    Diese Struktur wollte ich eigentlich mit

    [autoit]

    For $oUnterobjekt In oHauptobjekt

    [/autoit]


    durchgehen.
    Das hat nicht funktioniert.
    Was habe ich falsch gemacht?

    LG

  • "Tree"-Variable

    • FKFK
    • 8. Dezember 2014 um 12:42

    Was mir noch aufgefallen ist: Wenn ich einen Ordner "Test" und den anderen "Test$" genannt habe, dann gibt es nur den Ordner "Test", weil Objekte ja keine Sonderzeichen akzeptieren.
    Eigentlich wollte ich die Namen nun per Integer hochzählen, allerdings werden ja keine Zahlen als Objektnamen genommen. Kann ich irgendwie Buchstaben hochzählen?

  • "Tree"-Variable

    • FKFK
    • 1. Dezember 2014 um 15:25

    Das klappt jetzt schon prima :)
    Du hast eine Zeile hinzugefügt, die gewisse Zeichen aus dem String schneidet:
    $sKey = StringRegExpReplace($sFile, '[^a-zA-Z_]', '')
    Wird das benötigt, weil die Objektnamen nur diese Zeichen können?
    Dann kann ich die Ordnerstruktur wohl doch nur anhand der Werte der Blätter aufbauen statt der Namen und ich muss alle Werte der Blätter durchgehen, wenn ich das richtige finden will. Wenn z.B. Punkte oder Leerzeichen bei Dateinamen fehlen, kann ich ja sonst nicht die richtige Datei finden :)
    Alternativ könnte ich noch bei dem gesuchten Ordner ein StringRegExpReplace machen und dadurch die Auswahl auf mehrere einzelne Objekte reduzieren.

  • "Tree"-Variable

    • FKFK
    • 28. November 2014 um 12:58

    Ah, dann ist jeder Knoten = Objekt :)
    Kann das sein, dass ich in meinem Beispiel oben da irgendetwas falsch verstanden habe?

  • "Tree"-Variable

    • FKFK
    • 27. November 2014 um 19:14

    Vielen Dank, richtig genial :)

    Noch ein paar Verständnis-Fragen:
    Gehen bei OnAutoItExitRegister mehrere Funktionen?
    So, wie ich das verstanden habe, gibt $oTree.exists aus, an welcher Stelle das Blatt auf der Ebene ist?
    Knoten können keine Werte haben und Blätter können keine Knoten werden?
    Append hängt ein Blatt am Schluss an oder ein Knoten mit Blättern?
    Insert hängt einen Knoten direkt an die Root und zwischen alle bisherigen Knoten und Blätter?

    Ich habe mal die Ordner-Funktion zum Test erweitert, allerdings funktioniert nur der erste ArrayDisplay. Was habe ich falsch gemacht:

    Spoiler anzeigen
    [autoit]


    #cs ----------------------------------------------------------------------------

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

    AutoIt Version: 3.3.10.2
    Author: myName

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

    Script Function:
    Template AutoIt script.

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

    #ce ----------------------------------------------------------------------------

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

    ; Script Start - Add your code below here
    ; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +

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

    #include <Array.au3>
    #include ".\include\Tree.au3"

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

    ; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +

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

    Global $oTree = _FromPathToTree('C:\Users\abc\', _AttribRules, 4)
    Global $avKeys[2] = [$oTree.AppData.Keys, $oTree.AppData.Boot.Keys]
    Global $sPath[2] = [$oTree.AppData.Local, $oTree.AppData.Local.Adobe] ; Zugriff auf untergeordnete Knotenpunkte

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

    For $i = 0 To UBound($sPath)-1
    MsgBox(0x40000, 'Tree', $sPath[$i])
    Next
    For $i = 0 To UBound($avKeys)-1
    _ArrayDisplay($avKeys[$i])
    Next

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

    ; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +

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

    Func _FromPathToTree($sPath, $hRules, $iLevel = -1)
    Local $oTree = _Tree_Object()
    Local $hFile = FileFindFirstFile($sPath & '*')
    Local $sFile = FileFindNextFile($hFile)
    Local $bDir = @extended
    Local $bRules, $sKey, $vTmp

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

    If $iLevel Then
    While $sFile
    $bRules = $hRules($sPath & $sFile)

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

    If $bRules Then
    $sKey = StringRegExpReplace($sFile, '[^a-zA-Z_]', '')
    If $bDir Then
    $vTmp = _FromPathToTree($sPath & $sFile & '\', $hRules, $iLevel - 1)
    $oTree.append($sKey) = ((IsObj($vTmp)) ? ($vTmp) : ($sPath & $sFile))
    Else
    $oTree.append($sKey) = $sPath & $sFile
    EndIf
    EndIf

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

    $sFile = FileFindNextFile($hFile)
    $bDir = @extended
    WEnd
    Else
    FileClose($hFile)
    Return
    EndIf

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

    FileClose($hFile)
    Return $oTree
    EndFunc ;==>_FromPathToTree

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

    Func _AttribRules($sPath)
    $sAttrib = FileGetAttrib($sPath)
    Return StringRegExp($sAttrib, '[D]')
    EndFunc ;==>_AttribRules

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

    ; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +

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

    Ich denke, die UDF sollte im Forum so verfügbar gemacht werden, dass auch noch andere sie nutzen können :)

  • "Tree"-Variable

    • FKFK
    • 25. November 2014 um 15:40
    Zitat von Make-Grafik

    Ja. das mit dem ausloggen geht einem auf die Nerven. KA wie lange es dauert bis man gekickt wird.

    Oscar hat mir gerade den Tipp gegeben, dass ich die Cookies löschen muss, weil das neue Board nicht mit den alten zurechtkommt. Jetzt funktioniert alles :)

  • "Tree"-Variable

    • FKFK
    • 25. November 2014 um 14:03

    Würdest du bei OOP etwa mit Arrays arbeiten?
    Wenn ich einen Knoten lösche, muss ich ja alle anderen Knoten durchgehen und dort die Nummer ändern. Das ist momentan so mein Hauptproblem

    Mein Ziel ist es:
    Ordnerstruktu, Dateien und Berechtigungen in einem Tree1 zu speichern. Bei dem Speichern würde ich gerne vorher auswählen, was rein soll.
    Aus einer CSV-Datei importiere ich eine weitere Struktur nach Tree2 (das läuft momentan noch über ein Array).
    Danach stelle beide Trees gegenüber. Diese Trees werden dann in den zukünftigen Tree3 überführt, entweder anhand von automatischen Regeln oder einer GUI.
    Tree3 wird dann auf die vorhandene Struktur angewendet und diese entsprechend angepasst (Ordner, Verknüpfungen und Berechtigungen).

    Ich könnte sicherlich auch mit _GUICtrlTreeView arbeiten, allerdings benötige ich dann immer eine GUI und darauf möchte ich verzichten. Schließlich muss ich ja Operationen auf den Tree im Hintergrund ausführen, z.B. die ganzen Ordner etc. erstellen. Oder soll ich das Fenster dann unsichtbar im Hintergrund offen lassen?

  • Powershell Command aus AUTOIT ausführen

    • FKFK
    • 25. November 2014 um 13:29

    Es gibt zwei getrennte Aufgaben:

    • Erstellung der Gruppen im AD

      • AD.au3 ist die Library mit den AD-UDFs, da gibt es gute Hilfedateien zu den Befehlen: http://www.autoitscript.com/forum/topic/10…-directory-udf/
      • _AD_Open() am Anfang
      • Meine Funktion ADInteraktion erstellt über den Befehl _AD_CreateGroup die Gruppe im AD
      • _AD_Close() durch OnAutoItExitRegister am Schluss
    • Erstellung der Berechtigungen in den Ordnern (kein AD-Zugriff notwendig)

      • Permissions.au3 ist die Library mit den Berechtigungs-UDFs: http://www.autoitscript.com/forum/topic/13…ermissions-udf/
      • _EditObjectPermissions (behält vorhandene) oder _SetObjectPermissions (löscht vorhandene) für die Berechtigungsänderungen. Die Befehle sind auch in der permissions.au3 erklärt
      • Ich habe in meinem Skript die Befehle noch um eine Fehlerbehandlung ergänzt.
      • Für das Setzen der Berechtigungen sind (leider) volle Admin-Rechte notwendig. Wenn ich mich richtig erinnere, hat requireadmin nichts genutzt
  • "Tree"-Variable

    • FKFK
    • 25. November 2014 um 11:15

    Hm, dann bastle ich damit am besten eine Tree-Klasse :)
    Bin jetzt noch am überlegen wegen den Insert- und Delete-Operationen. Sinnvoll wäre hier StringRegExpReplace oder?
    Wie würdest du die Funktion programmieren, um einen Knoten einzufügen oder zu löschen an einer bestimmten Position?

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™