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

Beiträge von Simon09

  • ScreenCaptures werden als schwarzes Bild abgespeichert?

    • Simon09
    • 30. Juni 2017 um 11:37

    Das Script umfasst über 1000 Zeilen und ist super umfangreich, das zu posten wäre nicht wirklich zielführend, vor allem aber weil es denke ich nicht am Script liegt. Ich erstelle den Screenshot mit

    Code
    Func Capture1()
         _ScreenCapture_Capture("C:\logs" & "\capture1.jpg")
      EndFunc


    und rufe die Funktion an der Stelle mit Capture1() auf. Das funktioniert wie gesagt ja auch fast immer, wenn es nicht funktioniert, wird es am Server liegen, die Frage ist eben woran genau. Ich habe mittlerweile rausgefunden dass es zu fast 100% bei den Win 2012R2 Servern auftritt. Die Win 2008R2 Server hatten das Problem nicht.

  • ScreenCaptures werden als schwarzes Bild abgespeichert?

    • Simon09
    • 30. Juni 2017 um 09:07

    Hallo Forum,

    ich nutze in meinem Script zu Debugzwecken die ScreenCapture Funktion, um Screenshots in bestimmten Momenten zu hinterlegen, da ich das Script nachts auf Serversystemen silent ausführen lasse (es führt eine Update-Installation durch).
    Leider habe ich ausgerechnet in den Momenten in denen das Script in einen Fehler rennt weil bestimmte Fenster nicht erscheinen dann auch ein komplett schwarzes Bild als Screenshot-Datei...
    In den anderen Momenten klappt das Hinterlegen des Screenshots problemlos - die Problematik scheint also zusammen zu hängen...

    Weiß jemand womit das zusammenhängen könnte oder wie ich beim Troubleshooting in der Hinsicht vorgehen kann? Ich hatte schon überlegt ob es damit zusammenhängen kann dass sich das System nach X Minuten sperrt oder der Bildschirmschoner angeht, aber zum Teil taucht der Fehler auch schon ca 5 Minuten nach einem Neustart auf.

  • Beispiel.exe verhindert einen Neustart, Lösungsansatz?

    • Simon09
    • 16. Juni 2017 um 17:22

    @Bitnugger

    Danke nochmal für die flotte Antwort. Ich habe das jetzt erstmal mit dem shutdown.exe umgesetzt und schaue wie es funktioniert.

    Ob alle Klarheiten beseitigt sind? Tatsächlich ja, seitdem ich das von dir gelesen habe:

    "Vor Ausführung des Shutdowns (egal ob mit AutoIT oder externem Befehl) musst du die Funktion OnAutoItExitUnRegister("_Exit") ausführen, anderfalls wird die Funktion _Exit() erneut aufgerufen!"

    Wie muss ich das jetzt verstehen? Ich hatte einfach wie in deinem Code-Beispiel auf Seite 1 des Threads hier zu Anfang des Scripts

    Code
    OnAutoItExitRegister("_Exit")


    gesetzt, dann den ganzen Inhalt des Scriptes selbst und die Funktion selbst...

    Code
    Func _Exit()
    	; Das Beenden von Windows und dadurch evtl. hängender Prozesse erzwingen
    	If @exitMethod = $EXITCLOSE_BYSUTDOWN Then
    	  FileOpen($logpath)
    	  FileWriteLine($logpath, _NowTime() & "OnAutoItExitRegister Funktion wurde aufgerufen, versuche den eingeleiteten Neustart zu erzwingen." & @CRLF)
    	   Run('shutdown.exe /r /f /t 0') ; 4 = close by Windows shutdown
    	   EndIf
    	EndFunc

    dann unter das Script gepackt. Ich dachte die wird dann einfach automatisch aufgerufen sobald sich AutoIT schließt? Wird das jetzt so nicht klappen ohne UnRegister verwendet zu haben? Das die Func _Exit() Zeilen unten stehen sollte ja egal sein?

  • Beispiel.exe verhindert einen Neustart, Lösungsansatz?

    • Simon09
    • 16. Juni 2017 um 08:15

    @Bitnugger

    Danke für die Idee mit OnAutoItExitRegister, das sieht für mich super vielversprechend aus und werde ich mal so einbauen.

    Wenn ein Installer ein Reboot einleitet, ist der ExitCode dann sicher $EXITCLOSE_BYSUTDOWN, also 4? Ist das mit dem BYSUTDOWN eigentlich ein Typo in der AutoIt Dokumentation und soll BYSHUTDOWN heißen? Das wäre hilfreich zu wissen, da ich die ganze Routine nur alle 4 Wochen testen kann :D

    Sollte ich den shutdown Timeout auf 0 lassen, damit er der Windows Routine bei der auf das Beenden der Prozesse noch gewartet wird vorgreift, oder macht es Sinn da vielleicht auf 30 Sekunden zu setzen, damit wenigstens manche Prozesse "sauber" geschlossen werden. Der aufgerufene Shutdown Befehl mit Timout würde ja dann im Hintergrund aufgerufen worden sein und überstimmt dann nach Ablauf des Timeouts dieses "Warte bis Prozesse beendet werden" Fenster und leitet den Neustart ein, oder nicht?


    Danke

  • Beispiel.exe verhindert einen Neustart, Lösungsansatz?

    • Simon09
    • 9. Juni 2017 um 11:16

    Interessanter Ansatz den möglichen Restart bewusst abzubrechen um es dann selbst besser handeln zu können. Ich versuche das mal umzusetzen. Wie genau gebe ich dem AdLibRegister am besten mit dass er nur x Minuten "lauscht"? In AutoIT gibt es ja soweit ich weiß keine Schleifen? Und wie genau greife ich den ReturnValue von shutdown.exe /a ab, um ihn in AutoIT weiterzuverwerten?

  • Beispiel.exe verhindert einen Neustart, Lösungsansatz?

    • Simon09
    • 9. Juni 2017 um 10:31

    Das Problem ist, dass ich den Neustart nicht selbst initiiere, sondern das Programm. (es werden im Zuge der Installation Paketupdates installiert) und je nachdem ob ein Paket dabei ist welches ein Neustart erfoderlich macht, initiiert das Programm eben den Neustart von selbst, leider ohne dass dazu eine Meldung kommt die man abfangen könnte, (denn dann könnte ich natürlich mit Killtask arbeiten um die andere exe abzuschießen die mir da querschießt). Das kann ich aber leider nicht "auf gut Glück" schon im Voraus machen, da die andere exe weiterlaufen soll, falls das Programm keinen Neustart initiieren möchte...

    Daher mein Lösungsansatz das eventuell über Windows Registry dann erzwingen zu können...

  • Beispiel.exe verhindert einen Neustart, Lösungsansatz?

    • Simon09
    • 9. Juni 2017 um 09:51

    Danke für die schnelle Rückmeldung.

    Ehrm, nein ich habe bisher nicht versucht den Restart zu verhindern, er soll ja defintiv neu starten wenn das Programm dies von selbst einleitet. Das ist zwingend erforderlich dafür dass die Installation komplett durchläuft. Hast du mein Problem falsch verstanden oder hab ich deinen Lösungssatz falsch interpretiert? :D

  • Beispiel.exe verhindert einen Neustart, Lösungsansatz?

    • Simon09
    • 9. Juni 2017 um 09:21

    Hallo Forum,

    ich habe mit einem AutoIT Script eine Installation / Programmupdate automatisiert, bei der in manchen Fällen innerhalb des Installationsvorgangs ein Neustart initiiert wird, und zwar vom Programm selbst, nicht durch mein AutoIT Script. Ich kann diese Eventualität auch nicht wirklich mit einem bestimmten Fenstertitel abfangen da das Programm entweder aus dem nichts heraus den Neustart einleitet, oder aber es kommt ohne Neustart aus.

    Ich habe dann im Falle des Neustarts das Problem, dass sich eine bestimmte exe Datei auf dem System "aufgehangen" hat, bzw. dieses typische Windows Fenster was jeder kennt von wegen "Programme müssen noch geschlossen werden:" und dann eben das (Warten auf) Beispiel.exe, (dieses Programm verhindert, dass Windows neugestartet wird).

    Blöderweise passiert dann absolut garnichts mehr und die Installation scheitert so, weil sie nicht mehr komplett silent durchlaufen kann. Leider ist das "killen" der exe von vornerein keine Option, da die .exe zwingend laufen muss, falls die Installation doch keinen Neustart initiiert.

    Hat jemand trotzdem eine Idee/Lösungsansatz, wie das Problem umgangen werden kann? Meine Gedanken gehen da so in Richtung Registry, bei der man vielleicht irgendwo hineinbastelt dass Windows nach X Sekunden einfach einen Neustart erzwingt in so einer Situation (den Button "Neustart erzwingen" gäbe es ja sogar in der Situation, aber da die Installation nachts silent und automatisiert ausgeführt wird, sitzt eben niemand da und klickt auf jedem System drauf).

    Systeme sind Windows 2008 Server R2 und 2012 Server R2


    Danke!

  • WinWait Funktion: Welcher Teil des Titels wird ausgelesen?

    • Simon09
    • 12. April 2017 um 13:50

    Hallo Forum,

    ich nutze in meinem Installationsablauf mehrmals eine "If Not WinWait" Funktion, bei der abgefragt wird, ob ein bestimmtes Fenster existiert oder nicht, um entsprechend fortzufahren.

    Meine Frage ist: Wenn ich z.B WinWait ( "Arbeitsplatzaktualisierung - Abschluss" , "" ,1800) verwende, und ein Fenster mit dem Titel "Arbeitsaktualisierung - In Bearbeitung" existiert,
    wird die WinWait Funktion dann trotzdem darauf "anspringen?" Wie würde ich dies sonst verhindern können?

    Danke im Voraus!

  • Letzten beiden Zeichen vom Computernamen auslesen?

    • Simon09
    • 17. März 2017 um 04:43

    Danke, hat geklappt. Ist eine If-Abfrage nach Strings eigentlich case sensitive?

  • Letzten beiden Zeichen vom Computernamen auslesen?

    • Simon09
    • 17. März 2017 um 02:39

    Hallo Forum,

    mein Ziel ist es vom Computernamen die letzten beiden Zeichen auszulesen und in eine Variable zu schreiben, welche ich dann im weiteren Verlauf weiterverwenden muss.

    Den PC Namen auslesen scheint mit:


    Code
    $name=@ComputerName

    ...wunderbar zu funktionieren. Wie bekomme ich jetzt jeweils die letzten beiden Zeichen des Strings in eine Variable? Wenn der PC Name zb DesktopT1 heißt möchte ich eine Variable erhalten dessen Inhalt "T1"ist. Danke!

  • Wrapper Fenster ohne Controls/IDs automatisieren. Mit Screenshot.

    • Simon09
    • 7. März 2017 um 12:29

    Hallo Forum,

    ich möchte gerne ein Fenster mit AutoIT automatisieren, wo sich leider keine Controls/IDs auslesen lassen. Selbst mit TAB oder F10 lassen sich keine Shortcuts auf den Button aktivieren, das wäre jetzt in dem Fall mein Strohalm gewesen... Da die Installation unbeaufsichtigt auf einem Server laufen soll, ist auch ControlClick mit Mausposition keine Option (was sowieso denke ich immer die allerletzte Wahl wäre.

    Gibt es eine sinnige Möglichkeit doch noch voran zu kommen? Die Stelle automatisiert zu bekommen wäre eine Große erleichterung. Nach dem "Weiter" erscheint nur nochmals ein Fenster ohne Controls, wo der nächste Button aber schon alles abschließt.

    Bild:

    autpit-screenshot.png

    Bin für jegliches Feedback dankbar!

    edit: Ich konnte zwar durch TAB diese makierung oben links erreichen, aber ab da bringen mir leider auch keine Pfeiltasten etwas. Erneutes Tab demakiert diese Stelle wieder, mit F10 nach TAB um Shortcuts auf den Button zu aktivieren komme ich leider auch nicht weiter (so habe ich es bei einem verwandten Fenster vom selben Programm noch lösen können)

    edit2: Thema kann eigentlich zu, ich konnte mit Shift+TAB die Makierung in die andere Richtung fortführen und komme dann relativ schnell immerhin zu Buttons und kann dann ein Enter senden.

  • Registry Key Flag setzen um Script zu steuern?

    • Simon09
    • 6. März 2017 um 15:48

    Hallo Forum,

    ich habe mit AutoIT ein Installationsskript geschrieben. An einer bestimmten Stelle muss ich eine Fallunterscheidung einbauen, ob das Script zuvor schon einmal bis dort hin kam, oder nicht. Da dazwischen ein Neustart sein kann, würde ich das am besten über einen Registry Wert machen: Sprich, eine Art reboot Flag auf 1 setzen, und dann mit einer einfachen if Abfrage checken ob es schon 1 ist, oder nicht.

    Wie setze ich das am besten um und welchen Key lege ich dazu am besten wo an?

  • LogFile unter C:\ erstellen?

    • Simon09
    • 2. März 2017 um 14:49

    Also irgendwie lief es dann später doch, ich weiß nicht an welcher Stelle ich etwas verhauen hatte... Allerdings lassen sich diese Log Functions nicht in einer Else Section einbauen, richtig? Mir schmeißt er dann immer Syntaxfehler raus, dass er noch ein Else oder Endif Statements erwarten würde, was die Funktion an sich ja eigentlich garnicht tangieren sollte...

  • LogFile unter C:\ erstellen?

    • Simon09
    • 1. März 2017 um 10:59
    Zitat von alpines

    Ansonsten zeig uns mal das Beispiel wo es mit @HomeDrive nicht klappen soll. Wenn du das Makro @ScriptDir einfach mit @HomeDrive bzw. @DesktopDir ersetzt sollte es eigentlich klappen.

    Nunja das Beispiel ist ja eben genau die Änderung: Ich hatte in dem oben genannten Code einfach@ScriptDir mit @DesktopDir ersetzt, und da tut sich nichts... Habe schon sämtliche Makros durch (Desktop, Dokumentenordner, usw). Es will nur @ScriptDir funktionieren (das Script liegt zum Testen in dem Moment auf dem Desktop). Irgendeine Idee fürs Troubleshooting?

  • LogFile unter C:\ erstellen?

    • Simon09
    • 1. März 2017 um 10:49

    Hallo Forum,

    ich möchte in meinem Script an bestimmten Stellen eine Logfile auf C:\ erstellen lassen. Es klappt mit:


    Code
    _Log('Test')
    
    
    Func _Log($Text)
    	FileWrite(@ScriptDir & '\ql.txt', $Text & @CRLF)
     EndFunc   ;==>_Log

    ...bereits problemlos im Script Directory. Wenn ich nun aber statt @ScriptDir z.b. @HomeDrive oder @DesktopDir verwende, funktioniert es nicht. Was mach ich da falsch?

  • Checkbox aus vorhandener GUI auslesen / setzen

    • Simon09
    • 24. Februar 2017 um 12:41

    Danke. Gut zu wissen dass die IDs oft dynamisch sind. Ich hätte vermutet dass dies die genauste Art der Ansteuerung ist... Das muss ich auf jeden Fall im Auge behalten falls sich z.B. mal die Anzahl der Checkboxen in der Maske unter bestimmten Voraussetzungen ändert.

    Edit: Verrückt, wenn ich mit ID arbeite wird die Checkbox ebenfalls als 0 ausgelesen... Irgendeine Idee?

  • Checkbox aus vorhandener GUI auslesen / setzen

    • Simon09
    • 24. Februar 2017 um 12:35

    Also z.B. so?:


    AutoIt
    ControlCommand($hWnd, '', '[CLASS:Button;346]', 'Check', '')

    Oder wie genau lautet die ID-Syntax? Wo genau muss ich die Option hinsetzen?

    Sorry für die Anfängerfragen, ich hab AutoIT seit Ewigkeiten nicht mehr angeschaut.

  • Checkbox aus vorhandener GUI auslesen / setzen

    • Simon09
    • 24. Februar 2017 um 12:10

    Zumindest nicht bewusst, das wäre jetzt auch mein Überlegungsansatz gewesen dass das falsche Fenster ermittelt wird. Ich dachte das wird durch das komplette Ausschreiben des Titels quasi verhindert. Würde es klappen nur den letzten (sich ändernden Teil) des Titels anzugeben oder funktioniert das ganze dann nicht mehr?

    edit: Ansonsten hätte ich ja die IDs der Checkboxen zur Hand. Kann ich diese mit ControlCommand auch als Parameter verwenden anstatt die Instance? Wie würde eine Zeile dann aussehen?

  • Checkbox aus vorhandener GUI auslesen / setzen

    • Simon09
    • 24. Februar 2017 um 11:47

    Hallo BugFix,

    danke für deine schnelle Hilfe. Das hat soweit super geklappt, ich konnte mit dem Code checked überprüfen, checken und unchecken, alles super.

    Komischerweise laufe ich nun aber vor folgenden Fehler: Ein Fenster weiter ist abermals eine Checkbox, welche Instance 1 hat. Diese kann ich weder korrekt auslesen (wird als 0 ausgelesen obwohl sie checked ist), noch kann ich diese unchecken und wieder checken...

    Ich hatte natürlich überlegt ob es daran liegt dass die gleiche Instance ein Schritt zuvor unchecked wird. Das würde zwar theoretisch erklären dass sie mit 0 statt 1 ausgelesen wird, aber das ganze müsste ja durch ein erneutes Schreiben in unterschiedliche iResult Variablen abgefangen werden können... (Verwende jetzt pro Fenster iResult 1, iResult2, usw...).

    Irgendeine Idee? Das Handle des Fensters hatte ich natürlich auch entsprechend angepasst. Nur das erste Wort im Titel ist gleich.

    Folgend der Code: In Fenster 2 funktioniert alles, in Fenster 3 wird iResult4 als "0" ausgelesen...:

    AutoIt
    ; Fenster 2 von 9
    ; Handle des Fensters holen
    $sTitle = "Arbeitsplatzaktualisierung - Neuinstallation"
    $hWnd = WinGetHandle($sTitle)
    WinWaitActive($sTitle)
    Sleep(5000) ;5sek warten
    ControlCommand($hWnd, '', '[CLASS:Button;INSTANCE:1]', 'UnCheck', '')
    Sleep(5000) ;5sek warten
    $iResult3 = ControlCommand($hWnd, '', '[CLASS:Button;INSTANCE:1]', 'IsChecked', '')
    
    
    If ($iResult3 = "0") Then
    ControlClick($hWnd, "", "[CLASS:Button;INSTANCE:14]") ;Weiter
    Else
       MsgBox(0,"Checkbox-Fehler", "Checkbox Prüfung fehlgeschlagen.")
       WinClose("Installations-Manager")
       EndIf
    
    
    ;Fenster 3 von 9
    ; Handle des Fensters holen
    $sTitle = "Arbeitsplatzaktualisierung - Aktualisierung"
    $hWnd = WinGetHandle($sTitle)
    WinWaitActive($sTitle)
    Sleep(5000) ;5sek warten
    ControlCommand($hWnd, '', '[CLASS:Button;INSTANCE:1]', 'Check', '')
    Sleep(2000) ;2sek warten
    $iResult4 = ControlCommand($hWnd, '', '[CLASS:Button;INSTANCE:1]', 'IsChecked', '')
    
    
    If ($iResult4 = "1") Then
    ControlClick($hWnd, "", "[CLASS:Button;INSTANCE:16]") ;Weiter
    Else
       MsgBox(0,"Checkbox", $iResult4 & " ...")
       ;MsgBox(0,"Checkbox-Fehler", "Checkbox Prüfung fehlgeschlagen.")
       EndIf
    Alles anzeigen

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™