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

Beiträge von BadCompany

  • ControlSend o. ControlClick betätigt nicht "Finish" Button

    • BadCompany
    • 14. Juli 2016 um 08:33

    Habe inzwischen das Problem gelöst bekommen.

    Der Unterschied lag an der x64 Installation. Bei x64 installiert unser Software Lieferant das C++ Redistributable nicht mehr mit.
    Mein Skript hat aber auf das Fenster gewartet. Als es nicht kam blieb das Skript einfach an der Stelle stehen.

    Sorry wegen der späten Antwort... habs total vergessen 8|

  • ControlSend o. ControlClick betätigt nicht "Finish" Button

    • BadCompany
    • 24. November 2015 um 12:54

    Eben nochmal probiert mit deinem Vorschlag.

    AutoIt
    Opt("WinTitleMatchMode", 2)
    Opt("WinTextMatchMode", 2)
    Global $SetupFinishActivate = WinActivate("Atlantic Zeiser Printers",  Completing the Atlantic Zeiser Printers")
    WinWaitActive("Atlantic Zeiser Printers", "Completing the Atlantic Zeiser Printers", 1500)
    ControlSend("Atlantic Zeiser Printers", "Completing the Atlantic Zeiser Printers", "[CLASS:Button; INSTANCE:2]", "left", 1)

    Geht auch nicht.

    Das seltsame ist das die vorherigen Fenster mit Pfadeingabe und Lizenzbestätigung alle ganz normal funktionieren.
    unseren Lieferanten hab ich auch schon gefragt was sie anderes machen und ob sie helfen können. Aber die kennen AutoIt nicht...

  • ControlSend o. ControlClick betätigt nicht "Finish" Button

    • BadCompany
    • 24. November 2015 um 12:00

    Die Fenster Klasse hab ich angegeben weil es mir das Windows Info Tool ausgespuckt hatte :whistling:

    Hm... mit Textsuche hatte ich das auch schon versucht. Da ist halt das Problem, dass die Versionsnummer nicht fest sein darf. Da ich aber weiß wie die Nummer lautet hatte ich die Textsuche mit "Atlantic Zeiser..."& $VersionNo &"Setup" eingetragen.
    Hat aber auch nicht zum Erfolg geführt.

    Es ist als ob Autoit das Fenster nicht findet...

    Wäre es möglich was über das Handle des Fensters zu machen? WinWaitActive etc. gibt ja als Erfolg das Handle zurück.

  • ControlSend o. ControlClick betätigt nicht "Finish" Button

    • BadCompany
    • 23. November 2015 um 16:07

    Eigentlich schon:


    AutoIt
    #RequireAdmin
    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Icon=..\AZ Icon\AZ icon 64x64.ico
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    
    
    ;#AutoIt3Wrapper_outfile=H:\Software\DOD\Test Builds\AZ DOD Installation460_08beta01\Setup V4.6.0.08_0.exe
    #include <file.au3>
    #include <Inet.au3>
    #Include <date.au3>
    #include <GUIConstants.au3>
    #include <GuiConstantsEx.au3>
    #include <GuiIPAddress.au3>
    #include <INet.au3>
    #Include <Security.au3>
    #include <IE.au3>
    #include <NetShare.au3>
    Alles anzeigen

    Und ich hab es auf zwei verschiedenen PCs versucht da ich mit meinen Laptop an die Gruppenrichtlinien von meiner Fa. gebunden bin.
    Aber auf meinem Test-PC hab ich volle Zugriffsrechte.

  • ControlSend o. ControlClick betätigt nicht "Finish" Button

    • BadCompany
    • 23. November 2015 um 13:42

    Hallo liebe Community,

    ich brauche mal wieder Hilfe von ein paar Profis.

    Und zwar habe ich in einer Automatisierten Installationsroutine ein Fenster das sich nicht schließen lässt und dadurch das Script unterbrochen wird.

    Und zwar hängt es immer an einem Fenster wenn von dem ersten Installationsteil das "Setup"-Fenster per "Finish" Button beendet werden soll.

    Das Script lief auch zuvor und da wurde einfach per Winwaitactive und GlobalSend("!F") das Fenster geschlossen. Nun hat vermutlich der SW Lieferant irgendwas geändert und nun läuft mein Script nicht mehr durch.

    Nun wollte ich anstatt dem Send Befehl, ControlSend oder ControlClick verwenden um sicher zu sein dass auch das richtige Fenster bearbeitet wird.

    Das Windows Info Tool gibt mir folgendes aus:

    >>>> Window <<<<
    Title: Atlantic Zeiser Printers 6.0r8(x64) Setup
    Class: #32770
    Position: 708, 325
    Size: 503, 389
    Style: 0x94CA084C
    ExStyle: 0x00010100
    Handle: 0x00000000002F0DC2

    >>>> Control <<<<
    Class: Button
    Instance: 2
    ClassnameNN: Button2
    Name:
    Advanced (Class): [CLASS:Button; INSTANCE:2]
    ID: 1
    Text: &Finish
    Position: 324, 327
    Size: 75, 23
    ControlClick Coords: 34, 10
    Style: 0x50010000
    ExStyle: 0x00000004
    Handle: 0x000000000030080A

    >>>> Mouse <<<<
    Position: 361, 362
    Cursor ID: 0
    Color: 0x000000

    >>>> StatusBar <<<<

    >>>> ToolsBar <<<<

    >>>> Visible Text <<<<
    < &Back
    &Finish
    Cancel
    Completing the Atlantic Zeiser Printers 6.0r8(x64) Setup Wizard
    Atlantic Zeiser Printers 6.0r8(x64) has been installed on your computer.

    Click Finish to close this wizard.


    >>>> Hidden Text <<<<
    Nullsoft Install System v2.46
    Nullsoft Install System v2.46
    Installation Complete
    Setup was completed successfully.

    Der Teil in meinem Script sollte dann wie folgt ablaufen:


    AutoIt
    Opt("WinTitleMatchMode", 4)
    Opt("WinTextMatchMode", 2)
    Global $SetupFinishActivate = WinActivate("[CLASS:#32770]", "")
    Global $SetupFinishActive = WinActive("[CLASS:#32770]", "")
    DataLog("Setup Finish Active:" & $SetupFinishActive)
    If $SetupFinishActive = 0 Then
    $SetupFinishActivate("[CLASS:#32770]", "")
    DataLog("Activate Handle:" & $SetupFinishActivate)
    EndIf
    
    
    WinWaitActive("[CLASS:#32770]", "", 1500)
    ControlClick("[CLASS:#32770]", "", "[CLASS:Button; INSTANCE:2]", "primary", 1)
    Alles anzeigen

    Oben mit ControlClick. Hab auch schon die Koordinaten mit eingegeben. Und anstatt ControlClick hab ich Control Send verwendet und versucht entweder durch senden "!F" oder "{Enter}" den Button zu betätigen. Aber nichts funktioniert.

    Ach genau. anstatt von "[Class]" als Titel hab ich auch den Text verwendet mal mit und mal ohne den WinTitleMatchmode.

    Und ja ich hab schon jede Menge Forenthreads durchgelesen aber keine Lösung gefunden :S

    Gibt es noch eine andere Möglichkeit AutoIt zu zwingen auf ein bestimmtes Fenster zu reagieren? Und :rtfm: hat mich auch nicht weitergebracht ;)

    Ich hoffe ihr habt mir eine Lösung :Face:

    LG
    Bad

    Erstellt wurde das Script mal mit XP, dann unter WIN 7 32bit gepflegt und sollte nun auf WIN 7 64 bit laufen. Vielleicht liegt hier ja der Hund begraben...

    SciTe version ist 3.4.4(falls es was bringt)

  • While oder For Schleife zum senden von TCP kommandos + ändern von Dateinamen

    • BadCompany
    • 21. Juli 2015 um 15:07

    So jetzt hab ich nochmal komplett neu geschrieben.

    Debug(an verschiedenen Stellen ausprobiert) zeigt keine Fehler. Es scheint auch das die Schleife durchläuft da die Zeit wie lange das Script läuft mit den "Sleep" Zeiten zusammen passt.


    AutoIt
    SendCommand()
    
    
    Func SendCommand()
    	TCPStartup()
        Local $IP = "127.0.0.1"
        Local $PORT = 8000
    	$mainsocket = TCPConnect($IP, $PORT)
    	$SocketListen= TCPListen($IP, $PORT)
    ;ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : 0 = ' & 0 & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
    		If @error Then
    			MsgBox(0, "Error", "TCP can not connected:" & @error)
    		Else
    
    
    ;Sleep(2500)
    
    
    			Local $i = 1
    			While $i <= 3
    					TCPSend($mainsocket, "statusprint"& @CRLF)
    ;ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : 0 = ' & 0 & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
    					If @error Then
    							MsgBox(0, "Error", "Cannot send StatusPrint:" & @error)
    							Else
    								TCPSend($mainsocket, "LoadPrint C:\layout\5095600_V1.3.dsn"& @CRLF)
    								If @error Then
    								MsgBox(0, "Error", "Cannot send Loadprint:" & @error)
    								Else
    									sleep(2000)
    									TCPSend($mainsocket, "startprint"& @CRLF)
    									If @error Then
    									MsgBox(0, "Error", "Cannot send StartPrint:" & @error)
    									Else
    ;ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : 0 = ' & 0 & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
    									Sleep(5000)
    									EndIf
    								EndIf
    
    
    							EndIf
    							$i = $i + 1
    			WEnd
    		EndIf
    ;ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : 0 = ' & 0 & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
    
    
    
    
    EndFunc
    
    
    
    
    Exit
    Alles anzeigen

    Aber es kommt immer noch nichts an der anderen Software an :S

    Dort wird im Log files sämtliche TCP/IP Eingänge mit geschrieben.

    TCPSend ist doch das gleiche wie wenn ich die IP + Port manuell aufrufe und die Befehle mit der Tastatur eingebe.


    Bin langsam echt am verzweifeln ?(?(

    Nachtrag: vor WEnd hab ich noch mal den ConsoleWrite Debug Teil rein und das kommt bei raus:
    >"C:\Program Files (x86)\AutoIt3\SciTE\AutoIt3Wrapper\AutoIt3Wrapper.exe" /run /prod /ErrorStdOut /in "C:\Users\liebgott\Projects\Fernsteuerung PE\FB Telnet_3.au3" /UserParams
    +>15:08:28 Starting AutoIt3Wrapper v.14.801.2025.0 SciTE v.3.4.4.0 Keyboard:00000407 OS:WIN_7/Service Pack 1 CPU:X64 OS:X64 Environment(Language:0407)
    +> SciTEDir => C:\Program Files (x86)\AutoIt3\SciTE UserDir => C:\Users\liebgott\AppData\Local\AutoIt v3\SciTE\AutoIt3Wrapper SCITE_USERHOME => C:\Users\liebgott\AppData\Local\AutoIt v3\SciTE
    >Running AU3Check (3.3.14.0) from:C:\Program Files (x86)\AutoIt3 input:C:\Users\liebgott\Projects\Fernsteuerung PE\FB Telnet_3.au3
    +>15:08:29 AU3Check ended.rc:0
    >Running:(3.3.14.0):C:\Program Files (x86)\AutoIt3\autoit3.exe "C:\Users\liebgott\Projects\Fernsteuerung PE\FB Telnet_3.au3"
    --> Press Ctrl+Alt+Break to Restart or Ctrl+Break to Stop
    @@ Debug(67) : 0 = 0
    >Error code: 0
    @@ Debug(67) : 0 = 0
    >Error code: 0
    @@ Debug(67) : 0 = 0
    >Error code: 0
    +>15:08:50 AutoIt3.exe ended.rc:0
    +>15:08:50 AutoIt3Wrapper Finished.
    >Exit code: 0 Time: 21.94


    ============================================================================

    Ich hab keine Ahnung warum aber jetzt funktioniert es mit dem zuletzt geposteten Script.

    Vielen Dank für die Hilfe!


    LG
    Bad

  • While oder For Schleife zum senden von TCP kommandos + ändern von Dateinamen

    • BadCompany
    • 20. Juli 2015 um 15:53

    Hi,

    Danke für die schnelle Antwort.

    Also ich bekomme das Telnet Fenster geöffnet. Nur das Senden der Kommandos LoadPrint, Startprint... geht nicht. Wenn ich aber über die Tastatur oder Copy/Paste die Kommandos schicke, geht es. Also Verbindung steht :)

    Wenn das oben richtig verstanden habe schickst du per ConsoleWrite den Befehl über TCP zum ändern der Datei bzw. des Dateinamens!? Richtig?

    So geht das bei mir leider nicht.

    Ich muss wie folgt vorgehen

    Ich sende folgende Befehlsreihenfolge an meine Print Engine:

    1. Loadprint C:\<Pfad zu meiner Datei die drucken möchte>
    2. Startprint <-- um drucken zu starten.

    Nun fängt meine Software an zu drucken. Aber anstatt das Bild an den Drucker zu schicken wird es als Bild unter C:\temp als output_000.tiff abgelegt.

    Und den Name muss ich eben von Output_000.tiff in xx.tiff ändern.

    Ist der Dateiname geändert soll Schleife wieder von vorne beginnen. Meine SW gibt jedesmal beim starten das output file aus.

    Ich hab das ganze nun mit ConsoleWrite versucht aber er will die Kommandos einfach nicht übertragen ;(


    AutoIt
    Send("{LWINDOWN}r")
    send("{LWINUP}")
    WinWaitActive("Ausführen")
    Send("telnet localhost 8000")
    send("{Enter}")
    WinWait("telnet localhost 8000")
    WinActivate("telnet localhost 8000")
    
    
    $i = 0
    While $i < 3
    	ConsoleWrite("statusprint{Enter}")
    	ConsoleWrite("LoadPrint C:\layout\5095600_V1.3.dsn{Enter}")
    	sleep(2000)
    	ConsoleWrite("startprint{Enter}")
    	Sleep(5000)
    	$i = $i + 1
    Wend
    Alles anzeigen


    Wenn ich anstatt ConsoleWrite den Send- Befehl verwende hab ich das selbe Ergebnis.

  • While oder For Schleife zum senden von TCP kommandos + ändern von Dateinamen

    • BadCompany
    • 20. Juli 2015 um 14:13

    Hallo zusammen,

    ich bräuchte mal eure Hilfe.

    Und zwar versuche ich unserem Programm(eine Drucker Print Engine) Kommandos über TCP/IP zu schicken um eine Produktion eines Kunden zu simulieren.
    Da mir deren übergeordnetes System nicht zur Verfügung steht dachte ich AutoIt ist dafür ja eigentlich prädestiniert :thumbup:

    Autoit soll folgendes tun:

    - Starten von Telnet localhost 8000 <-- Ja geht auch über TCPconnect, aber so sehe ich was an unser Programm geschickt wird, ohne zusätzliche GUI laufen zu haben. Das hab ich nach bisschen rumprobieren auch hinbekommen:

    AutoIt
    Send("{LWINDOWN}r")
    send("{LWINUP}")
    WinWaitActive("Ausführen")
    Send("telnet localhost 8000")
    send("{Enter}")
    WinWaitActive("telnet localhost 8000")


    Nun sollte die Schleife beginnen und für eine bestimmte Anzahl laufen und das hier abarbeiten:

    AutoIt
    Send("statusprint{Enter}")
    Send("loadPrint c:\layout\5095600_V1.3.dsn{Enter}")
    Sleep(2000)
    Send( "StartPrint{Enter}")
    Sleep(2000)

    Mein Programm legt mir im C:\temp Ordner dann ein output_000.tiff file ab. Das File sollte dann umbenannt werden in zum Beispiel 1.tiff. Da wenn die Schleife funktioniert das Output file jedesmal überschrieben wird, ich aber jedes Bild brauche um Fehler analysieren zu können :S

    Dies hätte ich dann theoretisch mit FileExist abgefragt ob die Datei vorhanden ist und dann mit FileCopy umbenannt. Bei mir scheitert es nun aber dabei den Dateinamen variable als Zähler von 1 - xxxx einzufügen...
    So z.B.:

    AutoIt
    $rename_outfile = FileExists("C:\temp\output_000.tiff")
    	If $rename_outfile = 1 Then
    	FileCopy("C:\temp\output_000.tiff", "C:\temp\" & $zahl &".tiff")
    	EndIf

    Aber wie lege ich fest das AutoIt für $zahl den richtigen Wert bzw. die richtige Zahl einsetzt??

    Für die While Schleife hab ich folgendes versucht:

    AutoIt
    $i = 0
    While $i <= 1000 ; Beispiel Wert
    
    
    ; dann kommen die Kommandos und das umbenennen der Out files
    
    
    $i = $i + 1
    WEnd

    Aber irgendwie klappt es nicht :cursing:

    Es öffnet sich Telnet und das wars dann ?(

    Ich hoffe das ist einigermaßen verständlich was ich machen möchte...

    Vielen Dank schon mal für eure Hilfe bin in Sachen programmieren totaler Anfänger.

    LG
    BadCompany

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™