automatisierter Programmstart

  • Hallo zusammen,

    ich starte mit AutoIT eine ERP.exe in Windows. Soweit so gut, das Programm läuft auch durch (bei aktiven Bildschirm), wenn ich die Remoteverbindung zur VM verlasse, startet zwar die ERP.exe, aber die Tastenkombinationen werden nicht ausgeführt. Beispiel, das Programm wird bis zum Anmeldebildschirm gestartet, aber die Button werden bei inaktiven Bildschirm nicht bedient.

    Ich hoffe es ist soweit verständlich.

    Danke im Voraus

    TottoW

  • Wir haten so ein Thema hier schon einmal.

    Es gibt ein Problem mit dem Beenden der aktiven Remote-sitzung, das dann solche Befehle nicht mehr funktionieren.

    Da du keinen Code gepostet hast, werfe ich mal einen Blick in meine :Glaskugel:

    Du sprichst die Buttons per MouseClick() an und nicht über die ControlID, richtig?

    Hast du die Möglichkeit das zu ändern bzw. hat das Programm ggf. eine API, die man nutzen könnte?

  • Danke für die schnelle Rückmeldung, anbei mein Quellcode.

    Ich weiß das das nicht optimal ist, aber es funktioniert erst einmal. Ich bin auf dem Gebiet AutoIT noch ein Frischling.

  • Meine :Glaskugel: lag also richtig.

    Also 2 Möglichkeiten:

    1. API ansteuern (https://www.sagecity.com/us/sage100_erp…tion---sage-100), hierbei aber schauen wegen der richtigen Version!

    API-Ansteuerung ist nicht gerade mein Steckenpferd aber eigentlich der beste Weg andere Programme zu steuern, wenn sie es bereit stellen.

    2. Die Controls per ControlID ansprechen. Diese kannst du z.B. mit der Au3Info.exe bzw. Au3Info_x64.exe die im AutoIt Ordner liegen herausfinden, sofern Sage 100 keine Java-Applikation ist.

    Ansteuern lassen diese sich dann mit ControlClick()

    Aber ob das dann definitiv funktioniert, wenn du abgemeldet bist, bin ich mir nicht 100%ig sicher.

    Edit: Das andere Thema dazu war hier: Autoit läuft Fehlerhaft bei Remote Verbindung über Windows auf einen Windows Root Server; aber fehlerlos über den Browserzugang

    Evtl. hilft dir das etwas.

    Einmal editiert, zuletzt von Moombas (13. September 2022 um 09:47)

  • Hallo TottoW,

    ich habe vor vielen Jahren mal Sage mit AutoIt automatisiert.

    Ich weiß nicht, ob es da Änderungen an der Oberfläche gegeben hat, aber da konnte man alle Felder sauber identifizieren und direkt ansprechen.

    Schau Dir in dem Zusammenhang mal Controlsend, ControlSetText und ControlClick an.

  • Danke für die Rückmeldung,

    die Controls haben keine ID und keinen eindeutigen Namen (lt. Au3Info_x64), das macht den Punkt 2 schon etwas schwieriger.

    Punkt 1 wäre bei mir völliges Neuland

  • Schau mal, ob Du damit den Inhalt des Feldes lesen kannst:

    Du muss aber TfrmKaufmannMain durch die Klasse des Fensters ersetzen - oder alternativ das [CLASS:TfrmKaufmannMain] durch den Fensternamen.

    ControlGetText("[CLASS:TfrmKaufmannMain]", "", "[CLASS:OFormSub; INSTANCE:2]")

    und dann schau, ob Du mit

    ControlSetText ( "[CLASS:TfrmKaufmannMain]", "", "[CLASS:OFormSub; INSTANCE:2]", "new text") etwas hineinschreiben kannst - hier gilt das gleiche für [CLASS:TfrmKaufmannMain]

  • Hallo zusammen,

    danke für die Rückmeldungen.

    Da ich im Einsteigermodus bin, poste ich meinen derzeitigen Quellcode:

    Der rot (bzw. Zeile 9) gekennzeichnete String funktioniert nur bei aktiven Bildschirm, beende ich die Remotesession, startet zwar das ERP Programm, aber wie oben schon beschrieben, werden keine Tastatureingaben mehr gesendet. Mit den schon vorhandenen Vorschlägen bin ich als Einsteiger nicht vorangekommen, sorry. Wie kann ich diesen String anpassen, sodass er auch ohne Aktive Session funktioniert. Das wäre meine erste Baustelle :(

    Nochmals Danke im Voraus

    Einmal editiert, zuletzt von TottoW (14. September 2022 um 07:55)

  • Code
        ControlSend("Anmeldeassistent","","","{ENTER}")

    Aus der Hilfe zu ControlSend:

    Function ControlSend

    ControlSend ( "title", "text", controlID, "string" [, flag = 0] )

    Du hast keine controlID. Dein Befehl müsste so ausschauen:ControlSend("Anmeldeassistent", "", "<hier muss die controlID rein>", "{ENTER}")

    controlID: Da schreibst du das rein, was Du in Au3Info unter Advanced (Class) bekommst: z.B. "[CLASS:Scintilla; INSTANCE:1]"

    ACHTUNG: In meinem Beispiel steht die controlID von SciTE drin - da musst Du Deine einsetzen, also nicht [CLASS:Scintilla... übernehmen. Wenn Du gar nicht klarkommst, dann schick einen Screenshot von Au3Info

  • Hier der aktuelle Code und die Info aus Au3Info

    >>>> Window <<<<

    Title: Anmeldeassistent

    Class: OFormPopup

    Position: 556, 221

    Size: 808, 487

    Style: 0x96000000

    ExStyle: 0x00000000

    Handle: 0x00000000000E08B2

    >>>> Control <<<<

    Class: OFormSub

    Instance: 2

    ClassnameNN: OFormSub2

    Name:

    Advanced (Class): [CLASS:OFormSub; INSTANCE:2]

    ID:

    Text:

    Position: 0, 0

    Size: 808, 487

    ControlClick Coords: 334, 422

    Style: 0x56000000

    ExStyle: 0x00000000

    Handle: 0x00000000001804CA

    >>>> Mouse <<<<

    Position: 890, 643

    Cursor ID: 0

    Color: 0xFFFFFF

    >>>> StatusBar <<<<

  • Vom Ablauf her sieht das ja soweit OK aus (ich weiß nur nicht, warum die Sleep darin sind).

    Ich würde es etwas anders gestalten:

    Wegen der Remote-Verbindung beachte das Edit in Post #4.