Button in externen Programm betätigen

  • VB.NET

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von FantaZimt.

    Button in externen Programm betätigen

    Hey Leute,
    Ich versuche im Moment einen Button in einem externen Programm (Java) zu betätigen.

    Ich habe jetzt diesen Thread hier gefunden: Hier

    Allerdings funktioniert das ganze bei Java wohl nicht, da ich mit Spy++ keinen Klassennamen erhalte.
    Jetzt versuche ich den Button mit Sendkeys zu markieren und anschließend mit der Leertaste zu drücken. Allerdings funktioniert das nicht ganz. Die Animation zum drücken des Buttons kommt zwar - allerdings wird der Code damit nicht ausgelöst.

    Gibt es eventuell noch andere Möglichkeiten den Button irgendwie zu betätigen, so das auch der Code ausgeführt wird?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    1. Welchen Sendkeys-Befehl verwendest Du gerade konkret?
    2. Ist immer sichergestellt, dass das Javafenster im Vordergrund ist?
    3. Ist immer sichergestellt, dass der Button den Eingabefokus hat?
    4. Reagiert das Javafenster, wenn Du auf der Tastatur Space drückst? Nicht, dass es nur mit Enter geht.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    @RodFromGermany so wie ich das sehe benutzt du doch auch Spy++? Das funktioniert bei Java leider nicht :/
    @VaporiZed

    1. Welchen Sendkeys-Befehl verwendest Du gerade konkret?
    SendKeys.Send("{TAB}") zum auswählen und SendKeys.Send("{Space}") zum betätigen. (Enter habe ich auch probiert)

    2. Ist immer sichergestellt, dass das Javafenster im Vordergrund ist?
    Ja, der Button wird ja auch ausgewählt.

    3. Ist immer sichergestellt, dass der Button den Eingabefokus hat?
    Ja, der Button macht ja auch die Animation das er gedrückt wurde.

    4. Reagiert das Javafenster, wenn Du auf der Tastatur Space drückst? Nicht, dass es nur mit Enter geht.
    Animation kommt zwar, aber auch das funktioniert nicht.
    @FantaZimt Hab ich nicht probiert.
    Für SendKeys muss das empfangende Fenster den Fokus haben.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    FantaZimt schrieb:

    1. Welchen Sendkeys-Befehl verwendest Du gerade konkret?
    SendKeys.Send("{TAB}") zum auswählen und SendKeys.Send("{Space}") zum betätigen. (Enter habe ich auch probiert)
    {SPACE} wird bei mir nicht unterstützt. Probier mal SendKeys.SendWait(" ")

    FantaZimt schrieb:

    4. Reagiert das Javafenster, wenn Du auf der Tastatur Space drückst? Nicht, dass es nur mit Enter geht. Animation kommt zwar, aber auch das funktioniert nicht
    Heißt das jetzt, dass auch, wenn Du mit der Tastatur selber Space drückst, das nicht funktioniert?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Wenn es mit der Tastatur schon nicht funktioniert, wird es mit SendKeys erst recht nicht klappen. Was ist denn das für ein Button? Ist da überhaupt Code hinterlegt? Woher weißt Du, dass da überhaupt was passieren kann?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Das Programm kopiert mir die Session ID in die Zwischenablage, die ich brauche um mich in meinem eigenen Brower anzumelden.

    Im Moment habe ich es so, dass ich den Button klicke und mein Programm überprüft ob eine SessionID in meiner Zwischenablage ist, wenn das der Fall ist -> Einloggen. Allerdings hätte ich es gerne so, dass wenn ich mein Programm starte automatisch der Button gedrückt wird und mich automatisch einloggt.
    Wenn die Tastatur unzuverlässig ist, dann simuliere doch Mausbewegung und -Klick. Stichwort P/Invoke Mouseevent:

    VB.NET-Quellcode

    1. <DllImport("user32.dll", EntryPoint:="mouse_event")> Private Shared Sub MouseEvent(dwFlags As UInteger, dx As UInteger, dy As UInteger, dwData As UInteger, dwExtraInfo As Integer) : End Sub
    2. Private Const MOUSEEVENTF_ABSOLUTE = &H8000
    3. Private Const MOUSEEVENTF_LEFTDOWN = &H2
    4. Private Const MOUSEEVENTF_LEFTUP = &H4
    5. Private Const MOUSEEVENTF_MOVE = &H1
    6. 'und dann später
    7. 'Mauszeiger hinbewegen
    8. MouseEvent(MOUSEEVENTF_ABSOLUTE + MOUSEEVENTF_MOVE, TargetX, TargetY, 0, 0) 'TargetX und TargetY = Buttonposition; selber ausrechnen
    9. 'linke Maustaste "drücken"
    10. MouseEvent(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
    11. MouseEvent(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)
    ggf. geht es auch einfacher mit irgendeinem Click-Invoke, aber ich wüsste nicht, wie.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.