Hmm, da war ich mit meinem ersten Ansatz gar nicht so weit weg...
Beiträge von Moombas
-
-
Ich hatte halt an sowas gedacht: https://www.manageengine.com/products/activ…%20ID%204624%20(viewed%20in,4625%20documents%20failed%20logon%20attempts.
Ich weiß aber nicht ob dabei auch ein lock event beim anderen user generiert wird (event id 4800) den man ja bräuchte um dies zu berechnen/als Grundlage für den logoff zu nehmen.
Und zum Rechte problem: Wenn dein Programm bei jedem user läuft, lass es doch einfach eine gemeinsame Datei nutzen, wo z.B. der Befehl zum logout für betreffende user eingetragen wird und dann vom lokal laufenden Programm ausgeführt wird. (Irgendwie habe ich gerade das Gefühl ich dneke zu kompliziert)
-
Nur eine Idee ohne jetzt weiter geforscht zu haben: Wird das umloggen nicht im System geloggt, ggf sogar mit mehr Informationen (z.B. Benutzername)?
Wenn ja, könntest du das mit dem aktiven Nutzer auslesen und entsprechende Kommandos abschicken.Mir drängt sich aber irgendwie die Frage auf ob es nicht Sinnvoll ist sich Gedanken zu machen ob überhaupt eine spezifische Benutzeranmeldung notwendig ist (Shared Device).
Bei 10 Benutzern kann doch nicht wirklich jeder aktiv gut darauf arbeiten zumal die Ummeldung auch jedes mal Zeit kostet (wir hatten das mal im Test nur mit 2 Nutzern und die Ummeldezeit war echt nicht schön). -
Ich meinte damit das ganze (mit den Funktionen)
MojoeB
-
Ich habe mal etwas "aufgeräumt" was Deklarationen und Zuweisungen angeht:
AutoIt
Alles anzeigenOpt('MustDeclareVars', 1) #include <ButtonConstants.au3> #include <ComboConstants.au3> #include <EditConstants.au3> #include <GUIConstantsEx.au3> #include <StaticConstants.au3> #include <WindowsConstants.au3> #include <Date.au3> ;Varialen Global Const $ini = @ScriptDir & 'Stats.ini' ;~ Global $StatsZahlListe = 1 ;kann ggf überarbeitet werden weiß garnicht mehr wieso ich das hier an der Stelle geschrieben habe Global Const $sIniSection = 1 Global $DatumStats = IniRead($ini, $sIniSection, "Datum", "default") Global $AnrufeStats = IniRead($ini, $sIniSection, "Anrufe", "default") Global $VerpassteAnrufeStats = IniRead($ini, $sIniSection, "Verpasste Anrufe", "default") Global $ZurueckgerufenStats = IniRead($ini, $sIniSection, "Zurückgerufen", "default") Global $NameStats = IniRead($ini, $sIniSection, "Name", "default") Global $WeggedruecktStats = IniRead($ini, $sIniSection, "Weggedrückt", "default") Global $Ergebnis = 0 Global $nMsg #Region MainMenu erstellung Global $MainMenu = GUICreate("Anrufe Legende", 939, 569, 223, 141) Global $LabelMainMenu = GUICtrlCreateLabel("Anrufe Legende", 369, 16, 201, 29) GUICtrlSetFont(-1, 15, 800, 0, "MS Sans Serif") Global $GroupRechts = GUICtrlCreateGroup("", 640, 56, 289, 481) Global $InfoStatistik = GUICtrlCreateEdit("", 648, 72, 273, 457, BitOR($ES_AUTOVSCROLL,$ES_AUTOHSCROLL,$ES_READONLY,$ES_WANTRETURN,$WS_BORDER)) GUICtrlSetData(-1, StringFormat(" STATISTIK\r\n\r\n\r\nDatum: "&$DatumStats&"\r\n\r\n\r\nAnrufe: "&$AnrufeStats&"\r\n\r\n\r\nVerpasste: "&$VerpassteAnrufeStats&"\r\n\r\n\r\nPlatzhalter:\r\n\r\n\r\nZurückgerufen: "&$ZurueckgerufenStats&"\r\n\r\n\r\nName: "&$NameStats&"\r\n\r\n\r\nPlatzhalter:\r\n\r\n\r\nWeggedrückt: "&$WeggedruecktStats&"\r\n\r\n")) GUICtrlSetFont(-1, 10, 800, 0, "DejaVu Sans Mono") GUICtrlCreateGroup("", -99, -99, 1, 1) Global $GroupMitte = GUICtrlCreateGroup("", 336, 88, 273, 169) Global $ButtonSchliessen = GUICtrlCreateButton("Schließen", 359, 180, 227, 57) GUICtrlSetFont(-1, 12, 800, 0, "MS Sans Serif") GUICtrlSetCursor (-1, 0) GUICtrlCreateGroup("", -99, -99, 1, 1) Global $GroupMitteStats = GUICtrlCreateGroup("", 336, 264, 273, 273) Global $ComboStatsWahl = GUICtrlCreateCombo("", 344, 304, 257, 25, BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL)) GUICtrlSetData(-1, "");hier sollten die Datums angezeigt werden jedes Datum hat ihr eigenes Abteil bedeutet das Datum kommt nur einmal in der Kompletten Statistik vor GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif") GUICtrlSetCursor (-1, 0) Global $LabelStats = GUICtrlCreateLabel("Statistik wählen", 424, 280, 111, 20) GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif") Global $ButtonLoeschen = GUICtrlCreateButton("Löschen", 520, 496, 75, 25) ;Wenn Datum gewählt wurde in der Combo und man klickt auf Löschen soll die Statistik die gewählt wurde gelöscht werden aus der InI GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif") GUICtrlSetColor(-1, 0x800000) GUICtrlSetCursor (-1, 0) GUICtrlCreateGroup("", -99, -99, 1, 1) GUISetState(@SW_SHOW) #EndRegion MainMenu erstellung While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit Case $ButtonLoeschen ;Funktion noch nicht umgesetzt ??? Case $ComboStatsWahl Case $ButtonSchliessen Exit EndSwitch WEnd
Nun zum eigentlichen Problem:
Warum nimmst du nicht 1 Label je Eintrag anstatt alles in ein Edit zu "quetschen"?
Das würde vieles schon mal einfacher machen. Den Rest schaue ich mir gerade mal an.Edit: Damn MojoeB warst du schnell.
-
Versuch es mal mit folgendem Regex: WinList("[REGEXPTITLE:(.*HWiNFO.* - System) *(?i)(Zusammenfassung|Übersicht)]")
Dann sollte auch die vorherige Variante passen (nur grob mit regex101 getestet, also nicht sicher ob es passt).
-
Kannst du es mal das /c durch /k ersetzen und schauen ob du im CMD eine Fehlermeldung bekommst?
-
Hmm, dann bin ich aktuell ratlos warum die Verbindung dort kappt.
Ich hätte dann maximal die idee fürn workaround (Powershell oder cmd nutzen um es lokal in eine temporäre Datei zu schreiben) aber nichts für eine Lösungsfindung
-
Schon mal versucht wie in der Hilfe geschrieben mit process waitclose zzu arbeiten und dann den ganzen output zu holen?
AutoItLocal $iPID = Run(@ComSpec & ' /C DIR "' & $sFilePath & $sFilter & '" /B /A-D /S', $sFilePath, @SW_HIDE, $STDOUT_CHILD) ; If you want to search with files that contains unicode characters, then use the /U commandline parameter. ; Wait until the process has closed using the PID returned by Run. ProcessWaitClose($iPID) ; Read the Stdout stream of the PID returned by Run. This can also be done in a while loop. Look at the example for StderrRead. Local $sOutput = StdoutRead($iPID)
Und ja, ich weiß das es eigentlich auch mit dem wihle gehen sollte.
-
Erstmal ausgiebig testen bevor du das machst
Bei meinen QuD kann sich auch mal ein (Denk-)Fehler einschleichen
btw.: time hast du doppelt drinne (vorne und hinten) in deinem log
-
Hier das QuD sample:
AutoIt
Alles anzeigenOpt('MustDeclareVars', 1) #include <Array.au3> Global $aI[4] = [1, 2, 3, 4] Global $String = '2024/06/23 18:02:36 - action=login pcname=N210708_b mac=5C61994A3157 ip=192.168.178.22 time=18:02:36' & @CRLF & _ '2024/06/23 18:06:55 - action=logout pcname=N210708_B mac=5C61994A3157 ip=192.168.178.21 time=18:06:55' $String = StringSplit($String, @CR) $String = Transform($String) _ArraySort_MultiColumn($String, $aI, 0, 0) _ArrayDisplay($String) Func Transform($aText) Local $aReturn[0][5], $Name, $IP For $Row = 1 to $aText[0] $IP = Stringsplit(StringRegExp($aText[$Row], '\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}', $STR_REGEXPARRAYMATCH)[0], '.') _ArrayAdd($aReturn, StringRegExp($aText[$Row], 'pcname=(\S{6,})', $STR_REGEXPARRAYMATCH)[0] & '|' & Number($IP[1]) & '|' & Number($IP[2]) & '|' & Number($IP[3]) & '|' & Number($IP[4])) Next Return $aReturn EndFunc ; #FUNCTION# ============================================================================= ; Name.............: _ArraySort_MultiColumn ; Description ...: sorts an array at given colums (multi colum sort) ; Syntax...........: _ArraySort_MultiColumn(ByRef $aSort, ByRef $aIndices) ; Parameters ...: $aSort - array to sort ; $aIndices - array with colum indices which should be sorted in specified order - zero based ; $oDir/$iDir - sort direction - if set to 1, sort descendingly else ascendingly ; Author .........: UEZ ; Version ........: v0.70 build 2013-11-20 Beta ; ========================================================================================= Func _ArraySort_MultiColumn(ByRef $aSort, ByRef $aIndices, $oDir = 0, $iDir = 0) If Not IsArray($aIndices) Or Not IsArray($aSort) Then Return SetError(1, 0, 0) ;checks if $aIndices is an array If UBound($aIndices) > UBound($aSort, 2) Then Return SetError(2, 0, 0) ;check if $aIndices array is greater the $aSort array Local $1st, $2nd, $x, $j, $k, $l = 0 For $x = 0 To UBound($aIndices) - 1 ;check if array content makes sense If Not IsInt($aIndices[$x]) Then Return SetError(3, 0, 0) ;array content is not numeric Next If UBound($aIndices) = 1 Then Return _ArraySort($aSort, $oDir, 0, 0, $aIndices[0]) ;check if only one index is given _ArraySort($aSort, $oDir, 0, 0, $aIndices[0]) Do $1st = $aIndices[$l] $2nd = $aIndices[$l + 1] $j = 0 $k = 1 While $k < UBound($aSort) If $aSort[$j][$1st] <> $aSort[$k][$1st] Then If $k - $j > 1 Then _ArraySort($aSort, $iDir, $j, $k - 1, $2nd) $j = $k Else $j = $k EndIf EndIf $k += 1 WEnd If $k - $j > 1 Then _ArraySort($aSort, $iDir, $j, $k, $2nd) $l += 1 Until $l = UBound($aIndices) - 1 Return 1 EndFunc ;==>_ArraySort_MultiColumn
-
Naja das splitten ist halt nochmal ein separater Schritt.
Ich schaue das ich ein QuD dafür bereit stelle auf basis deines oberen eintrags.
-
Denk dran, wenn du die IP splittest das beim Eintragen ins Array gleich explizit in eine Zahl umzuwandeln, damit er nicht nachher meint es wäre text, sonst kommt nämlich nicht das richtige Ergebnis raus (z.B. 100 nach der 1 aber vor der 2 etc.)
-
Ich würde die IP in ihre 4 Teile gesplittet in ein Array legen und dann sortieren mit der Funktion von UEZ :
AutoIt
Alles anzeigenOpt('MustDeclareVars', 1) #include <Array.au3> Global $aIPs[10][5] = [ _ [192, 168, 23, 145, "Büro 101"], _ [ 10, 0, 15, 87, "Empfang"], _ [172, 16, 78, 209, "Besprechungsraum"], _ [192, 168, 1, 3, "Buchhaltung"], _ [ 10, 10, 55, 201, "Marketing"], _ [172, 20, 100, 50, "Entwicklung 1"], _ [192, 168, 0, 11, "Entwicklung 2"], _ [ 10, 1, 1, 254, "Personalabteilung"], _ [172, 31, 255, 1, "Kantine"], _ [192, 168, 100, 100, "Serverraum"]] Global $aI[4] = [0, 1, 2, 3] _ArrayDisplay($aIPs, 'Before:') _ArraySort_MultiColumn($aIPs, $aI, 0, 0) _ArrayDisplay($aIPs, 'After:') ; #FUNCTION# ============================================================================= ; Name.............: _ArraySort_MultiColumn ; Description ...: sorts an array at given colums (multi colum sort) ; Syntax...........: _ArraySort_MultiColumn(ByRef $aSort, ByRef $aIndices) ; Parameters ...: $aSort - array to sort ; $aIndices - array with colum indices which should be sorted in specified order - zero based ; $oDir/$iDir - sort direction - if set to 1, sort descendingly else ascendingly ; Author .........: UEZ ; Version ........: v0.70 build 2013-11-20 Beta ; ========================================================================================= Func _ArraySort_MultiColumn(ByRef $aSort, ByRef $aIndices, $oDir = 0, $iDir = 0) If Not IsArray($aIndices) Or Not IsArray($aSort) Then Return SetError(1, 0, 0) ;checks if $aIndices is an array If UBound($aIndices) > UBound($aSort, 2) Then Return SetError(2, 0, 0) ;check if $aIndices array is greater the $aSort array Local $1st, $2nd, $x, $j, $k, $l = 0 For $x = 0 To UBound($aIndices) - 1 ;check if array content makes sense If Not IsInt($aIndices[$x]) Then Return SetError(3, 0, 0) ;array content is not numeric Next If UBound($aIndices) = 1 Then Return _ArraySort($aSort, $oDir, 0, 0, $aIndices[0]) ;check if only one index is given _ArraySort($aSort, $oDir, 0, 0, $aIndices[0]) Do $1st = $aIndices[$l] $2nd = $aIndices[$l + 1] $j = 0 $k = 1 While $k < UBound($aSort) If $aSort[$j][$1st] <> $aSort[$k][$1st] Then If $k - $j > 1 Then _ArraySort($aSort, $iDir , $j, $k - 1, $2nd) $j = $k Else $j = $k EndIf EndIf $k += 1 WEnd If $k - $j > 1 Then _ArraySort($aSort, $iDir, $j, $k, $2nd) $l += 1 Until $l = UBound($aIndices) - 1 Return 1 EndFunc
-
Damn, ich hasse es wenn Dokumentationen abweichen, wobei gewisse Speichertypen heutzutage wohl kaum bis garnicht mehr auftreten.
Alles was älter ist als DDR3 würde ich nichtmal mehr anfassen
-
Nein da hast du recht, da sollte hipfzwirgel definitv nochmal drüber schauen
-
Danke Musashi die hatte ich leider nicht gefunden.
hipfzwirgel Jetzt kannst du damit deine Liste vervollständigen
-
Nice, evtl. gibts ja auch irgendwo eine aktuellere Doku über die möglichen Werte als das was ich da gefunden habe
-
Versuch es mal mit dem SMBIOSMemoryType anstatt dem MemoryType (beides in Win32_PhysicalMemory enthalten).
Bei mir gibt SMBIOSMemoryType 26 aus, was meines Wissens für DDR4 steht, wobei MemoryType 0 für unknown ausgibt.
Seite 98 von hier: https://www.dmtf.org/sites/default/…P0134_3.2.0.pdf
Keine Ahnung was er bei meinem Heim-PC machen würde, der hat shcon DDR5, das taucht hier noch garnicht auf
-
Und das ist nicht nur beim programmieren so.
Andere markieren in Excel schön alles per Hand wo ich dann per bedingter Formatierung gleich alles durchrasseln lasse