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

Beiträge von Bitnugger

  • _Print() - Ausgabe in die SciTE-Konsole wie in Lua: print()

    • Bitnugger
    • 19. Februar 2019 um 13:31
    Zitat von BugFix

    Mir ging es hauptsächlich um Debugging von nummerischen Werten (z.B. Fenster-/Ctrl-Positionen) die bei ähnlicher Größenordnung in Schleifenausgabe auch ordentlich lesbar sind.

    Dafür habe ich mir auch was gebastelt...

    _Print_Example.png

    Dateien

    SciTE_Interface.zip 10,54 kB – 282 Downloads _Print_Example.au3 2,18 kB – 244 Downloads _Print.au3 9,19 kB – 315 Downloads
  • Eingebettete GUIs

    • Bitnugger
    • 19. Februar 2019 um 13:14
    Zitat von Symolgoy

    Manchmal hasse ich mich selbst, wenn sich am Ende herausstellt, dass der Fehler nur ein ganz blöder Dreher war.

    Quatsch... dann müsste ich mich ja mindestens 5000x mal mehr hassen, denn mir ist er ja auch erst nach 10x Hinschauen aufgefallen... und es sind übrigens immer die banalsten Fehler, die schwer zu finden sind. ;)

  • Eingebettete GUIs

    • Bitnugger
    • 19. Februar 2019 um 12:57
    Zitat von Symolgoy

    Trotzdem tritt der Fehler noch auf. Also vermute ich, dass es nicht (mehr) der Fehler ist.

    ?

    Zitat von Symolgoy

    hwnd(hex): 1 <-- mit IsHwnd kommt auch eine 1 zurück

    Ja klar, du gehst ja auch hin und konvertierst den Wert vorher zu einem Handle...

    Zitat von Symolgoy

    ConsoleWrite("hwnd: " & $hwnd & @CRLF & "hwnd(int): " & Int(.item("hwnd")) & @CRLF & "hwnd(hex): " & IsHWnd(Hwnd(.item("hwnd"))) & @CRLF)

    Du musst bei allen Funktionen, denen ein Handle übergeben wird, dein *.Item("hwnd") vorher in ein Handle konvertierten - hast du das gemacht?

    Du hast aber auch bei GUICreate die Parameter width und height mit left und top vertauscht... deshalb werden die GUIs an falscher Position erstellt, ausserhalb des sichtbaren Bereichs!

    Im Anhang findest du ein korrigiertes Paket, bei dem soweit alles funktioniert... aber immer noch mit Fehlern behaftet... sieh dir die Kommentare an, die ich für dich hinzugefügt habe.

    Dateien

    d2.0 (Bitnugger).zip 9,7 kB – 220 Downloads
  • Forenupdate - November 2018 - Probleme / Anregungen / Feedback - Sammelthread

    • Bitnugger
    • 18. Februar 2019 um 19:58

    Optional könnte man den Fading-Effekt-Button auch nur dann einblenden, wenn der Mauszeiger genau über ihm steht... aber meinetwegen kann er auch immer sichtbar bleiben - er darf nur nicht den eingegebenen Text überdecken... denn das ist ja mal echt banane. <X

  • Eingebettete GUIs

    • Bitnugger
    • 18. Februar 2019 um 19:28

    Ich habe mal deine Funktion _GUICreate_FromXML ein wenig umgebaut, um dir das Problem vor Augen zu führen...

    Hier der rel. Teil mit den Änderungen:

    Code
            ;Create GUI
            Local $hWnd
            With $oGUI.Item("dimensions")
    ;~             $oGUI.Item("hwnd") = GUICreate(    $oGUI.Item("title"), _
                $hWnd = GUICreate(    $oGUI.Item("title"), _
                                                .Item("width"), _
                                                .Item("height"), _
                                                .Item("left"), _
                                                .Item("top"))
                $oGUI.Item("hwnd") = $hWnd
                ConsoleWrite(StringFormat("> @@ Debug line\t%6i\t var: $hWnd                    --> %12s IsHWnd($hWnd)                    = %i\n", _
                    @ScriptLineNumber, $hWnd, IsHWnd($hWnd)))
                ConsoleWrite(StringFormat("! @@ Debug line\t%6i\t var: $oGUI.Item('hwnd')       --> %12s IsHWnd($oGUI.Item('hwnd'))       = %i\n", _
                    @ScriptLineNumber, $oGUI.Item("hwnd"), IsHWnd($oGUI.Item("hwnd"))))
                ConsoleWrite(StringFormat("> @@ Debug line\t%6i\t var: HWnd($oGUI.Item('hwnd')) --> %12s IsHWnd(HWnd($oGUI.Item('hwnd'))) = %i\n", _
                    @ScriptLineNumber, HWnd($oGUI.Item("hwnd")), IsHWnd(HWnd($oGUI.Item("hwnd")))))
            EndWith
    Alles anzeigen

    Die Ausgabe der drei von mir eingefügten ConsoleWrite sieht dann so aus:

    Kommst du nun drauf, warum es so nicht funktioniert? ;)

  • Forenupdate - November 2018 - Probleme / Anregungen / Feedback - Sammelthread

    • Bitnugger
    • 18. Februar 2019 um 16:57
    Zitat von Musashi

    Um 'Platz zu gewinnen'

    Das ist doch gar nicht nötig... es bräuchte nur die Breite des Eingabefeldes entsprechend verkleinert werden, wenn der Fading-Effekt-Button eingeblendet wird.

  • WMI Objekt Methode ausführen (hier: Volume.Dismount)

    • Bitnugger
    • 17. Februar 2019 um 18:50

    Hier noch ein Script, dass den im WMI Code Creator generierten Code (Code Language muss auf Visual Basic Script eingestellt sein!) nach AU3Script umwandelt, in der Console ausgibt und in die Zwischenablage kopiert...

    Dateien

    _Convert_VBSScript_From_WMICodeCreator_To_AU3Script.au3 4,01 kB – 240 Downloads
  • WMI Objekt Methode ausführen (hier: Volume.Dismount)

    • Bitnugger
    • 16. Februar 2019 um 20:09

    ScriptOMatic ist zumindest für mich aus mehreren Gründen keine Option!

    • ScriptOMatic braucht es vieeel zu lange, um die WMI Namespaces und Classes zu laden - das geht mit dem WMICodeCreator bzw. WMIExplorer entschieden schneller.
    • ScriptOMatic zeigt nur einen kleinen Teil der vorhanden WMI Namespaces an.
    • ScriptOMatic bietet nicht die Möglichkeit, WMI Namespaces von anderen Computern im lokalen Netzwerk zu verwenden, um daraus ein Script zu erstellen.
    • ScriptOMatic hat witzigerweise nicht mal einen COM ERROR Handler installiert, weshalb das Script bei einem COM ERROR abschmiert *1.

    Bevor ScriptOMatic mit der Suche nach WMI Namespaces fertig ist, habe ich das mit dem WMICodeCreator (inkl. man. Codeanpassung + Kaffee trinken) schon längst erledigt.

    Deine Version findet bei mir übrigens gar keine WMI Namespaces... in der ComboBox ist nur "1" als Auswahlmöglichkeit vorhanden - eine WMI Class kann ich aber trotzdem auswählen und auch das Scipt wird generiert.

    Zitat von Andy

    Scriptomatic erstellt selbstständig (!) in AutoIt ausführbare WMI-Scripte aller verfügbaren abfragbaren Methoden

    Methoden kannst du lediglich anwenden, abfragen und/oder setzten kannst du nur Properties.

    Bei mir (AutoIt 3.3.14.5) befindet sich das Script ScriptOMatic.au3 zudem auch hier:

    C:\Program Files (x86)\AutoIt3\Examples\COM\Scriptomatic.au3

    C:\Program Files (x86)\AutoIt3\Beta\Examples\COM\Scriptomatic.au3

    *1

    Win32_DisplayControllerConfiguration

    ConsoleWrite("VideoMode: " & $objItem.VideoModeNext & @CRLF) ; ==> The requested action with this object has failed. AutoIt3.exe ended.rc:1

    ​​ScriptOMatic​.png

    Und das geht übrigens auch nicht mit ScriptOMatic...

    WHERE.png

    • Bearbeiten
  • _Print() - Ausgabe in die SciTE-Konsole wie in Lua: print()

    • Bitnugger
    • 14. Februar 2019 um 21:38

    Du hast noch einen kleinen Fehler drin... denn hinter einer Zahl wird kein Leerzeichen ($iMinSpace = 2) eingefügt, wenn der darauf folgende Parameter ein String ist.

    Bsp:

    Code
    $aWinList = WinList()
    For $i = 1 To $aWinList[0][0] Step 1
        If $aWinList[$i][0] Then
            $aPos = WinGetPos($aWinList[$i][1])
            If $aPos[2] + $aPos[3] > 2 Then
                _Print('X, Y, W, H, Title', $aPos[0], $aPos[1], $aPos[2], $aPos[3], $aWinList[$i][0])
            EndIf
        EndIf
    Next
    ; X, Y, W, H, Title          959   3   2   2Mouse without Borders Application
    ; ..........................................^
    Alles anzeigen

    Wobei ich generell die Ausgabe lieber selbst formatiere, weil sie nur dann genau so ist, wie ich sie haben will...

    Code
    For $i = 1 To $aWinList[0][0] Step 1
        If $aWinList[$i][0] Then
            $aPos = WinGetPos($aWinList[$i][1])
            If $aPos[2] + $aPos[3] > 2 Then
                ConsoleWrite(StringFormat('X, Y, W, H, Title  %6i, %6i, %6i, %6i, %s\n', $aPos[0], $aPos[1], $aPos[2], $aPos[3], $aWinList[$i][0]))
            EndIf
        EndIf
    Next
    ; X, Y, W, H, Title         0,      0,    136,     60, Mouse without Borders Helper
    ; .....................................................^
  • Diskussion zum Thema : "AutoIt Interne Funktionen : Erwartetes Ergebnis -> Tatsächliches Ergebnis"

    • Bitnugger
    • 14. Februar 2019 um 13:24
    Zitat von Mars

    Wer gerne Round benutzt und häufiger ins Hexadezimalsystem vorstößt hat sich sicher schon über Hex(Int(Round($a, 0)), 2) geärgert (also dass man DREI Funktionen braucht um aus 125.5 ein 7E zu machen).

    Dafür würde ich dann aber Ceiling verwenden...

    ConsoleWrite(Hex(Ceiling($a), 2) & @CRLF)


    Das solltest du aber besser hier schreiben: Sammelthread "AutoIt Interne Funktionen : Erwartetes Ergebnis -> Tatsächliches Ergebnis"

  • Diskussion zum Thema : "AutoIt Interne Funktionen : Erwartetes Ergebnis -> Tatsächliches Ergebnis"

    • Bitnugger
    • 14. Februar 2019 um 01:45
    Zitat von Musashi

    Eine genauere Beschreibung des Hintergrundes wäre aber sicher sinnvoll ;) .

    Die findet man z.B. hier: https://py-tutorial-de.readthedocs.io/de/latest/floatingpoint.html

  • Sammelthread "AutoIt Interne Funktionen : Erwartetes Ergebnis -> Tatsächliches Ergebnis"

    • Bitnugger
    • 13. Februar 2019 um 20:43

    Subtrahieren von Fließkommazahlen - Ändern der Reihenfolge liefert unterschiedliche Ergebnisse!

    Bei ganzen Zahlen spielt es keine Rolle, in welcher Reihenfolge die zu subtrahierenden Zahlen stehen, hier ein Bsp.:

    Code
    ConsoleWrite('+ 60 - 18 - 2 - 10 = ' & 60 - 18 - 2 - 10 & @CRLF) ; 30
    ConsoleWrite('+ 60 - 10 - 18 - 2 = ' & 60 - 10 - 18 - 2 & @CRLF) ; 30
    ConsoleWrite('+ 60 - 2 - 20 - 18 = ' & 60 - 2 - 20 - 18 & @CRLF) ; 30
    ConsoleWrite('+ 60 - 2 - 18 - 20 = ' & 60 - 2 - 18 - 20 & @CRLF) ; 30

    Bei Fließkomazahlen sieht es jedoch anders aus, hier ein Bsp.:

    Code
    ConsoleWrite('! 78.08 - 11.07 - 67.01   = ' & 78.08 - 11.07 - 67.01 & @CRLF)   ; -1.4210854715202e-014 <--
    ConsoleWrite('! 78.08 - 67.01 - 11.07   = ' & 78.08 - 67.01 - 11.07 & @CRLF)   ; -7.105427357601e-015  <--
    
    ; Mit Klammersetzung kann man dies verhindern.
    ConsoleWrite('- 78.08 - (11.07 + 67.01) = ' & 78.08 - (11.07 + 67.01) & @CRLF) ; -1.4210854715202e-014
    ConsoleWrite('- 78.08 - (67.01 + 11.07) = ' & 78.08 - (67.01 + 11.07) & @CRLF) ; -1.4210854715202e-014

    Zudem ist das Ergebnis in allen vier Fällen nicht 0, wie es beim Windows Calculator, meinen Taschenrechner und dem Rechner auf meinem Smartphone der Fall ist...

    Deshalb: Bei Berechnungen mit Gleitkommazahlen das Ergebnis niemals auf Gleichheit prüfen (beliebter Anfängerfehler), sondern stets eine Prüfung um ±Epsilon (einer beliebig kleinen Zahl größer als null) durchführen.

    Danke Xorianator

    Einigen Usern sind die Hintergründe sicher nicht bekannt, warum es bei der "Fließkomma-Arithmetik" zu "unerwarteten Ergebnissen" kommt, welche aber nicht als Bug (Fehler) einzustufen sind. Ausführliche Infos zu diesem Thema findet man z.B. hier:

    https://py-tutorial-de.readthedocs.io/de/latest/floatingpoint.html

    https://www.mikrocontroller.net/articles/Gleitkommazahlen

  • ProcessExists für einzelne Benutzer

    • Bitnugger
    • 13. Februar 2019 um 16:56

    Versuche es mal bitte so... und sage uns, welchen Wert $iShutdown dann hat.

    Code
        Local $iShutdown = Shutdown(BitOR($SD_FORCE, $SD_LOGOFF)) ; (0) = Logoff - 'hhpxprojwinframe.exe' wird momentan nicht vom User @UserName ausgeführt!
        MsgBox(64, '_CheckProcess()', '$iShutdown = ' & $iShutdown & @CRLF)
    Zitat von Micha_he

    Ich hatte ein ähnliches Problem einmal. Da beendete sich das Script zu schnell und daher wurde das Shutdown-Kommando erst gar nicht gestartet!

    Das Script wird ja nicht beendet, sondern springt nach 3000 ms immer wieder in die Funktion _CheckProcess() und solange der Process 'hhpxprojwinframe.exe' nicht gefunden wurde, wird immer wieder Shutdown() ausgeführt, der aber wohl offensichtlich so nicht funktioniert. Mit $SD_FORCE sollte es aber klappen...

    Zitat von Springstil

    Einzige was mich gerade ein wenig stört, ist das er jedes mal beim einloggen jetzt das Skript startet.

    In Zeile 12 steht doch gut beschrieben, dass sich das Script nur dann automatisch startet, wenn $g_bAutoStart = True ist... wenn das Script selbst keinen Autostart machen soll, dann setze $g_bAutoStart = False, oder baue die Funktion komplett aus - das Script im Anhang, da habe ich sie mal für dich entfernt.

    Zitat von Springstil

    Wo schreibt er denn den wert hin bzw wo im system wird das hinterlegt?

    Das steht in Zeile 31...

    FileCreateShortcut(@ScriptFullPath, $sShortcut)

    @ScriptFullPath ist das (kompilierte) Script selbst, $sShortcut die Verknüpfung, die im Autostart-Verzeichnis erzeugt wird, beide mit kpl. Pfad. Diese Variablen kannst du dir doch einfach mit ConsoleWrite oder MsBox anzeigen lassen... wo ist also das Problem?

    Dateien

    _CheckProcess (ProcessList, ohne Autostart).au3 2 kB – 388 Downloads
  • ProcessExists für einzelne Benutzer

    • Bitnugger
    • 12. Februar 2019 um 14:45
    Zitat von Springstil

    Das Skript bleibt zwar offen, aber ...

    Das passiert alles in der Funktion _CheckProcess(), die alle 3000 ms aufgerufen wird.

    Dort wird mit ProcessList() eine Liste aller Processe mit dem Namen "hhpxprojwinframe.exe" geholt. Wird ein Process mit diesem Namen gefunden, der vom aktuellen User ausgeführt wird, wird die Funktion mit Return verlassen und in ~3000 ms wieder aufgerufen, anderfalls wird die Funktion Shutdown($SD_LOGOFF) ausgeführt, die den User eigentlich ausloggen sollte...

    Es gibt drei relevante Möglichkeiten:

    1. Der Process "hhpxprojwinframe.exe" wurde gefunden und wird auch vom aktuellen User ausgeführt, dann wird die Funktion in 3000 ms wieder aufgerufen.
    2. Der Process "hhpxprojwinframe.exe" wurde gefunden, wird aber nicht vom aktuellen User ausgeführt - der User sollte ausgeloggt werden.
    3. Der Process "hhpxprojwinframe.exe" wurde nicht gefunden - der User sollte ausgeloggt werden.

    Baue mal die Funktion _CheckProcess() zum Testen so um:

    Code
    Func _CheckProcess()
        Local $aProcessUser, $aProcessList = ProcessList('hhpxprojwinframe.exe')
    
        If UBound($aProcessList) Then
            For $i = 1 To $aProcessList[0][0] Step 1
                $aProcessUser = _WinAPI_GetProcessUser($aProcessList[$i][1])
                If Not @error And $aProcessUser[0] = @UserName Then
                    MsgBox(64, '_CheckProcess()', "'hhpxprojwinframe.exe' mit der PID "&$aProcessList[$i][1]&" wird bereits vom User "&@UserName&" ausgeführt!", 2)
                    Return ; 'hhpxprojwinframe.exe' wird bereits vom User @UserName ausgeführt!
                EndIf
            Next
        EndIf
    
        MsgBox(64, '_CheckProcess()', "'hhpxprojwinframe.exe' wird nicht vom User "&@UserName&" ausgeführt - der User "&@UserName&" wird nun abgemeldet!", 2)
        Shutdown($SD_LOGOFF) ; (0) = Logoff - 'hhpxprojwinframe.exe' wird momentan nicht vom User @UserName ausgeführt!
    EndFunc  ;==>_CheckProcess
    Alles anzeigen
  • WMI Objekt Methode ausführen (hier: Volume.Dismount)

    • Bitnugger
    • 10. Februar 2019 um 21:03

    Habe das Thema als Erledigt markiert...

  • WMI Objekt Methode ausführen (hier: Volume.Dismount)

    • Bitnugger
    • 10. Februar 2019 um 19:47
    Zitat von JensSchwartz

    Mit Dismount klappt das schon mal nicht: Im Log landet der Returnwert "0" was laut Microsoft für diese Methode "success" bedeutet. Nur wird der Datenträger nicht dismounted.

    Lies hier: https://docs.microsoft.com/en-us/previous…ss-win32-volume

    Zitat

    The Dismount method dismounts a file system from a volume.

    Damit wird also das Volume selbst nicht dismounted... ich denke, du hast alles richtig gemacht, wie es dir auch der Returncode 0 sagt, sondern nur die Methode nicht richtig verstanden.

    Ich habe dir im Anhang mal die Tools (WMICodeCreator, WMIExplorer, WMIDiag) reingelegt, die ich für WMI benutze.

    Hier die Quellen, von denen ich die Tools gedownloadet habe:

    WMICodeCreator 1.0: https://www.microsoft.com/en-us/download…ls.aspx?id=8572

    WmiExplorer 2.0.0.2: http://m.majorgeeks.com/mg/getmirror/wmi_explorer,1.html

    WMIDiag: https://www.microsoft.com/en-us/download…ls.aspx?id=7684

    Und der Vollständigkeit halber hier noch die _WMIC UDF, weiß aber nicht mehr, wo ich das her habe...

    Dateien

    WMICodeCreator.zip 124,29 kB – 239 Downloads WMIDiag.zip 502,45 kB – 245 Downloads WmiExplorer_2.0.0.2.zip 226,55 kB – 244 Downloads _WMIC.ZIP 3,79 kB – 259 Downloads
  • net user in MSG-Box ausgeben

    • Bitnugger
    • 9. Februar 2019 um 01:39
    Zitat von Musashi

    hier geht es aber um net user !

    Hm, nun ja, letztendlich holt sich der Befehl net.exe ja auch irgendwo die Informationen her... und genau das macht das Script in Post #3 auch - es liefert alle von ihm gewünschten Informationen, wobei net.exe sie allerdings etwas "appetitlicher" serviert.

    Hier noch eine WMI-Version, bei der die Ausgabe fast identisch mit net.exe ist, wobei ich für "Kennwort änderbar" aber kein Datum, sondern "Ja|Nein" verwende.

    C
    ;-- TIME_STAMP   2019-02-09 00:42:38   v 0.1
    
    Opt('MustDeclareVars', 1)
    
    #Region    ;************ Includes ************
    #include <WinAPI.au3> ; <= AutoIt 3.3.14.2
    ;~ #Include <WinAPIConv.au3> ; >= AutoIt 3.3.14.3
    #include <Date.au3>
    #EndRegion ;************ Includes ************
    
    Local $aResult = _GetNetworkLoginProfile()
    If UBound($aResult) = 4 Then
        _CW('> Letztes Setzen des Kennworts : ' & $aResult[0])
        _CW('> Kennwort läuft ab            : ' & $aResult[1])
        _CW('> Kennwort änderbar            : ' & $aResult[2])
        _CW('> Kennwort erforderlich        : ' & $aResult[3])
    EndIf
    
    ; https://docs.microsoft.com/de-de/windows/desktop/CIMWin32Prov/win32-networkloginprofile
    Func _GetNetworkLoginProfile($strComputer = ".", $sLogonDomain = @LogonDomain, $sUserName = @UserName)
        Local $objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")
        Local $colItems = $objWMIService.ExecQuery( _
                "SELECT * FROM Win32_NetworkLoginProfile", 'WQL', 48)
        Local $aReturn[4]
        For $objItem In $colItems
            If $objItem.Name = $sLogonDomain & '\' & $sUserName Then
    ;~             _CW("-----------------------------------")
    ;~             _CW("Win32_NetworkLoginProfile instance")
    ;~             _CW("-----------------------------------")
    ;~             _CW("AccountExpires: " & $objItem.AccountExpires)
    ;~             _CW("AuthorizationFlags: " & $objItem.AuthorizationFlags)
    ;~             _CW("BadPasswordCount: " & $objItem.BadPasswordCount)
    ;~             _CW("Caption: " & $objItem.Caption)
    ;~             _CW("CodePage: " & $objItem.CodePage)
    ;~             _CW("Comment: " & $objItem.Comment)
    ;~             _CW("CountryCode: " & $objItem.CountryCode)
    ;~             _CW("Description: " & $objItem.Description)
    ;~             _CW("Flags: " & $objItem.Flags)
    ;~             _CW("FullName: " & $objItem.FullName)
    ;~             _CW("HomeDirectory: " & $objItem.HomeDirectory)
    ;~             _CW("HomeDirectoryDrive: " & $objItem.HomeDirectoryDrive)
    ;~             _CW("LastLogoff: " & $objItem.LastLogoff)
    ;~             _CW("LastLogon: " & _WMIDateStringToDate($objItem.LastLogon, '.'))
    ;~             _CW("LogonHours: " & $objItem.LogonHours)
    ;~             _CW("LogonServer: " & $objItem.LogonServer)
    ;~             _CW("MaximumStorage: " & $objItem.MaximumStorage)
    ;~             _CW("Name: " & $objItem.Name)
    ;~             _CW("NumberOfLogons: " & $objItem.NumberOfLogons)
    ;~             _CW("Parameters: " & $objItem.Parameters)
    ;~             _CW("PasswordAge: " & $objItem.PasswordAge)
    ;~             _CW("PasswordExpires: " & $objItem.PasswordExpires)
    ;~             _CW("PrimaryGroupId: " & $objItem.PrimaryGroupId)
    ;~             _CW("Privileges: " & $objItem.Privileges)
    ;~             _CW("Profile: " & $objItem.Profile)
    ;~             _CW("ScriptPath: " & $objItem.ScriptPath)
    ;~             _CW("SettingID: " & $objItem.SettingID)
    ;~             _CW("UnitsPerWeek: " & $objItem.UnitsPerWeek)
    ;~             _CW("UserComment: " & $objItem.UserComment)
    ;~             _CW("UserId: " & $objItem.UserId)
    ;~             _CW("UserType: " & $objItem.UserType)
    ;~             _CW("Workstations: " & $objItem.Workstations & @CRLF)
    
                $aReturn[0] = _cnvt_interval_format($objItem.PasswordAge)
                $aReturn[1] = BitAND($objItem.Flags, 0x10000) ? 'Nein' : 'Ja'
                $aReturn[2] = BitAND($objItem.Flags, 0x40) ? 'Nein' : 'Ja'
                $aReturn[3] = BitAND($objItem.Flags, 0x20) ? 'Nein' : 'Ja'
    
                Return $aReturn
            EndIf
        Next
    EndFunc   ;==>_GetNetworkLoginProfile
    
    Func _cnvt_interval_format($sIntrvl)
        Local $sPwAge = _NowCalc(), $aTime[4] = [Int(StringLeft($sIntrvl, 8)), Int(StringMid($sIntrvl, 9, 2)), Int(StringMid($sIntrvl, 11, 2)), Int(StringMid($sIntrvl, 13, 2))]
        $sPwAge = _DateAdd('D', -$aTime[0], $sPwAge)
        $sPwAge = _DateAdd('h', -$aTime[1], $sPwAge)
        $sPwAge = _DateAdd('n', -$aTime[2], $sPwAge)
        $sPwAge = _DateAdd('s', -$aTime[3], $sPwAge)
        Return StringRegExpReplace($sPwAge, '(\d{4})/(\d{2})/(\d{2})(.+)', '\3.\2.\1\4')
    EndFunc   ;==>_cnvt_interval_format
    
    ; #FUNCTION# =========================================================================================================
    ; Name...........: _WMIDateStringToDate()
    ; Description ...: Converts a WMI date to a UK/US formatted date.
    ; Syntax.........: _WMIDateStringToDate($sDate)
    ; Parameters ....: $sDate - A WMI returned from an Object() call.
    ; Requirement(s).: v3.2.12.1 or higher
    ; Return values .: Success - A UK/US formatted date.
    ;                  Failure - Returns 0
    ; Author ........: guinness
    ; Example........; Yes
    ;=====================================================================================================================
    Func _WMIDateStringToDate($sDate, $sDelimeter = '/')
        Return StringRegExpReplace($sDate, '(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})\.\d{6}\+\d{3}', '\3' & $sDelimeter & '\2' & $sDelimeter & '\1 \4:\5:\6') ; jchd's Efficent Version - $10 Is The Number Of Minutes Difference Between Your Local Time And Greenwich Mean Time.
    EndFunc   ;==>_WMIDateStringToDate
    
    ; #FUNCTION# =========================================================================================================
    ; Name...........: _DateToWMIDateString()
    ; Description ...: Converts a UK/US formatted date to WMI date.
    ; Syntax.........: _DateToWMIDateString($sDate)
    ; Parameters ....: $sDate - A UK/US formatted date.
    ; Requirement(s).: v3.2.12.1 or higher
    ; Return values .: Success - A WMI date.
    ;                  Failure - Returns 0
    ; Author ........: guinness
    ; Example........; Yes
    ;=====================================================================================================================
    Func _DateToWMIDateString($sDate)
        Local $iOffSet = 000, $oWMIService = ObjGet('winmgmts:{impersonationLevel = impersonate}!\\.\root\cimv2')
        Local $oColFiles = $oWMIService.ExecQuery('Select Bias From Win32_TimeZone')
        If IsObj($oColFiles) Then
            For $oObjectFile In $oColFiles
                $iOffSet = $oObjectFile.Bias ; Retrieve GMT Offset - http://technet.microsoft.com/en-us/library/ee156558.aspx
            Next
        EndIf
        Return StringRegExpReplace($sDate, '(\d{2})/(\d{2})/(\d{4})\s+(\d{2}):(\d{2}):(\d{2})', '\3\2\1\4\5\6.000000+') & $iOffSet ; jchd's Version.
    EndFunc   ;==>_DateToWMIDateString
    
    ; #FUNCTION# =========================================================================================================
    ; Name...........: _WMIDateStringToDateLocale()
    ; Description ...: Converts a WMI date to a UK/US formatted date depending on your regional settings.
    ; Syntax.........: _WMIDateStringToDateLocale($sDate)
    ; Parameters ....: $sDate - A WMI returned from an Object() call.
    ; Requirement(s).: v3.2.12.1 or higher
    ; Return values .: Success - A UK/US formatted date.
    ;                  Failure - Returns 0
    ; Author ........: guinness
    ; Example........; Yes
    ;=====================================================================================================================
    Func _WMIDateStringToDateLocale($sDate)
        Return _DateTimeFormat(StringRegExpReplace($sDate, '(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})\.\d{6}\+\d{3}', '\1/\2/\3 \4:\5:\6'), 0)
    EndFunc   ;==>_WMIDateStringToDateLocale
    
    Func _CW($sString)
        ConsoleWrite(_WinAPI_WideCharToMultiByte(String($sString), 65001) & @CRLF)
    EndFunc   ;==>_CW
    
    ; Info : statt _OEMtoChar könnte man auch _WinAPI_WideCharToMultiByte verwenden
    Func _OEMtoChar($sOEM)
        Local $aDLLReturn, $sAnsi
        $aDLLReturn = DllCall('user32.dll', 'Int', 'OemToChar', 'str', $sOEM, 'str', '')
        Return @error ? $sOEM : $aDLLReturn[2] ; im Fehlerfall den Originalstring ($sOEM) unkonvertiert zurückgeben
    EndFunc   ;==>_OEMtoChar
    Alles anzeigen
  • net user in MSG-Box ausgeben

    • Bitnugger
    • 8. Februar 2019 um 19:00
    Zitat von Musashi

    Die Sprachabhängigkeit würde mich da schon eher stören ;) .

    So wäre es auch machbar... ohne @COMSPEC und ohne Sprachabhängigkeit. 8o

    Code
    #include <WinAPI.au3>
    
    Local $sCommand = 'net user ' & @UserName ; & '_BlaBla'
    ConsoleWrite(_WinAPI_WideCharToMultiByte("> $sCommand --> " & $sCommand, 65001) & @CRLF)
    Local $iPID = Run($sCommand, "", @SW_HIDE, BitOR($STDOUT_CHILD, $STDERR_CHILD))
    If $iPID Then
        ConsoleWrite("> $iPID        --> " & $iPID & @CRLF & @CRLF)
        ProcessWaitClose($iPID)
        Local $sSTDOUTText = StdoutRead($iPID)
    ;~     ConsoleWrite($sSTDOUTText & @CRLF)
        Local $aRx = StringRegExp($sSTDOUTText, '(.+)\R', 3)
        ConsoleWrite((UBound($aRx) >= 8 ? '> ' & $aRx[7] : '! ooops...') & @CRLF)
    Else
        ConsoleWrite("@@ Debug line" & @TAB & @ScriptLineNumber & "   var: $sCommand --> " & $sCommand & @CRLF & "!@ " & @TAB & "#Error: " & @error & @CRLF)
    EndIf
    Alles anzeigen
  • ProcessExists für einzelne Benutzer

    • Bitnugger
    • 8. Februar 2019 um 18:22
    Zitat von misterspeed

    Alpines hat ja schon das dazu nötige Script gepostet in Beitrag #6

    Ja, genau... und ich habe ihm in Post #10 auch zwei Versionen geschrieben, eine via WMI, die andere via ProcessList & _WinAPI_GetProcessUser, die er ohne weitere Änderungen nutzen kann.

    Nachtrag:

    Zitat von misterspeed

    Die korrekte Instanz sollte eine PID größer des unmittelbar zuvor gestarteten Launchers haben.

    Das ist nicht richtig... denn die PID kann auch kleiner sein!

  • ProcessExists für einzelne Benutzer

    • Bitnugger
    • 7. Februar 2019 um 23:00
    Zitat von misterspeed

    Man kann das auch ganz simpel mit runwait lösen.

    Ich denke mal, so geht das nicht, denn mit RunWait() würde er ja auf den Process warten, den er startet, aber das ist nicht der Process, den er überwachen will...

    Run("C:\sog\tools\bin\hhexew.exe -asstartcond -hhproj sogerp -hhfirm 01 hhpxProjWinFrame.exe -mskvar mini -nas -liz vstore","C:\sog\tools\bin\")

    RunWait("C:\sog\tools\bin\hhexew.exe -asstartcond -hhproj sogerp -hhfirm 01 hhpxProjWinFrame.exe -mskvar mini -nas -liz vstore","C:\sog\tools\bin\")

    Gefragt ist, ob der Process "'hhpxprojwinframe.exe'" von User xyz noch ausgeführt wird...

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™