8 Replies Latest reply on Feb 14, 2017 8:33 AM by WAN

    JA Click an Programm übergeben

    WAN Apprentice
      Hallo zusammen,

      Ich muss diese Woche einen Hotfix einspielen, weil sonst das Programm im März nicht mehr läuft. Jetzt aktzeptiert diese Hotfix.exe keinen "Silent-Swicht wie /s /q etc.
      Ich muss mit JA oder Nein bestätigen. In meinen Fall JA.
      Wie kriege ich dass im DSM hin, sonst wird dieser Hotfix nicht installiert.
      Wie macht Ihr dass ? Da muss es doch eine einfache möglichkeit geben.

      Besten Dank für eure Antwort.
      Walter
        • 1. Re: JA Click an Programm übergeben
          FrankScholer Master
          Hallo Walter,

          mit DSM Bordmitteln kannst du keine Tastaturanschläge simulieren, du kannst aber z.B. AutoIt nehmen (https://www.autoitscript.com/site/autoit/) und dir dort ein klitzekleines Script bauen und das per DSM aufrufen - das sollte dann tun.

          Wichtig aber, dass das DSM Paket nur im Userkontext laufen darf, also nicht per Service-Installer ausgeführt wird (weil seit längerem Dienste nicht mehr mit dem Desktop interagieren dürfen und das Setup-Programm dann gar kein Fenster darstellen kann, auf dessen "Ja"-Button ein simulierter Klick erfolgen könnte) und daher benötigen die Benutzer auch die entsprechenden Rechte...

          HTH, Grüße Frank
          • 2. Re: JA Click an Programm übergeben
            WAN Apprentice
            Hallo Frank,

            Besten Dank für den Tipp.
            Werde ich versuchen und Testen.
            Könnte man nicht auch mit den der SendKeys Methode von ActiveVB das abhandeln.
            Aber ich habe noch nicht so viele Erfahrung mit VB-Script.

            Gruss
            Walter
            • 3. Re: JA Click an Programm übergeben
              derniwi Master
              Hallo Walter,

              letztlich geht das auch mit VB:
              https://social.technet.microsoft.com/wiki/contents/articles/5169.vbscript-sendkeys-method.aspx

              Wie schon erwähnt wurde, das Skript dann als Benutzer starten.
              Wichtig ist, dass da noch eine kleine Zeit gewartet wird.

              Set WshShell = WScript.CreateObject("WScript.Shell")

              WshShell.Run "%windir%
              otepad.exe"
              Wscript.Sleep 1500
              WshShell.AppActivate "Notepad"

              WshShell.SendKeys "{TAB}"
              WshShell.SendKeys "{ENTER}"


              Der Befehl "AppActivate" braucht als Parameter den Fensternamen. Und einen Mausklick würde ich nicht simulieren, hier leiber schauen, dass man mit der Tastatur im Dialog navigieren kann. Also mit der Tabulator-Taste oder auch Hochstell-Tabulator. Das kannst Du ja durchaus interaktiv testen und dementsprechend die Befehle zusammensetzen.

              AutoIt, AutoHotKey und Co. machen letztlich das gleiche, wobei die auch evtl. einen Skript-Editor mit Aufzeichnungsfunktion haben. Aber das Skript ob sollte für die meisten Fälle reichen.

              Welchen Patch für welches Programm hast Du einzuspielen?

              Gruß
              Nils
              • 4. Re: JA Click an Programm übergeben
                WAN Apprentice
                Hallo Nils,

                Danke für den Tipp.
                Ich muss für Draftsight diesen Hotfix installieren da ein Zerfikat abläuft.

                https://www.3ds.com/fileadmin/PRODUCTS-SERVICES/DRAFTSIGHT/IMG/Readme_Critical_Hotfix_Feb2017.pdf

                Ich brauch nur ALT-J oder Enter wenn der Hotfix gestartet ist.

                Gruss
                Walter
                • 5. Re: JA Click an Programm übergeben
                  WAN Apprentice
                  Hallo Nils,

                  Ich habe dieses Sript geschrieben.
                  Er startet das Hotfix und Aktiviert dann das Fenster, (blau) aber danach bleibt er stehen
                  sendet kein Enter, es ist zuätzlich noch ein CMD offen. Was ist hier falsch ?
                  Bitte um Hilfe als nicht so geübter VB-Scripter

                  Gruss Walter

                  Script-Start
                  Set WshShell = WScript.CreateObject("WScript.Shell")

                  WshShell.Run "C:\Temp\DraftHF\hotfix.exe", 1, True
                  Wscript.Sleep 1500
                  WshShell.AppActivate "Bitte wählen Sie Ja, um forzufahren, oder NEIN um die Installation des Hotfix zu benden."
                  WshShell.SendKeys "{ENTER}"
                  Sricpt-End
                  • 6. Re: JA Click an Programm übergeben
                    NicoS1 Master
                    Hallo Walter,

                    ich persönlich hab mit der VBScript Variante ähnliche Erfahrungen wie du und verwende deshalb auch eher Autoit.

                    Wenn es nur darum geht einen einzigen Button anzuklicken sieht das AutoIT Script mal als Beispiel so aus im einfachsten Fall.

                    WinWait("Setup Routine", "", 0)
                    ControlClick("Setup Routine", "", "Button1")

                    Das Stichwort "Setup Routine" ist der TITEL des Fensters, den musst halt entsprechend anpassen. Bei Autoit ist ein kleines Tool dabei namens "Window Info". Du machst dein Setup einfach bis zu dem Punkt an dem das Fenster kommt. Dann nimmst du das Window Info Tool, und ziehst das Fadenkreuz auf den Button. Dann steht unter "Basic Control Info" bei Class "Button" und unter Instance z.B. "3" Würde bedeuten, der Button den du anklicken willst mit "ControlClick" würde "Button3" heißen.

                    Gleichzeitig hast du im WindowInfo Tool unten dann das Tab "Window" in dem auch der Titel drin steht.

                    Es passiert insofern:
                    WinWait("Setup Routine", "", 0) = Das Script wartet so lange bis ein Fenster auftaucht, mit dem Titel "Setup Routine".
                    ControlClick("Setup Routine", "", "Button1") = Das Script klickt im Fenster mit dem Titel "Setup routine" den Button1 an.

                    Wenn du dein Script fertig hast, klickst es im Explorer mit Rechts an und sagst wählst "Compile" (je nachdem, x64 oder x86).

                    Im DSM, machst du nun einen execute auf die komplilierte .exe Datei OHNE Warten auf Ausführung und NICHT als Service, und startest dann normal im eScript dein Setup an. Sobald das aufgeht, erledigt das vorher gestartete Autoit Script den Rest.

                    Wenn mans einmal gemacht hat ists relativ simpel Wie Frank gesagt hat, diese Pakete sollten unbedingt so eingestellt werden, dass Sie nur mit dem AutoInstaller und nicht mit dem Service Installer laufen.

                    Hier mal ein komplexeres Beispiel, jetzt nicht 100% auf deinen Fall anwendbar... aber das Script hier z.B. öffnet unter Windows 10 die Notification Center Einstellungen, wählt alle Warnoptionen ab, die abwählbar sind, und schließt es wieder

                    Run("rundll32.exe shell32.dll,Control_RunDLL wscui.cpl", "")
                    Sleep(1000)
                    Send("+{TAB 7}")
                    Send("{ENTER}")
                    Sleep(2000)
                    WinWait("[CLASS:CabinetWClass]", "", 4)
                    ControlCommand("[CLASS:CabinetWClass]", "", "Button1", "UnCheck", "")
                    ControlCommand("[CLASS:CabinetWClass]", "", "Button2", "UnCheck", "")
                    ControlCommand("[CLASS:CabinetWClass]", "", "Button3", "UnCheck", "")
                    ControlCommand("[CLASS:CabinetWClass]", "", "Button4", "UnCheck", "")
                    ControlCommand("[CLASS:CabinetWClass]", "", "Button5", "UnCheck", "")
                    ControlCommand("[CLASS:CabinetWClass]", "", "Button6", "UnCheck", "")
                    ControlCommand("[CLASS:CabinetWClass]", "", "Button7", "UnCheck", "")
                    ControlCommand("[CLASS:CabinetWClass]", "", "Button8", "UnCheck", "")
                    ControlCommand("[CLASS:CabinetWClass]", "", "Button9", "UnCheck", "")
                    ControlCommand("[CLASS:CabinetWClass]", "", "Button10", "UnCheck", "")
                    ControlCommand("[CLASS:CabinetWClass]", "", "Button11", "UnCheck", "")
                    ControlCommand("[CLASS:CabinetWClass]", "", "Button12", "UnCheck", "")
                    ControlCommand("[CLASS:CabinetWClass]", "", "Button13", "UnCheck", "")
                    ControlCommand("[CLASS:CabinetWClass]", "", "Button14", "UnCheck", "")
                    ControlCommand("[CLASS:CabinetWClass]", "", "Button15", "UnCheck", "")
                    ControlCommand("[CLASS:CabinetWClass]", "", "Button16", "UnCheck", "")
                    ControlCommand("[CLASS:CabinetWClass]", "", "Button17", "UnCheck", "")
                    ControlCommand("[CLASS:CabinetWClass]", "", "Button18", "UnCheck", "")
                    ControlCommand("[CLASS:CabinetWClass]", "", "Button19", "UnCheck", "")
                    ControlClick("[CLASS:CabinetWClass]", "", "Button20")
                    Sleep(1000)
                    WinClose("[CLASS:CabinetWClass]")
                    • 7. Re: JA Click an Programm übergeben
                      ChristophSteckelberg Expert
                      Hallo

                      Ich würde darauf wetten, dass der Draftsight Hotfix überhaupt nichts anderes macht, als die zur installierten Version passende DDKERNEL.DLL in das bin Verzeichnis "abzukippen". Vorher prüft der Hotfix, ob noch DraftSight-Komponenten geöffnet sind.

                      Evtl. könntest Du mit dem Sysinternals ProcessMonitor oder in der DSM Konsole per Snapshot mal schauen, was die hotfix.exe so treibt.
                      • 8. Re: JA Click an Programm übergeben
                        WAN Apprentice

                        Hallo

                        Ich würde darauf wetten, dass der Draftsight Hotfix überhaupt nichts anderes macht, als die zur installierten Version passende DDKERNEL.DLL in das bin Verzeichnis "abzukippen". Vorher prüft der Hotfix, ob noch DraftSight-Komponenten geöffnet sind.

                        Evtl. könntest Du mit dem Sysinternals ProcessMonitor oder in der DSM Konsole per Snapshot mal schauen, was die hotfix.exe so treibt.



                        Hallo Christoph,

                        Ja, habs mit der DSM Konsole überprüft, er kopiert nur das passende DDKERNEL.DLL
                        in das Verzeichnis. Das ist das sauberste einfach mit der DSM Konsole das DLL tauschen. Das kann DSM perfekt.

                        Danke Allen für das konstruktive Feedback.
                        Walter