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

Beiträge von DasIch

  • Multiple Arrays befüllen...

    • DasIch
    • 22. September 2015 um 13:44

    Ich habe den Code mal ein bisschen aufgeräumt und die unnötigen Schleifen entfernt. Bitte schau dir das mal an und beschreibe uns nochmals, wo genau der hase im pfeffer liegt. Wir besitzen leider die excel datei nicht, und können daher nur syntaktisch suchen, nicht aber logisch.

    Lieben Dank.

    Hier der Code:

    Spoiler anzeigen
    AutoIt
    #cs ----------------------------------------------------------------------------
    
    
     AutoIt Version: 3.3.14.2
     Author:         Björn Alles
    
    
     Script Function:
    	Template AutoIt script.
    
    
    #ce ----------------------------------------------------------------------------
    
    
    ; Script Start - Add your code below here
    
    
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <array.au3>
    #include <Excel.au3>
    
    
    #Region Neuer Fall
    $GUI_Neuer_Fall = GUICreate("F4 - Erfassung eines neuen Falls", 710, 624, 192, 124)
    $Miete_text = GUICtrlCreateLabel("Miete:", 16, 16, 33, 25)
    $Miete_input = GUICtrlCreateInput("", 56, 16, 49, 21)
    $NKO = GUICtrlCreateLabel("NKO:", 136, 16, 30, 17)
    $nko_input = GUICtrlCreateInput("", 168, 16, 65, 21)
    $Whg_Nr_txt = GUICtrlCreateLabel("Whg#Teil#:", 272, 16, 61, 17)
    $Whg_Nr = GUICtrlCreateInput("", 336, 16, 113, 21)
    $Priv_Nr_Txt = GUICtrlCreateLabel("Priv#:", 472, 16, 32, 17)
    $Priv_Nr_Input = GUICtrlCreateInput("", 504, 16, 33, 21)
    $Datum_txt = GUICtrlCreateLabel("Datum:", 552, 16, 38, 17)
    $Datum_Input = GUICtrlCreateInput("", 592, 16, 65, 21)
    $Status_Txt = GUICtrlCreateLabel("Status:", 8, 48, 37, 17)
    $tButton = GUICtrlCreateButton("Test",200,200)
    $tButton2 = GUICtrlCreateButton("Excel",300,300)
    GUISetBkColor(0xA6CAF0)
    GUISetState(@SW_DISABLE, $GUI_Neuer_Fall)
    #EndRegion Neuer Fall
    
    
    #Region Grundfenster
    GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
    $Grundfenster = GUICreate("F4 - Startfenster", 615, 437, 192, 124)
    $neuer_fall = GUICtrlCreateButton("Neuer Fall", 24, 24, 145, 41)
    $fall_suchen = GUICtrlCreateButton("Fall Suchen", 24, 72, 145, 41)
    GUISetBkColor(0xA6CAF0)
    GUISetState(@SW_SHOW,$Grundfenster)
    #EndRegion Grundfenster
    
    
    #Region Variablen
    $filepath = 'U:\test2.xlsx' ; Pfad der Exceldatei
    
    
    ;-------------------------------------ARRAYS ERZEUGEN----------------------------------------;
    
    
    Dim $array_Miete[1] ;dynamisches Array wird erzeugt ------ MIETE
    Dim $array_NKO[1] ;dynamisches Array wird erzeugt ------  NKO
    Dim $array_Priv[1];dynamisches Array wird erzeugt ------ PRIV
    Dim $array_Date[1];dynamisches Array wird erzeugt ------ DATE
    Dim $array_Status[1];dynamisches Array wird erzeugt ------ STATUS
    Dim $array_Asyla[1];dynamisches Array wird erzeugt ------ ASYLA
    Dim $array_Folge[1];dynamisches Array wird erzeugt ------ FOLGE
    Dim $array_Tel[1];dynamisches Array wird erzeugt ------ TEL
    Dim $array_PKSneu[1];dynamisches Array wird erzeugt ------ PKSneu
    Dim $array_Schuld[1];dynamisches Array wird erzeugt ------ SCHULD
    Dim $array_Geb[1];dynamisches Array wird erzeugt ------ GEB
    Dim $array_PKSalt[1];dynamisches Array wird erzeugt ------ nationalitaet
    Dim $array_Personen_Ges[1];dynamisches Array wird erzeugt ------ PERSONEN_GES
    Dim $array_Attest[1];dynamisches Array wird erzeugt ------ ATTEST
    Dim $array_Buchungsstelle[1];dynamisches Array wird erzeugt ------ Buchungsstelle
    Dim $array_Abg_Bz[1];dynamisches Array wird erzeugt ------ ABG_BZ
    Dim $array_Heim[1];dynamisches Array wird erzeugt ------ HEIM
    Dim $array_Buchungsstelle_Neu[1];dynamisches Array wird erzeugt ------ BUCHUNGSSTELLE_NEU
    Dim $array_Ordnungsverf[1];dynamisches Array wird erzeugt ------ ORDNUNGSVERFUEGUNG
    Dim $array_Selbstzahl[1];dynamisches Array wird erzeugt ------ SELBSTZAHL
    Dim $array_Wohnhaft_Ab[1];dynamisches Array wird erzeugt ------ WOHNHAFT_AB
    Dim $array_Auszug_Zum[1];dynamisches Array wird erzeugt ------ AUSZUG_ZUM
    Dim $array_Verz_Von[1];dynamisches Array wird erzeugt ------ VERZ_VON
    Dim $array_Monatssoll[1];dynamisches Array wird erzeugt ------ MONATSSOLL
    Dim $array_Datum_Frage[1];dynamisches Array wird erzeugt ------ DATUM_FRAGE
    Dim $array_Ort1[1];dynamisches Array wird erzeugt ------ ORT_1
    #EndRegion Variablen
    
    
    #Region Excel
    Local $oExcel = _Excel_Open('false') ; öffnet Excel  ohne das der User es sieht
    If @error Then Exit MsgBox($MB_SYSTEMMODAL, "Excel UDF: _Excel_RangeWrite Example", "Error creating the Excel application object." & @CRLF & "@error = " & @error & ", @extended = " & @extended); Error handling
    Local $oWorkbook = _Excel_BookOpen($oExcel,$filepath); öffnet die Excel  ohne das der User es sieht
    If @error Then
    	MsgBox($MB_SYSTEMMODAL, "Excel UDF: _Excel_RangeWrite Example", "Error creating the new workbook." & @CRLF & "@error = " & @error & ", @extended = " & @extended); Error handling
    	_Excel_Close($oExcel); Schließt die Exceldatei
    	Exit
    EndIf
    
    
    $array_Miete = _Excel_RangeRead($oWorkbook, Default, $oWorkbook.ActiveSheet.Usedrange.Columns("A:A"), 2) ; liest die Daten der Spalte A in das Array ein
    $array_NKO = _Excel_RangeRead($oWorkbook,Default,$oWorkbook.ActiveSheet.Usedrange.Columns("B:B"),2)
    If @error Then Exit MsgBox($MB_SYSTEMMODAL, "Excel UDF: _Excel_RangeRead Example 3", "Error reading from workbook." & @CRLF & "@error = " & @error & ", @extended = " & @extended);Error Handling
    MsgBox($MB_SYSTEMMODAL, "Excel UDF: _Excel_RangeRead Example 3", "Data successfully read." & @CRLF & "Please click 'OK' to display all formulas in column A.");Error Handling
    _Excel_Close($oExcel)
    _ArrayDisplay($array_Miete, "Excel UDF: _Excel_RangeRead Example 3 - Formulas in column A");Gibt das Array mit den eingelesenen Daten aus
    #EndRegion Excel
    
    
    While 1
    
    
    	$nMsg = GUIGetMsg(1)
    	Switch $nMsg[0]
    		Case $GUI_EVENT_CLOSE
    			Switch $nMsg[1]
    				Case $Grundfenster
    					Exit
    
    
    				Case Else
    					GUISetState(@SW_SHOW, $Grundfenster)
    					GUISetState(@SW_HIDE, $nMsg[1])
    					GUISetState(@SW_DISABLE, $nMsg[1])
    					GUISwitch($Grundfenster)
    			EndSwitch
    
    
    		Case $neuer_fall ;
    			If @error Then
    				MsgBox(1,"ERROR","ERROR")
    			Else
    				_GUI_Neuer_Fall()
    			EndIf
    
    
    		Case $tButton
    			_Array_Fuellen()
    
    
    		Case $tButton2
    			_Array_Speichern()
    
    
    	EndSwitch
    WEnd
    
    
    ;---------------------------------------FUNKTION NEUER FALL---------------------------;
    
    
    Func _GUI_Neuer_Fall()
    
    
    	GUISetState(@SW_ENABLE, $GUI_Neuer_Fall)
    	GUISwitch($GUI_Neuer_Fall)
    	GUISetState(@SW_SHOW)
    
    
    EndFunc
    
    
    ;-------------------------------------ARRAY FUELLEN------------------------------------;
    Func _Array_Fuellen()
    	;Miete
    	$mieteData = GUICtrlRead($Miete_input) ; Legt das Feld fest, das in das Array eingelesen werden soll
    	If $mieteData <> '' Then ;falls das Feld Leer ist wird der Ubound nicht erhöht
    		if $array_Miete[UBound($array_Miete)-1] Then ;Erweiterung des dynamischen Arrays
    			ReDim $array_Miete[UBound($array_Miete)+1] ; erzeugt eine neue Spalte im dynamischen Array
    		EndIf
    		$array_Miete[UBound($array_Miete)-1] = $mieteData ;Schreibt in die neue Spalte
    	EndIf
    
    
    	;NKO
    	$nkoData = GUICtrlRead($nko_input) ; Legt das Feld fest, das in das Array eingelesen werden soll
    	If $nkoData <> '' Then ;falls das Feld Leer ist wird der Ubound nicht erhöht
    		if $array_NKO[UBound($array_NKO)-1] Then ;Erweiterung des dynamischen Arrays
    			ReDim $array_NKO[UBound($array_NKO)+1] ; erzeugt eine neue Spalte im dynamischen Array
    		EndIf
    		$array_NKO[UBound($array_NKO)-1] = $nkoData ;Schreibt in die neue Spalte
    	EndIf
    
    
    	_ArrayDisplay($array_NKO);Zeigt das gefüllte Array mit den vorher kopierten Daten an
    EndFunc
    
    
    Func _Array_Speichern()
    	_Excel_RangeWrite($oWorkbook, $oWorkbook.Activesheet, $array_Miete); Schreibt das Array in die Exceldatei
    	_Excel_RangeWrite($oWorkbook, $oWorkbook.ActiveSheet, $array_NKO, 'B1')
    	If @error Then Exit
    ;~ 	MsgBox($MB_SYSTEMMODAL, "Excel UDF: _Excel_RangeWrite Example 2", "Error writing to worksheet." & @CRLF & "@error = " & @error & ", @extended = " & @extended); Error handling
    ;~ 	MsgBox($MB_SYSTEMMODAL, "Excel UDF: _Excel_RangeWrite Example 2", "1D array successfully written.")
    	_Excel_BookSave($oWorkbook) ;Workbook wird gespeichert
    	_Excel_BookClose($oWorkbook)
    EndFunc
    Alles anzeigen
  • Was mache ich falsch ?

    • DasIch
    • 15. September 2015 um 15:56

    Schau dir mal Assign() und Eval() an:

    AutoIt
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    
    
    $frmMain = GUICreate("", 300, 300)
    For $i = 1 To 10
    	Assign("Input" & $i, GUICtrlCreateLabel("temp " & Random(0, 10, 1), 8, 8+($i*20)), 2)
    Next
    GUISetState(@SW_SHOW, $frmMain)
    
    
    For $nbr = 1 to 10
    	Dim $test1 = '$inputt' & $nbr
    	Local $test2 =  GUICtrlRead (Eval("Input" & $nbr))
    	ConsoleWrite($test1  & ' ' & $test2 & @CR)
    ;~ 	if $test2 = 0 Then MsgBox (0,"Fehler","Es sind Fehler aufgetaucht!")
    Next
    MsgBox(0, "", "Pause")
    Alles anzeigen
  • _AD_GetGroupMembers der AD.au3

    • DasIch
    • 15. September 2015 um 12:17

    Okay, fixed.

    Danke an alle Beteiligten :)

    Spoiler anzeigen
    AutoIt
    #include <GuiListView.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <ad.au3>
    #include <GUIListBox.au3>
    
    
    $frmGroupView = GUICreate("Gruppenmitglieder", 986, 516)
    $Ber_lstGruppen = GUICtrlCreateList("", 8, 8, 200, 500, BitOR($gui_ss_default_list, $ws_hscroll, $lbs_extendedsel))
    GUICtrlSetData(-1, "Gruppe 1|Gruppe2|Gruppe3|Gruppe4|Gruppe5")
    $frmGrp_lstGroupView = GUICtrlCreateListView("", 210, 8, 768, 500, BitOR($WS_HSCROLL, $WS_VSCROLL))
    $Ber_conUserWahl = GUICtrlCreateContextMenu($Ber_lstGruppen)
    $Ber_conGroupView = GUICtrlCreateMenuItem("Gruppenmitglieder anzeigen", $Ber_conUserWahl)
    GUISetState(@SW_SHOW, $frmGroupView)
    _AD_Open()
    
    
    While 1
    	$nMsg = GUIGetMsg()
    	Switch $nMsg
    		Case $GUI_EVENT_CLOSE
    			_AD_Close()
    			Exit
    
    
    		Case $Ber_conGroupView
    			_GUICtrlListView_DeleteAllItems($frmGrp_lstGroupView)
    			For $i = 0 To _GUICtrlListView_GetColumnCount($frmGrp_lstGroupView)
    				_GUICtrlListView_DeleteColumn($frmGrp_lstGroupView, $i)
    			Next
    			_GUICtrlListView_DeleteColumn($frmGrp_lstGroupView,0)
    			_GroupView()
    
    
    
    
    	EndSwitch
    WEnd
    
    
    
    
    Func _GroupView()
    	Local $cnt = UBound(_GUICtrlListBox_GetSelItems($Ber_lstGruppen))-1 ;Anzahl der ausgewählten Gruppen aus der Liste
    	Local $names = _GUICtrlListBox_GetSelItemsText($Ber_lstGruppen) ;ausgewählte Gruppen aus der Liste
    	_ArrayDelete($names, 0)
    	If $cnt < 1 Then
    		MsgBox(0, "", "Bitte wählen Sie mindestens eine Gruppe aus!")
    	Else
    		For $i = 0 To $cnt - 1
    			_GUICtrlListView_AddColumn($frmGrp_lstGroupView, String($names[$i]), 150, 0) ;Überschriften füllen
    		Next
    		For $grp In $names
    			$grp = _AD_SamAccountNameToFQDN($grp) ;Umwandeln des SamAccountName zum FQDN
    			local $aGrpMember = _AD_GetGroupMembers($grp) ;Einlesen der Grp-Member
    			local $sMemberFull, $sMember = ""
    			_ArrayDelete($aGrpMember, 0)
    			For $i = 0 To UBound($aGrpMember) - 1
    				$aGrpMember[$i] = _AD_FQDNToSamAccountName($aGrpMember[$i]) ;Umwandeln des jeweiligen Usernames zum Displayname
    			Next
    			_ArraySort($aGrpMember, 0)
    			For $i = 0 To UBound($aGrpMember) - 1
    				If $i = UBound($aGrpMember) - 1 Then
    					$sMember = $sMember & $aGrpMember[$i]
    					If $grp = $names[0] Then
    						$sMemberFull = $sMember
    					Else
    						$sMemberFull = $sMemberFull & "#" & $sMember
    					EndIf
    				Else
    					$sMember = $sMember & $aGrpMember[$i] & ";"
    				EndIf
    			Next ;>> Erstellen eines Strings der Usernames
    		Next
    		local $aMemberFull = StringSplit($sMemberFull, "#") ;Erstellen eines 1D-Arrays
    		_ArrayDelete($aMemberFull, 0)
    		_ArrayDelete($aMemberFull, 0)
    		local $aMemberArray[1][UBound($aMemberFull)] ;Initialisieren eines 2D-Arrays
    		For $i = 0 To UBound($aMemberFull) - 1
    			$aMemberDetail = StringSplit($aMemberFull[$i], ";")
    			_ArrayDelete($aMemberDetail, 0)
    			If UBound($aMemberDetail) - 1 > UBound($aMemberArray) - 1 Then
    				ReDim $aMemberArray[UBound($aMemberDetail)][UBound($aMemberFull)]
    			EndIf
    			For $j = 0 To UBound($aMemberDetail) - 1
    				$aMemberArray[$j][$i] = $aMemberDetail[$j]
    			Next
    		Next
    		_GUICtrlListView_AddArray($frmGrp_lstGroupView, $aMemberArray) ;>> eintragen der Usernamen in die listview
    	EndIf
    EndFunc
    Alles anzeigen
  • _AD_GetGroupMembers der AD.au3

    • DasIch
    • 15. September 2015 um 09:11

    Ich bin begeistert. Damit geht es! :D

    Jetzt muss ich nur noch rausfinden, warum die erste Spalte immer leer bleibt ^^ Ich editiere mal den Code im Eingangspost und halte ihn aktuell, dann muss man nicht immer die Beiträge suchen, in denen der aktuelle Code steht.

  • _AD_GetGroupMembers der AD.au3

    • DasIch
    • 15. September 2015 um 08:24

    Sooooo, hier ein lauffähiger Code. Allerdings ist mir gerade aufgefallen, dass die erste Gruppe irgendwie nicht durchflogen wird ^^ da muss ich auch nochmal schauen..

    Spoiler anzeigen
    AutoIt
    #include <GuiListView.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <ad.au3>
    #include <GUIListBox.au3>
    
    
    $frmGroupView = GUICreate("Gruppenmitglieder", 986, 516)
    $Ber_lstGruppen = GUICtrlCreateList("", 8, 8, 200, 500, BitOR($gui_ss_default_list, $ws_hscroll, $lbs_extendedsel))
    GUICtrlSetData(-1, "Gruppe 1|Gruppe2|Gruppe3|Gruppe4|Gruppe5")
    $frmGrp_lstGroupView = GUICtrlCreateListView("", 210, 8, 768, 500, BitOR($WS_HSCROLL, $WS_VSCROLL))
    $Ber_conUserWahl = GUICtrlCreateContextMenu($Ber_lstGruppen)
    $Ber_conGroupView = GUICtrlCreateMenuItem("Gruppenmitglieder anzeigen", $Ber_conUserWahl)
    GUISetState(@SW_SHOW, $frmGroupView)
    _AD_Open()
    
    
    While 1
    	$nMsg = GUIGetMsg()
    	Switch $nMsg
    		Case $GUI_EVENT_CLOSE
    			_AD_Close()
    			Exit
    
    
    		Case $Ber_conGroupView
    			_GroupView()
    
    
    	EndSwitch
    WEnd
    
    
    
    
    Func _GroupView()
    	Local $cnt = UBound(_GUICtrlListBox_GetSelItems($Ber_lstGruppen))-1 ;Anzahl der ausgewählten Gruppen aus der Liste
    	Local $names = _GUICtrlListBox_GetSelItemsText($Ber_lstGruppen) ;ausgewählte Gruppen aus der Liste
    	_ArrayDelete($names, 0)
    	If $cnt < 1 Then
    		MsgBox(0, "", "Bitte wählen Sie mindestens eine Gruppe aus!")
    	Else
    		For $i = 0 To $cnt - 1
    			_GUICtrlListView_AddColumn($frmGrp_lstGroupView, String($names[$i]), 150, 0) ;Überschriften füllen
    		Next
    		For $grp In $names
    			$grp = _AD_SamAccountNameToFQDN($grp) ;Umwandeln des SamAccountName zum FQDN
    			local $aGrpMember = _AD_GetGroupMembers($grp) ;Einlesen der Grp-Member
    			local $sMemberFull, $sMember = ""
    			_ArrayDelete($aGrpMember, 0)
    			For $i = 0 To UBound($aGrpMember) - 1
    				$aGrpMember[$i] = _AD_FQDNToDisplayname($aGrpMember[$i]) ;Umwandeln des jeweiligen Usernames zum Displayname
    			Next
    			_ArraySort($aGrpMember, 0)
    			For $i = 0 To UBound($aGrpMember) - 1
    				If $i = UBound($aGrpMember) - 1 Then
    					$sMember = $sMember & $aGrpMember[$i]
    					If $grp = $names[0] Then
    						$sMemberFull = $sMember
    					Else
    						$sMemberFull = $sMemberFull & "#" & $sMember
    					EndIf
    				Else
    					$sMember = $sMember & $aGrpMember[$i] & ";"
    				EndIf
    			Next ;>> Erstellen eines Strings der Usernames
    		Next
    		local $aMemberFull = StringSplit($sMemberFull, "#") ;Erstellen eines 1D-Arrays
    		_ArrayDelete($aMemberFull, 0)
    		local $aMemberArray[1][UBound($aMemberFull)] ;Initialisieren eines 2D-Arrays
    		For $i = 0 To UBound($aMemberFull) - 1
    			$aMemberDetail = StringSplit($aMemberFull[$i], ";")
    			_ArrayDelete($aMemberDetail, 0)
    			If UBound($aMemberDetail) - 1 > UBound($aMemberArray) - 1 Then
    				ReDim $aMemberArray[UBound($aMemberDetail)][UBound($aMemberFull)]
    			EndIf
    			For $j = 0 To UBound($aMemberDetail) - 1
    				$aMemberArray[$j][$i] = $aMemberDetail[$j]
    			Next
    		Next
    		_GUICtrlListView_AddArray($frmGrp_lstGroupView, $aMemberArray) ;>> eintragen der Usernamen in die listview
    	EndIf
    EndFunc
    Alles anzeigen



    Versionen:
    Scite: 3.5.4
    Autoit: v3.3.14.1
    AD UDF: 1.4.1.1

    Vielen Dank für eure Hilfe vorab :)

    EDIT: Ich hab das Problem gefunden. Wenn in der Gruppe andere Gruppen drin sind, funktioniert die Funktion scheinbar nicht. Zumindest ist es so reproduzierbar. Kann ich die Member der Gruppe, welche keine Benutzer sind irgendwie rausfiltern?

  • _AD_GetGroupMembers der AD.au3

    • DasIch
    • 14. September 2015 um 20:48

    Okay, ich schaue morgen und poste die Funktion nochmal lauffähig hier rein. Dann kann ich euch auch die jeweiligen Versionen sagen.

    Danke schonmal für eure Hilfe :)

  • _AD_GetGroupMembers der AD.au3

    • DasIch
    • 14. September 2015 um 18:30

    Wie gesagt, _AD_Open() steht am Anfang des Skriptes, und das hier ist nur eine Funktion innerhalb des kompletten Skripts. Wenn ich das komplett posten würde, würde das den Rahmen sprengen ^^

  • _AD_GetGroupMembers der AD.au3

    • DasIch
    • 14. September 2015 um 15:57

    Entschuldigt bitte die späte Antwort, mich hat die Grippe erwischt und ich hatte bis jetzt keinen zugriff auf den code.

    Aufgrund der Größe des Skriptes kann ich natürlich nicht alles posten, aber die Funktion, über die es aufgerufen wird sehr wohl.

    AutoIt
    Func _GroupView()
    	Local $cnt = UBound(_GUICtrlListBox_GetSelItems($Ber_lstGruppen))-1 ;Anzahl der ausgewählten Gruppen aus der Liste
    	Local $names = _GUICtrlListBox_GetSelItemsText($Ber_lstGruppen) ;ausgewählte Gruppen aus der Liste
    	_ArrayDelete($names, 0)
    	If $cnt < 1 Then
    		MsgBox(0, "", "Bitte wählen Sie mindestens eine Gruppe aus!")
    	Else
    		GUISetState(@SW_ENABLE, $frmGroupView)
    		For $i = 0 To $cnt - 1
    			_GUICtrlListView_AddColumn($frmGrp_lstGroupView, String($names[$i]), 150, 0) ;Überschriften füllen
    		Next
    		For $grp In $names
    			$grp = _AD_SamAccountNameToFQDN($grp) ;Umwandeln des SamAccountName zum FQDN
    			local $aGrpMember = _AD_GetGroupMembers($grp) ;Einlesen der Grp-Member
    			local $sMemberFull, $sMember = ""
    			_ArrayDelete($aGrpMember, 0)
    			For $i = 0 To UBound($aGrpMember) - 1
    				$aGrpMember[$i] = _AD_FQDNToDisplayname($aGrpMember[$i]) ;Umwandeln des jeweiligen Usernames zum Displayname
    			Next
    			_ArraySort($aGrpMember, 0)
    			For $i = 0 To UBound($aGrpMember) - 1
    				If $i = UBound($aGrpMember) - 1 Then
    					$sMember = $sMember & $aGrpMember[$i]
    					If $grp = $names[0] Then
    						$sMemberFull = $sMember
    					Else
    						$sMemberFull = $sMemberFull & "#" & $sMember
    					EndIf
    				Else
    					$sMember = $sMember & $aGrpMember[$i] & ";"
    				EndIf
    			Next ;>> Erstellen eines Strings der Usernames
    		Next
    		local $aMemberFull = StringSplit($sMemberFull, "#") ;Erstellen eines 1D-Arrays
    		_ArrayDelete($aMemberFull, 0)
    		local $aMemberArray[1][UBound($aMemberFull)] ;Initialisieren eines 2D-Arrays
    		For $i = 0 To UBound($aMemberFull) - 1
    			$aMemberDetail = StringSplit($aMemberFull[$i], ";")
    			_ArrayDelete($aMemberDetail, 0)
    			If UBound($aMemberDetail) - 1 > UBound($aMemberArray) - 1 Then
    				ReDim $aMemberArray[UBound($aMemberDetail)][UBound($aMemberFull)]
    			EndIf
    			For $j = 0 To UBound($aMemberDetail) - 1
    				$aMemberArray[$j][$i] = $aMemberDetail[$j]
    			Next
    		Next
    		_GUICtrlListView_AddArray($frmGrp_lstGroupView, $aMemberArray) ;>> eintragen der Usernamen in die listview
    		GUISwitch($frmGroupView)
    		GUISetState(@SW_SHOW)
    	EndIf
    EndFunc
    Alles anzeigen

    ich hoffe, ihr könnt meine Gedanken nachvollziehen :P Aufgrund des frühes Standes der Entwicklung, und dass die Funktion noch nicht so will wie ich, ist es entsprechend unordentlich. Ich bitte das zu entschuldigen.

    LG,
    der Robert

    Nachtrag: AD-Open() ist natürlich vorhanden :P

  • _AD_GetGroupMembers der AD.au3

    • DasIch
    • 7. September 2015 um 16:44

    Hallo zusammen,

    folgendes Problem:

    Ich suche mit Hilfe der _AD_GetGroupMembers() der AD.au3 nach der Gruppe "Konzern". Jetzt gibt es vier Gruppen hierzu: "Konzern", "Konzern_GL", "Konzern_MA" und "Konzern_IT". Wenn ich also wie gesagt nach Konzern suche, bricht das Skript mit folgendem Fehler ab:

    Code
    "C:\Program Files (x86)\AutoIt3\Include\ad.au3" (641) : ==> The requested action with this object has failed.:
    Local $sResult = $oObject.Get($sAttribute)
    Local $sResult = $oObject^ ERROR

    Any Guesses?

    LG,
    der Robert

    P.S.: Gibt es alternativ einen Weg, nach dem exakten Namen der Gruppe zu suchen?

    P.P.S.: Hier der aktuelle Code:

    Spoiler anzeigen
    AutoIt
    #include <GuiListView.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <ad.au3>
    #include <GUIListBox.au3>
    
    
    $frmGroupView = GUICreate("Gruppenmitglieder", 986, 516)
    $Ber_lstGruppen = GUICtrlCreateList("", 8, 8, 200, 500, BitOR($gui_ss_default_list, $ws_hscroll, $lbs_extendedsel))
    GUICtrlSetData(-1, "Gruppe 1|Gruppe2|Gruppe3|Gruppe4|Gruppe5|4you-01-AGD-Team01|4you-01-AGD-Team01-BL006|4you-01-AGD-Team01-BL008")
    $frmGrp_lstGroupView = GUICtrlCreateListView("", 210, 8, 768, 500, BitOR($WS_HSCROLL, $WS_VSCROLL))
    $Ber_conUserWahl = GUICtrlCreateContextMenu($Ber_lstGruppen)
    $Ber_conGroupView = GUICtrlCreateMenuItem("Gruppenmitglieder anzeigen", $Ber_conUserWahl)
    GUISetState(@SW_SHOW, $frmGroupView)
    _AD_Open()
    
    
    While 1
    	$nMsg = GUIGetMsg()
    	Switch $nMsg
    		Case $GUI_EVENT_CLOSE
    			_AD_Close()
    			Exit
    
    
    		Case $Ber_conGroupView
    			_GroupView()
    ;~ 			$grp = _AD_SamAccountNameToFQDN("4you-01-AGD-Team01")
    ;~ 			$grp = _AD_GetGroupMembers($grp)
    ;~ 			_ArrayDisplay($grp)
    
    
    	EndSwitch
    WEnd
    
    
    
    
    Func _GroupView()
    	Local $cnt = UBound(_GUICtrlListBox_GetSelItems($Ber_lstGruppen))-1 ;Anzahl der ausgewählten Gruppen aus der Liste
    	Local $names = _GUICtrlListBox_GetSelItemsText($Ber_lstGruppen) ;ausgewählte Gruppen aus der Liste
    	_ArrayDelete($names, 0)
    	If $cnt < 1 Then
    		MsgBox(0, "", "Bitte wählen Sie mindestens eine Gruppe aus!")
    	Else
    		For $i = 0 To $cnt - 1
    			_GUICtrlListView_AddColumn($frmGrp_lstGroupView, String($names[$i]), 150, 0) ;Überschriften füllen
    		Next
    		For $grp In $names
    			$grp = _AD_SamAccountNameToFQDN($grp) ;Umwandeln des SamAccountName zum FQDN
    			local $aGrpMember = _AD_GetGroupMembers($grp) ;Einlesen der Grp-Member
    			local $sMemberFull, $sMember = ""
    			_ArrayDelete($aGrpMember, 0)
    			For $i = 0 To UBound($aGrpMember) - 1
    				$aGrpMember[$i] = _AD_FQDNToSamAccountName($aGrpMember[$i]) ;Umwandeln des jeweiligen Usernames zum Displayname
    			Next
    			_ArraySort($aGrpMember, 0)
    			For $i = 0 To UBound($aGrpMember) - 1
    				If $i = UBound($aGrpMember) - 1 Then
    					$sMember = $sMember & $aGrpMember[$i]
    					If $grp = $names[0] Then
    						$sMemberFull = $sMember
    					Else
    						$sMemberFull = $sMemberFull & "#" & $sMember
    					EndIf
    				Else
    					$sMember = $sMember & $aGrpMember[$i] & ";"
    				EndIf
    			Next ;>> Erstellen eines Strings der Usernames
    		Next
    		local $aMemberFull = StringSplit($sMemberFull, "#") ;Erstellen eines 1D-Arrays
    		_ArrayDelete($aMemberFull, 0)
    		local $aMemberArray[1][UBound($aMemberFull)] ;Initialisieren eines 2D-Arrays
    		For $i = 0 To UBound($aMemberFull) - 1
    			$aMemberDetail = StringSplit($aMemberFull[$i], ";")
    			_ArrayDelete($aMemberDetail, 0)
    			If UBound($aMemberDetail) - 1 > UBound($aMemberArray) - 1 Then
    				ReDim $aMemberArray[UBound($aMemberDetail)][UBound($aMemberFull)]
    			EndIf
    			For $j = 0 To UBound($aMemberDetail) - 1
    				$aMemberArray[$j][$i] = $aMemberDetail[$j]
    			Next
    		Next
    		_GUICtrlListView_AddArray($frmGrp_lstGroupView, $aMemberArray) ;>> eintragen der Usernamen in die listview
    	EndIf
    EndFunc
    Alles anzeigen
  • LIstview (oder ähnlich) befüllen

    • DasIch
    • 22. Juli 2015 um 11:24

    Wie sieht die .INI denn aus wenn du mehrere Namen pro Zeile hast?

  • InnerHTML?

    • DasIch
    • 21. Juli 2015 um 16:57

    Geht es denn, wenn du es benutzt? Bei mir ging einiges nicht ohne _FFConnect() am Anfang des Skriptes, deshalb die Frage.

  • InnerHTML?

    • DasIch
    • 21. Juli 2015 um 12:20

    Wo ist dein _FFConnect() und dein _FFDisConnect()?

  • MsgBox ohne skript Pause

    • DasIch
    • 8. Juli 2015 um 15:54

    Die .exe war eine super Idee! Danke dafür!

    Das hier ist das Hauptprogramm:

    Spoiler anzeigen
    AutoIt: Main
    #include <FF.au3>
    
    
    _FFConnect()
    
    
    Global $online = 0
    Global $name = _FFXPath("/html/body/div/div[3]/div[3]/header/div[2]/div[1]/h2/span", "textContent", 9)
    
    
    While 1
    	Sleep(700)
    	$status = _FFXPath("/html/body/div/div[3]/div[3]/header/div[2]/div[2]/div/span", "textcontent", 9)
    	If $status Then
    		If $online = 0 Then
    			$start = @HOUR & ":" & @MIN & ":" & @SEC
    			$monat = @MDAY & "." & @MON & "." & @YEAR
    			Run(@ScriptDir & "\Msg.exe -Name:" & $name & " -Monat:" & $monat & " -Start:" & $start)
    			$online = 1
    		EndIf
    	Else
    		If $online = 1 Then
    			$ende = @HOUR & ":" & @MIN & ":" & @SEC
    			WinClose("System Offline!")
    			$online = 0
    			FileWriteLine(@ScriptDir & "\online.txt", $name & @TAB & $monat  & @TAB & $start & " Bis " & $ende) ;Hier wird die Ausfallzeit zusätzlich in eine Datei geschrieben.
    		EndIf
    	EndIf
    
    
    WEnd
    
    
    _FFDisConnect()
    Alles anzeigen


    und die Msg.exe wird dann entsprechend ausgeführt:

    Spoiler anzeigen
    AutoIt: Msg.exe
    If $cmdline[0] > 0 Then
    	For $i = 0 To $cmdline[0]
    		;" -Name
    		If StringRegExp($cmdline[$i], "(?i)^\-Name\:.*?$") Then $Name = StringRegExp($cmdline[$i], "(?i)^\-Name\:(.*?)$", 1)[0]
    		;" -Monat
    		If StringRegExp($cmdline[$i], "(?i)^\-Monat\:.*?$") Then $Monat = StringRegExp($cmdline[$i], "(?i)^\-Monat\:(.*?)$", 1)[0]
    		;" -Start
    		If StringRegExp($cmdline[$i], "(?i)^\-Start\:.*?$") Then $Start = StringRegExp($cmdline[$i], "(?i)^\-Start\:(.*?)$", 1)[0]
    	Next
    EndIf
    
    
    MsgBox(0, "System Offline!", $name & " ist seit " & $start & " Offline.")
    Alles anzeigen

    So funktioniert es genau so wie ich es wollte :D Danke euch allen vielmals!

  • MsgBox ohne skript Pause

    • DasIch
    • 8. Juli 2015 um 15:22

    Habe es jetzt so gelöst:

    AutoIt
    #include <FF.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    
    
    $MainWindow = GUICreate("Kontakt Online!", 200, 40, -1, -1)
    $lblMain = GUICtrlCreateLabel("", 8, 14, 180, 25, $SS_CENTER)
    
    
    Global $online = 0
    Global $name = _FFXPath("/html/body/div/div[3]/div[3]/header/div[2]/div[1]/h2/span", "textContent", 9)
    
    
    While 1
    	Sleep(700)
    	$nMsg = GUIGetMsg()
    	Switch $nMsg
    		Case $GUI_EVENT_CLOSE
    			GUISetState(@SW_HIDE, $MainWindow)
    
    
    	EndSwitch
    
    
    	$status = _FFXPath("/html/body/div/div[3]/div[3]/header/div[2]/div[2]/div/span", "textcontent", 9)
    	If $status Then
    		If $online = 0 Then
    			$start = @HOUR & ":" & @MIN & ":" & @SEC
    			$monat = @MDAY & "." & @MON & "." & @YEAR
    			GUICtrlSetData($lblMain, "System " & $name & " ist seit " & $start & " offline.")
    			GUISetState(@SW_SHOW, $MainWindow)
    			$online = 1
    		EndIf
    	Else
    		If $online = 1 Then
    			$ende = @HOUR & ":" & @MIN & ":" & @SEC
    			GUISetState(@SW_HIDE, $MainWindow)
    			$online = 0
    			FileWriteLine(@ScriptDir & "\online.txt", $name & @TAB & $monat  & @TAB & $start & " Bis " & $ende) ;Hier wird die Ausfallzeit zusätzlich in eine Datei geschrieben.
    		EndIf
    	EndIf
    
    
    WEnd
    
    
    _FFDisConnect()
    Alles anzeigen


    Allerdings reagiert er nicht auf den "Schließen" Button im Fenster. Any Guesses, warum?

    LG

  • MsgBox ohne skript Pause

    • DasIch
    • 8. Juli 2015 um 14:46

    Du meinst also, eine GUI zu verwenden, die sagen wir eine listview drin hat und in dieser listview dynamisch die Systeme einträgt, wann sie ausgefallen sind und wie sie heißen? und sobald sie wieder laufen, die logfile schreiben und aus der übersicht verschwinden? auch eine durchaus interessante idee. darauf bin ich noch nicht gekommen

  • MsgBox ohne skript Pause

    • DasIch
    • 8. Juli 2015 um 13:15

    Hey alpines und lieben Dank für deinen Vorschlag.

    Den Gedanken hatte ich auch schon, allerdings werden in dem Skript mehrere Systeme überwacht und deshalb wäre es einfacher pro Ausfall ein eigenes Popup zu haben, statt einem GUI, das für jeden Ausfall überschrieben werden müsste.

  • MsgBox ohne skript Pause

    • DasIch
    • 8. Juli 2015 um 12:59

    Hallo zusammen,

    ich habe ein Skript, das regelmäßig prüft, ob ein System Offline oder Online ist (über die Weboberfläche des Systemmonitorings). Da dem Kunden allerdings die Info per Email nicht reicht und er auf seinem Monitor per Popup informiert werden will, suche ich nach einer Möglichkeit, das umzusetzen. Autoit hat ja nun leider die Eigenart, dass eine MsgBox die Ausführung des Skriptes pausiert, bis das Popup verschwunden ist.

    Ist es irgendwie machbar, dass das Skript auch bei einem Popup Fenster im Hintergrund weiter prüfen kann?

    Hier ein CodeSnippet zu dem Thema:

    AutoIt
    #include <FF.au3>
    
    
    _FFConnect()
    
    
    Global $online = 0
    Global $name = _FFXPath("/html/body/div/div[3]/div[3]/header/div[2]/div[1]/h2/span", "textContent", 9)
    
    
    While 1
    	Sleep(700)
    	$status = _FFXPath("/html/body/div/div[3]/div[3]/header/div[2]/div[2]/div/span", "textcontent", 9)
    	If $status Then
    		If $online = 0 Then
    			$start = @HOUR & ":" & @MIN & ":" & @SEC
    			$monat = @MDAY & "." & @MON & "." & @YEAR
    			$online = 1
    		EndIf
    	Else
    		If $online = 1 Then
    			$ende = @HOUR & ":" & @MIN & ":" & @SEC
    			$online = 0
    ;>> Hier sollte das Popup kommen mit der Info. Dieses soll aber offen bleiben, bis es weggeklickt wird. 
    ;>>Allerdings ohne das Skript zu pausieren.
    			FileWriteLine(@ScriptDir & "\online.txt", $name & @TAB & $monat  & @TAB & $start & " Bis " & $ende) ;Hier wird die Ausfallzeit zusätzlich in eine Datei geschrieben.
    		EndIf
    	EndIf
    
    
    WEnd
    
    
    _FFDisConnect()
    Alles anzeigen


    Vielen Dank vorab für eure Hilfe und LG,
    der Robert

  • InnerHTML?

    • DasIch
    • 25. Juni 2015 um 09:57

    Poste mal bitte das Codesnippet aus dem Sourcecode dazu. Das auch bitte im Spoiler.
    Was genau möchtest du damit machen? Das angezeigte Value auslesen?

  • Transparenz bei GUICtrlCreateProgress()

    • DasIch
    • 3. Juni 2015 um 16:37

    Klar, warum bin ich nicht selbst darauf gekommen 8o

    Danke dir, UEZ!

    Hier der Code, noch ein klein wenig angepasst, da ich den Text oberhalb des Ladebalkens haben wollte :)

    AutoIt
    $frmMain = GUICreate("Fortschritt", 380, 80, -1, -1, $WS_POPUPWINDOW)
    $lblBar = GUICtrlCreateLabel("Lese Daten ein... (0%)", 20, 20, 340, 15, $SS_CENTER)
    $frmChild = GUICreate("", 340, 15, 20, 40, $WS_POPUP, $WS_EX_MDICHILD, $frmMain)
    $prgBar = GUICtrlCreateProgress(0, 0, 340, 15, $PBS_SMOOTH)
    GUICtrlSetData(-1, 50)
    WinSetTrans($frmMain, "", 195)
    GUISetState(@SW_SHOW, $frmMain)
    GUISetState(@SW_SHOWNA, $frmChild)
  • Transparenz bei GUICtrlCreateProgress()

    • DasIch
    • 3. Juni 2015 um 16:14

    Hallo Kanashius und Danke für deine Antwort,


    Leider blicke ich gerade nicht bei _GdiPlus_* durch, weil ich nicht einmal weiß wonach ich suchen sollte. Ich will ja auch keine andere Progressbar, sondern die selbe, einfach nur undurchsichtig.

    Ich vermute aber, dass ich dadurch dass ich das Fenster über WinSetTrans() transparent mache, die Progressbar nicht davon ausschließen kann.

    Wenn ich die GUI mit $WS_TRANSPARENT erstelle, ist es ja nicht transparent, sondern man kann einfach nur durchklicken...

    Any Guesses, wie ich es umsetze?

    Oh, und P.S.: Der Anhang in deinem verlinkten Beitrag ist leider defekt und lässt sich nicht entpacken :(

    Edit, weil UEZ geantwortet hat, während ich gerade am Tippen war :P

    UEZ: Ich verstehe nicht wie du das meinst? Die GUI wird ja nicht transparent sondern man kann einfach nur durch sie durchklicken :(

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™