Clickbot geht zu früh los

  • ich hab keine lösung wie ich die maus da positioniere wo das fenster aufgeht, kann ja verschoben werden oder sonst was,
    deshalb habe ich es mit bloßen tasten versucht. da es sehr simpel ist, kompletter code:

    WinWaitActive("Concurrent RDP Patcher")
    Send("{TAB}")
    Send("{TAB}")
    Send("{SPACE}")
    Send("{TAB}")
    Send("{SPACE}")

    mein problem ist das der schon startet wenn ich das programm im explorer markiere.
    wie lasse ich ihn warten bis es wirklich offen und gestartet ist?

    >>>> Window <<<<
    Title: Concurrent RDP Patcher
    Class: WindowsForms10.Window.8.app.0.378734a
    Position: 50, 50
    Size: 290, 236
    Style: 0x16CB0000
    ExStyle: 0x00050180
    Handle: 0x0007018A

    mit diesen windows info informationen kann ich nicht arbeiten aber euch hilft es evtl.
    danke

    Einmal editiert, zuletzt von Marabunta (9. August 2014 um 16:56)

  • Ich würde dir empfehlen dir mal die ganzen Control* - Funktionen in der Hilfe anzuschauen, damit kannst du das Fenster richtig automatisieren. Bei deinem Skript reicht schon ein einfacher Tastendruck um alles außereinandern zu bringen.

    There's a joke that C has the speed and efficieny of assembly language combined with readability of....assembly language. In other words, it's just a glorified assembly language. - Teh Interwebz

    C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do, you blow off your whole leg. - Bjarne Stroustrup
    Genie zu sein, bedeutet für mich, alles zu tun, was ich will. - Klaus Kinski

  • Fast fertig:

    WinWaitActive("[CLASS:WindowsForms10.Window.8.app.0.378734a]")
    ControlSend("Concurrent RDP Patcher", "","[CLASS:WindowsForms10.BUTTON.app.0.378734a; INSTANCE:2]", "{SPACE}")
    ControlSend("Concurrent RDP Patcher", "","[CLASS:WindowsForms10.BUTTON.app.0.378734a; INSTANCE:1]", "{SPACE}")
    ControlSend("Concurrent RDP Patcher", "","[CLASS:WindowsForms10.BUTTON.app.0.378734a; INSTANCE:3]", "{SPACE}")

    While 1
    $var = ControlGetText("[CLASS:WindowsForms10.Window.8.app.0.378734a]","termsrv.dll is patched","1772750")
    Sleep(300)
    If $var = "OK" Then
    WinClose("[CLASS:WindowsForms10.Window.8.app.0.378734a]")
    ExitLoop
    EndIf
    WEnd

    alles bis auf die schleife funktioniert. er patcht aber kommt schließt nicht mehr. warum erkennt der nicht das es geklappt hat?

    3 Mal editiert, zuletzt von Marabunta (9. August 2014 um 14:57)

  • Hi,

    Zitat

    wie lasse ich ihn warten bis es wirklich offen und gestartet ist?

    Remote? Garnicht!
    Das Problem ist so alt wie Windows selbst und nennt sich Windows. Niemand, nicht mal Windows selbst kann dir sagen, ob das was du auf dem Bildschirm siehst, nicht entweder schon längst obsolet ist, oder noch garnicht aktiv im Sinne von ab sofort beeinflussbar!
    So bleibt dir nichts weiter übrig, als entweder mit vielen (langen) Sleeps zu arbeiten, oder mit Abfragen innerhalb von (Endlos)-Schleifen die gewünschten Zustände (Fenster aktiv und eingabebereit) SICHER abzufangen.

    Ich kämpfe täglich mit diesem Problem bei der Automatisierung von Datenbank-Frontends, welche, wie übrigens die meisten M$-Programme auch, sich einen SCHEISS um das Windows-Fenster-Management scheren.
    Da musst du aktive Fenster mehrmals aktivieren, damit die Controlsends funktionieren und immer wieder abfragen, ob Fenster auch wirklich geöffnet sind bzw. das Control die Eingabe auch wirklich bekommen hat.
    Remote wird dermaßen viel von diesen Messages "verschluckt", das geht auf keine Kuhhaut. Aber wenn man sich daran gewöhnt hat, und sich stundenlang Workarounds ausdenkt funktionieren die Scripte (meistens) und man kann Kaffee trinken gehen :thumbup:

    Zitat

    es soll nur schnell fertig sein.

    vergiss es! "Schnell" steht WEIT hinter der Option "Sicher", das steht fest! Natürlich kannst du Wartezyklen usw. verkürzen, aber das Problem tritt spätestens auf, wenn du diese Scripte dann von einem anderen Rechner startest und sie dann nicht mehr funktionieren.

  • Zitat

    $var
    Error:Incorrect number of parameters in function call
    #######
    was ist falsch?

    Blick in die Hilfe verpennt?
    ControlID fehlt...

  • schau bitte auf den post darüber, ich hab es für meinen zweck fast fertig.
    ich kriege ihm aber nicht beigebracht darauf zu warten und dann das fenster zu schließen.

    # die id hab ich bereits eingetragen aber möglicherweise die falsche?!

    >>>> Window <<<<
    Title: Concurrent RDP Patcher
    Class: WindowsForms10.Window.8.app.0.378734a
    Position: 100, 100
    Size: 290, 236
    Style: 0x16CB0000
    ExStyle: 0x00050180
    Handle: 0x00211262

    >>>> Control <<<<
    Class: WindowsForms10.Window.8.app.0.378734a
    Instance: 1
    ClassnameNN: WindowsForms10.Window.8.app.0.378734a1
    Name: GroupBox3
    Advanced (Class): [NAME:GroupBox3]
    ID: 1772750
    Text: OS info
    Position: 9, 6
    Size: 266, 54
    ControlClick Coords: 192, 41
    Style: 0x56000000
    ExStyle: 0x00010000
    Handle: 0x001B0CCE

    >>>> Mouse <<<<
    Position: 304, 168
    Cursor ID: 0
    Color: 0xF0F0F0

    >>>> StatusBar <<<<

    >>>> ToolsBar <<<<

    >>>> Visible Text <<<<
    OS info
    termsrv.dll is unpatched
    Microsoft Windows 7 Professional - x64
    Options
    Enable blank password logons
    Enable multiple logons per user
    Patch/Unpatch
    Patch
    Unpatch


    >>>> Hidden Text <<<<

  • ich hab jetzt CLASS direkt vom text mit der instanz und id genommen. funktioniert noch immer nicht?!
    - wichtig ist nur noch die while schleife

    WinWaitActive("[CLASS:WindowsForms10.Window.8.app.0.378734a]")
    ControlSend("Concurrent RDP Patcher", "","[CLASS:WindowsForms10.BUTTON.app.0.378734a; INSTANCE:2]", "{SPACE}")
    ControlSend("Concurrent RDP Patcher", "","[CLASS:WindowsForms10.BUTTON.app.0.378734a; INSTANCE:1]", "{SPACE}")
    ControlSend("Concurrent RDP Patcher", "","[CLASS:WindowsForms10.BUTTON.app.0.378734a; INSTANCE:3]", "{SPACE}")

    While 1
    $var = ControlGetText("[CLASS:WindowsForms10.STATIC.app.0.378734a; INSTANCE:1]","termsrv.dll is patched","2756042")
    Sleep(300)
    If $var = "termsrv.dll is patched" Then
    WinClose("[CLASS:WindowsForms10.Window.8.app.0.378734a]")
    ExitLoop
    EndIf
    WEnd

    Einmal editiert, zuletzt von Marabunta (9. August 2014 um 15:36)

  • While 1
    $var = ControlGetText("[CLASS:WindowsForms10.STATIC.app.0.378734a; INSTANCE:1]","termsrv.dll is patched","2756042")
    Sleep(300)
    MsgBox(0, "VARWERT", "Der Wert für $var" & @CRLF & $var)
    If $var = "termsrv.dll is patched" Then
    WinClose("[CLASS:WindowsForms10.Window.8.app.0.378734a]")
    ExitLoop
    EndIf
    WEnd

    angenommen der MsgBox-Befehl ist korrekt, dann ist $var immer NULL weil kein Wert in der MsgBox steht.
    Wie kann das sein?

  • Mal davon ab, dass es mit Sicherheit direktere und einfachere Wege gibt um "termsrv.dll" so zu modifizieren wie gewünscht (google soll da sehr gesprächig sein) wundere ich mich doch ein wenig, warum dieses Thema noch nicht geschlossen wurde. Bei jeder noch so unwichtigen Webseite verweist man sofort auf die AGB und interpretiert was weiß ich für Dinge in eher uneindeutige Formulierungen bezüglich Automatisierung. Wie dem auch sei... hier unterstützt man jedenfalls die Umgehung von Lizenzbedingungen bzw. die Aktivierung von Features welche sicher nicht ganz unabsichtlich den Server Versionen des Betriebssystems vorbehalten sind.