Mausklick simulieren



  • Servus,

    ich versuche schon seit längerem mit einem Problem klar zu kommen. Ich würde gerne einer Application einen Mausklick vorzugaugeln, ohne das sich der Mauszeiger bewegt. Also gingen meine ersten Versuche mit mouse_event los und zum Schluß blieb ich auf den WM_LBUTTONDOWN / UP etc. Nachrichten hängen. Leider habe ich das Problem, dass bei dem Nachrichten senden der Mauszeiger auch an der entsprechenden Position stehen muss, um ein Event in der Application auszulösen.

    Ich bin langsam nach langem hin und her am Ende meiner Ideen und am Ende von Google angelangt. Hat vielleicht irgendjemand einen Ansatz wie man einen Mausklick innerhalb eines Fensters simulieren kann, ohne die Cursorpostion der Maus zu verändern?

    Vielleicht kann mir jemand weiterhelfen.

    *thx*
    Hellsgore



  • Und aktuelle Position merken, auf neue setzen, klicken, auf alte setzen...
    geht nicht? Flimmert zu dolle?

    Wenn du auf z.B. einen Knopf klicken musst, dann kannst du, wenn der einen unterstrichenen Buchstaben hat, auch Alt-Taste und den Buchstaben simulieren, dann wird der auch "gedrückt".
    Bei einigen anderen Dialogelementen klappt das auch.

    🙂



  • Servus,

    erstmal schankedön für deine Antwort aber:

    Und aktuelle Position merken, auf neue setzen, klicken, auf alte setzen...
    geht nicht? Flimmert zu dolle?

    Diese Idee ist nicht schlecht aber leider auch etwas unschön. z.B. Ich arbeite gerade mit Word und lasse dann in einem anderen Fenster irgendwo hinklicken, dann verliert ja das derzeitige Word den Focus und das andere Programm wird in den Vordergrund geholt. Natürlich wäre es jetzt möglich nach dem klicken Ratz-Fatz das Word Fenster wieder in den Vordergrund zu holen, doch dann hätte ich ein ständiges Wechseln.

    Wenn du auf z.B. einen Knopf klicken musst, dann kannst du, wenn der einen unterstrichenen Buchstaben hat, auch Alt-Taste und den Buchstaben simulieren, dann wird der auch "gedrückt".
    Bei einigen anderen Dialogelementen klappt das auch.

    Leider klicke ich nicht auf einen Button etc. Die Maus wird hier zu benötigt.

    Achherje, ich hätte ja nicht gedacht, dass das so ein Schmarn ist.

    Wenn jemand noch ein Idee hat, immer her damit.........

    *thx*
    Hellsgore



  • Du kannst Dich mit SystemHook in das System einklinken und Messages abfangen, somit wird es auch eine Möglichkeit geben, solche Messages zu senden.

    Sende einfach einen Linksklich mit Position des Buttons, danach dann wieder die Position des Zeigers auf alte Position. Das dürfte so schnell gehen, das Du es garnicht bemerkst.

    Schaue Dir mal folgendes an im MSDN. CallNextHookEx

    Gruß



  • Servus,

    @gast
    danke für deine Idee, aber dafür brauche ich keine Hooks zu verwenden und vorallem was soll ich denn mit einem Hook versehen? Mich juckt es doch wenig was für eine Nachricht bei dem Fenster ankommt und genausowenig möchte ich diese manipulieren. Klar kann ich die Postion des Cursors zuerst setzen und dann wieder auf die alte Postion zurück. Doch nun stell dir mal vor, ich bewege in dem Moment, wenn eine MouseClick Message geschickt wird, die Maus. Da kann die Nachricht so schnell versendet werden wie sie will, der Zeiger würde trotzdem verziehen und dann an die falsche Position klicken. Aus diesem Grund versuche ich halt einen Klick mit der Maus ohne eine Bewegung zu simulieren.

    Vielleicht gibs ja noch Ideen???

    *thx*
    Hellsgore



  • Dann hole Dir ein Handle auf den View (geht auch auf Fremde), somit ein Handle auf das Steuer-Element und löse das OnClick, OnChange oder ähnliches aus.



  • und wenn du in dieser zeit die eingabe von maus deaktivierst? also, dass du für die zeit, in der dein mausklick vorbereitet und gesendet wirst die eingabe über maus oder tastatur deaktivierst?

    ich weiss zwar nicht wie und ob das zu realisieren wäre, stell es mir aber leichter vor als den mausklick ohne mausbewegung zu simulieren

    mfg, TFTS



  • Servus,

    wie gesagt, das Ding in dem fremden Fenster ist kein gewöhnliches Control. Die OnClick Methode löse ich ja mit einem versenden einer Nachricht aus und damit drehe ich mich wieder im Kreis, da ich für ein schönes WM_LBUTTONDOWN / UP auch noch den Cursor der Maus verschieben muss. Leider ist es mit einem Senden von WM_LBUTTONDOWN / UP + Koordinaten nicht getan.

    Bin gerne für weitere Ideen offen...

    *thx*
    Hellsgore

    EDIT:

    @TFTS
    Das ist wäre noch eine Idee. Doch würden dann die Nachrichten von Maus / Tastatur etc. vom Fenster nicht weiterverarbeitet werden?

    EDIT2: Verwende niemals keine doppelte Verneinung....


Anmelden zum Antworten