Hallo Bitnugger,
habs getestet. Funzt super...
Vielen lieben dank auch.
Beiträge von hipfzwirgel
-
-
Hallo Oscar,
ich will erreichen, das das Script wartet bis der user die Displayskalierung eingestellt hat um dann sich selbst neu zu starten, damit alles richtig angezeigt wird. Hintergrund:
Es soll ein Testprogramm werden mit dem die Akkulaufzeit von Laptops getestet werden soll indem ein Video im Dauerdurchlauf bis zum Erreichen des low batterylevel
erreicht wird und das Lappi dann herunterfährt. Dabei wird der Ladezustand und die Zeit protokolliert. Bisher mit Batchdateien und Drittprogrammen realisiert was aber sehr unzuverlässig ist.
die zu testenden Lappis haben verschiedene OS(Deutsch, bevorzugt aber Englisch) und leider verschiedene Auflösungen und Skalierungen. Und das ist das Problem.
Die Gui wird bei 1920*1080 und 100% richtig dargestellt wobei die Auflösung nicht das Problem ist, sondern die Skalierung. Starte ich das Programm mit anderer Skalierung und lass den User diese ändern,
dann muss die Gui/das Programm auch neu gestartet werden, damit sich die Änderung auswirkt.
@ Bitnugger:Vielen dank für den Vorschlag. ich teste es direkt einmal...
-
Hallo Oscar,
danke für den Tipp aber der bedingt, dass das OS in deutsch läuft. Hier läuft das OS aber überwiegend in English.
Ich konnte herausfinden das im Taskmanager eine Systemsettings.exe gestartet wird. Mit dieser geht Shellexecutewait oder Prozesswaitclose auch nicht.
Vielleicht kennt jemand den dazugehörigen Prozess -
Hallo Profis,
es geht um folgende Frage:Code
Alles anzeigen$iDpi = RegRead("HKEY_CURRENT_USER\Control Panel\Desktop\WindowMetrics", "AppliedDPI") Msgbox(0, "DPI", $iDpi & " #" & @DesktopWidth & " #" & @DesktopHeight) If $iDpi = 96 Then $var = MsgBox(4100, "Message", "The Display Scale must be 100%. You have to change it..") Switch $var Case "6" ShellExecuteWait("C:\Windows\System32\control.exe", "desk.cpl") $iPfad = @ScriptFullPath $iPid = Processexists("BatteryLifeTest.exe") $Datei = FileWrite("U:\StartBatt.bat", "Start" & $iPfad) Run("U:\StartBatt.bat") ProcessClose($iPid) EndSwitch EndIf
Warum wird das Script nicht pausiert bei Aufruf der ShellExecuteWait? Runwait funzt ebenso wenig. die CPL wird geöffnet und das Script startet sofort die Batch-Datei. Es sollen aber erst die Dispalyskalierung geändert werden bevor das Script weiter geht...
-
habs getestet. Warum geht das jetzt auf einmal
Ok, damit ist das Thema erledigt und der Tag gerettet
-
Hallo Bugfix,
jetzt bin ich verwirrt. als ich nur ein Pipe hatte war die Ausgabe der MsgBox leer. Mit zweien gefüllt mit der ganzen Liste -
Hallo mal wieder,
ich gebe folgenden Befehl in einer CMD ein :
WMIC /NameSpace:'\\root\WMI' Path BatteryStatus Get Charging,Poweronline,Discharging /Format:list | FIND "=TRUE"
Rückgabe: PowerOnline=True
Soweit alles gut.
Mache ich das gleiche in Autoit:CodeLocal $sData = Run(@ComSpec & " /c WMIC /NameSpace:'\\root\WMI' Path BatteryStatus Get Charging,Poweronline,Discharging /Format:list || FIND ""=TRUE"" ", "", @SW_HIDE, $STDOUT_CHILD) ProcessWaitClose($sData) $sOutput = StdoutRead($sData) MsgBox(0, "Output", $sOutput)
Dann ist die Rückgabe die ganze Liste. offensichtlich wird die Sequenz | Find "=True" ignoriert.
Hätte jemand eine Idee warum
-
@ Oscar: Also jetzt ist mir das wirklich sehr peinlich. Ich habe die Angabe der Makros wegen Änderungen an der KODA-Region in die normalen Werte zurück geändert.
Kein Wunder also das die Form sich nicht an die andere Auflösung anpasste. Thread ist also gelöst. Für den Fall der Skalierung baue ich eine Abfrage des Wertes ein, gekoppelt mit einer Aufforderung an den User diese manuell zu ändern wenn sie nicht 100% ist.
Bitte entschuldigt meine Dämlichkeit -
Ich danke für eure Antworten.
@ Oscar: Wie du an meinem Code sehen kannst habe ich die Makros für die Größe der Form verwendet. Trotzdem wird diese wie beschrieben bei anderer Auflösung(z.B. 1600 x 900 statt 1920 x 1080)
"abgeschnitten" Vielleicht liegt das ja auch an den Elementen in der Form.Ich glaube ich muss meinen Ansatz noch mal überdenken. Ich wollte, dass das Proggi die Labels und das Video in einer Oberfläche anzeigt aber wenn das nur aufwendigst zu realisieren ist, mal sehen...
Vielleicht hat jemand noch eine Idee... -
Hallo Musashi,
vielen lieben Dank für den Tipp. Aber ich bin mir nicht so sicher ob mir das hilft, denn das Proggi soll wie gesagt auf verschiedenen Rechnern eingesetzt werden. Wenn die Display-Skalierung oder sogar die Auflösung(vom Standard 1920x1080) abweicht, dann wird die GUI am rechten und unteren Monitorrand abgeschnitten. Das Ändern der Schriftgröße wird das wohl nicht verhindern oder? -
Hallo Profis,
ich habe per KODA eine GUi erstellt die die gesamte Displaygröße einnimmt. Das Proggi will ich auf verschiedenen Rechnern einsetzen. Wenn nun die Displayskalierung nicht 100% ist, sondern größer, wird die Form abgeschnitten. Gibt es eine Möglichkeit dies zu verhindern. Hier der Code für die Gui:Code
Alles anzeigen#Region ### START Koda GUI section ### $Form1 = GUICreate("Name der Gui", @DesktopWidth, @DesktopHeight, -1, -1, BitOR($GUI_SS_DEFAULT_GUI,$WS_MAXIMIZEBOX,$WS_SIZEBOX,$WS_THICKFRAME,$WS_MAXIMIZE,$WS_TABSTOP)) GUICtrlSetResizing(-1, $GUI_DOCKAUTO) GUISetBkColor(0xFFFFFF) $Startbutton = GUICtrlCreateButton("Start", 232, 952, 153, 33) GUICtrlSetFont(-1, 12, 800, 0, "Arial") GUICtrlSetResizing(-1, $GUI_DOCKAUTO) $Preparations = GUICtrlCreateEdit("", 10, 8, 600, 450, BitOR($ES_READONLY,$WS_BORDER), $WS_EX_STATICEDGE) GUICtrlSetData(-1, StringFormat(" Preperations:\r\n\r\n * Power supply connected\r\n * Battery load is = 100%\r\n * Only WiFi connection established\r\n\r\n ToDo:\r\n\r\n * Remove power supply\r\n * Benchmark starts automatically\r\n * Wait for "&Chr(34)&"end of benchmark"&Chr(34)&" (empty battery)\r\n * Connect power supply\r\n * Write battery life time on a paper\r\n * Reload battery to 100% and start a 2nd measurement (from point 1)\r\n * Write the average value of 1st and 2nd measurement in the\r\n device description\r\n\r\n\r\n\r\n\r\n DO NOT USE THE DEVICE WHILE THE TEST IS RUNNING!!!!")) GUICtrlSetFont(-1, 12, 800, 0, "Arial") GUICtrlSetColor(-1, 0x000000) GUICtrlSetBkColor(-1, 0xFFFBF0) GUICtrlSetResizing(-1, $GUI_DOCKAUTO) GUICtrlSetState(-1, $GUI_DISABLE) $Messages = GUICtrlCreateEdit("", 10, 472, 600, 450, BitOR($ES_AUTOVSCROLL,$ES_AUTOHSCROLL,$ES_READONLY,$WS_BORDER,$WS_CLIPSIBLINGS), $WS_EX_TRANSPARENT) GUICtrlSetFont(-1, 12, 400, 0, "Arial") GUICtrlSetResizing(-1, $GUI_DOCKAUTO) $oWMP = ObjCreate("WMPLayer.ocx") ;mediaplayer-objekt erstellen -> für die Einstellungen: new-object -comobject Wmplayer.ocx | get-member in Powershell ausführen GUICtrlCreateObj($oWMP, 630, 8, 1280, 784) ;objekt ins gui setzen und grösse angeben GUICtrlSetResizing(-1, $GUI_DOCKAUTO) GUISetState(@SW_SHOW) #EndRegion ### END Koda GUI section ###
-
Hallo Bitnugger,
Hallo Alpines,
vielen Dank für die Hilfe und die Tipps. Das Video läuft in Dauerschleife wie es soll. -
Hallo Alpines,
vielen Dank für deine Antwort.
Wie aber pausiere ich die Endlos-Schleife? Diese startet das Video-Objekt im Millisekundentakt neu, sodass das Video gar nicht abspielen kannUnd wäre es nicht besser statt Stopped den Status MediaEnded(8) zu nehmen?
-
Hallo Autoitler-Profis,
ich glaube ich sehe mal wieder den Wald vor lauter Bäumen nicht. Ich möchte in meiner GUI ein Video in einer Dauerschleife laufen lassen.
so habe ich angefangenC
Alles anzeigen#include <AutoItConstants.au3> #include <GUITab.au3> #include <GUIConstantsEx.au3> #include <WindowsConstants.au3> #include <File.au3> #include <Array.au3> #include <Word.au3> #include <WordConstants.au3> #include <Clipboard.au3> #include <Misc.au3> #include <MsgBoxConstants.au3> #include <ComboConstants.au3> #include <StaticConstants.au3> #include <ButtonConstants.au3> #include <IE.au3> #include <Process.au3> #include <WinAPIFiles.au3> #include <WinAPISys.au3> #include <WinAPI.au3> #include <date.au3> #include <String.au3> #include <StringConstants.au3> #include <MenuConstants.au3> #include <AVIConstants.au3> #include <ProgressConstants.au3> #include <EditConstants.au3> #Region ### START Koda GUI section ### Form=E:\Arbeit\Batchdateien\Scripte\BatteryLifeTest\Form1.kxf $Form1 = GUICreate("Test by HaSc (C) 2018", @DesktopWidth, @DesktopHeight, -1, -1, BitOR($GUI_SS_DEFAULT_GUI,$WS_MAXIMIZEBOX,$WS_SIZEBOX,$WS_THICKFRAME,$WS_MAXIMIZE,$WS_TABSTOP)) GUICtrlSetResizing(-1, $GUI_DOCKAUTO) GUISetBkColor(0xFFFFFF) $Startbutton = GUICtrlCreateButton("Start", 264, 856, 249, 57) GUICtrlSetFont(-1, 12, 800, 0, "Arial") GUICtrlSetResizing(-1, $GUI_DOCKAUTO) $oWMP = ObjCreate("WMPLayer.ocx") ;mediaplayer-objekt erstellen -> für die Einstellungen: new-object -comobject Wmplayer.ocx | get-member in Powershell ausführen GUICtrlCreateObj($oWMP,768, 8, 1120, 921) ;objekt ins gui setzen und grösse angeben GUICtrlSetResizing(-1, $GUI_DOCKAUTO) GUISetState(@SW_SHOW) #EndRegion ### END Koda GUI section ### While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit Case $Startbutton Batterytest() EndSwitch WEnd Func Batterytest() While 1 $oWMP.URL = @ScriptDir & "\Wildlife.wmv" ;url/link zur avi/mp3/wma/wmv/... datei $oWMP.uiMode = "full" ;videos anzeigen lassen und andere funktionen ausblenden (auf "full" setzen für alles anzeigen) $oWMP.settings.mute = True $oWMP.controls.play() ;abspielen (Play Taste) WEnd EndFunc
Wie kann ich die While-Schleife pausieren lassen bis das Video abgelaufen ist? Versuche mit ProzessWaitClose schlugen fehl
Achja, das Video dauert 30 Sekunden aber Sleep(30000) finde ich keine gute Lösung. Das video ist 25MB groß und lässt sich nicht als Dateianhang hochladen
Den VideoStatus kann ich mit $oWMP.playstate abfragen(https://msdn.microsoft.com/en-us/library/…5(v=vs.85).aspx). Nur mit welchen Code/Befehl pausiere ich die Dauerschleife? -
Hallo Alpines,
ich hatte den Run Befehl zunächst so getestet:da öffnet er die konsole und zeigt die netsh-Ausgabe an. Das mit dem Working-dir hatte ich übergesehen. (der Wald und die vielen Bäume )
vielen lieben Dank für den Hinweis.@ No 1
den @SW_MINIMIZE-Flah habe ich nur zur Selbstkontrolle gesetzt (Dadurch konnte ich sehen, ob überhaupt ein Fenster auf ging).
Auch dir vielen lieben Dank für die Hilfe und die Tipps -
Hallo Chip,
danke für die Antwort. Der Run-Befehl an sich funzt aber. Er öffnet die Konsole und zeigt das Ergebnis von netsh an. Was ist daran denn falsch?
ich hatte den Code auch wie in der Hilfe von STDoutRead erläutert auch mit ProzesswaitClose getestet. Auch da gab es keine Ausgabe
ich bin jetzt noch mehr verwirrt... -
Hallo Autoitler-Profis,
ich habe folgenden testcode geschrieben:C#include <AutoItConstants.au3> #include <WindowsConstants.au3> #include <MsgBoxConstants.au3> $Status = Run(@ComSpec & " /k netsh interface show interface name=Ethernet", @SW_MINIMIZE, $STDOUT_CHILD) $sOutput = StdoutRead($Status) MSgbox(0, "Meldung netsh", $sOutput)
Kann mir bitte jemand den Fehler erklären, warum die Func StdoutRead nichts ausgibt, d.h. die Variable $sOutput leer ist.
(Der Run-Befehl öffnet ein Konsolenfenster mit der Ausgabe des Netsh-Befehls. Diese Ausgabe möchte ich in die Variable $sOutput speichern.)
Vielen Dank schon jetzt für eure Hilfe/Erklärungen
-
Zunächst danke an alle für die Antworten.
@ Oscar: einer der vielen Versuchr war
die htmlfiles als txtfiles(vorheriges umbenennen) anzusprechen. Ging aber auch nicht.
-
Hallo Profis,
ich versuche mir ein Script zu schreiben das mir in HTMl-Dateien die auf meinem Rechner liegen eine bestimmte Textstelle ändert. Konkret steht dort im FooterJetzt will ich die Jahreszahl ändern. Soweit bin ich gekommen:
C
Alles anzeigen#include <String.au3> #include <AutoItConstants.au3> #include <WindowsConstants.au3> #include <File.au3> #include <Array.au3> #include <Misc.au3> #include <MsgBoxConstants.au3> #include <INet.au3> #include <FileConstants.au3> #include <WinAPIFiles.au3> Local $sPath = "E:\HS-itconsulting\01_HTML\Bewerbung\Test" Local $value = InputBox("Jahreszahl", "Bitte geben sie die Jahreszahl ein:") Local $aFileList = _FileListToArray($sPath, "*.txt", 1) If @error = 1 Then Exit MsgBox(0, "", "Keine Ordner gefunden.") If @error = 4 Then Exit MsgBox(0, "", "Keine Dateien gefunden.") For $i = 1 To $aFileList[0] ???? Next
Alle versuche mit _stringbetween, _stringinsert, _inetgetsource scheiterten da eine http-Eingabe ja nicht existiert. Mit FileRead usw kam ich auch nicht weiter, da HTML-Dateien mit den FILE-Befehlen nicht händelbar zu sein scheinen. Sollte es nicht möglich sein eine lokale Html-Datei(E:\Homepage\Test.html) einzulesen und die genannte Textstelle zu ändern oder hat wer eine Idee?
-
Hallo Alpines,
deinen Code gerade in mein Proggi eingefügt. funzt tadellos. Mögest du die dicksten Eier und Größten Eier zu Ostern geschenkt bekommen