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...
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...
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.
Trotzdem tritt der Fehler noch auf. Also vermute ich, dass es nicht (mehr) der Fehler ist.
?
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...
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.
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:
;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?
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...
ScriptOMatic ist zumindest für mich aus mehreren Gründen keine Option!
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.
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
Und das geht übrigens auch nicht mit ScriptOMatic...
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:
$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...
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
; .....................................................^
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"
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
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.:
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.:
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
Versuche es mal bitte so... und sage uns, welchen Wert $iShutdown dann hat.
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)
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...
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.
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?
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:
Baue mal die Funktion _CheckProcess() zum Testen so um:
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
Habe das Thema als Erledigt markiert...
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
ZitatThe 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...
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.
;-- 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
Die Sprachabhängigkeit würde mich da schon eher stören .
So wäre es auch machbar... ohne @COMSPEC und ohne Sprachabhängigkeit.
#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
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:
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!
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...