Nach drücken von STRG(rechts) eine bestimmte Mausposition anklicken

  • Hallo zusammen!

    Nachdem ich einige Foren und auch die Helpfiles durchgesehen habe weiss ich leider nicht wieso mein Script nicht funktioniert :(

    Folgendes sollte es tun:
    Sobald bzw. jedes mal wenn die Taste "STRG rechts" gedrückt wird,
    soll die linke Maustaste an einer bestimmten Mausposition einmal geklickt werden.

    Schaut mal bitte, was habe ich falsch?

    [autoit]

    #include <Misc.au3>
    $dll = DllOpen("user32.dll")

    [/autoit][autoit][/autoit][autoit]

    If _IsPressed("A3", $dll) Then
    MouseClick("left", 450, 800)
    EndIf
    DllClose($dll)

    [/autoit]

    Vielen herzlichen und lieben Dank für die Hilfe!! :thumbup:

    Einmal editiert, zuletzt von eugen723674 (8. April 2009 um 12:40)

  • da du wie ich sehe anfänger bist n tipp

    1. lad dir die deutsche hilfe runter und nütze sie auch
    2.SUFU


    [autoit]


    #include <Misc.au3>

    [/autoit][autoit][/autoit][autoit]

    $dll = DllOpen("user32.dll")

    [/autoit][autoit][/autoit][autoit]

    While 1
    Sleep ( 250 )
    If _IsPressed("A3", $dll) Then
    MouseClick("left", 450, 800)
    ExitLoop
    EndIf
    WEnd
    DllClose($dll)

    [/autoit]

    so ist es richtig steht aber auch in der hilfe.

    musste nur 2 sachen aus der hilfe ändern.

  • Hallo bandido1

    Richtig, vor gerade mal 2 Std AutoIt runtergeladen, also blutiger Anfänger ;)

    Naja, habe ich doch!
    Von hier: http://www.autoit.de/dokumentation_…/_IsPressed.htm

    Hab nur die Schleife und das Sleep entfernt, weil ich den Sinn nicht verstanden habe ;(
    Denn solange das Script läuft (so dachte ich zumindest) würde es sowieso immer darauf warten bis STRG gedrückt wird und dann eben so lange warten bis wieder STRG gedrückt wird oder eben das Script beendet. Aber da lag ich wohl falsch ^^

    Danke dir vielmals !!! :thumbup:

  • slepp ist dafür da dass es nicht zu schnell geht . also er wartet 250 millisekunden . braucht mam aber nicht.

    zum helfen sind wir da kein problem bin noch n bisii on also wenn noch was ist meld dich.

  • Achso ... jetzt hab ich es verstanden ;)

    Bin dir auch echt dankbar für die Hilfe!!!
    Funktioniert - danke!

    Aber ...
    - das Script beendet sich nach einmaligen ausführen, was es natürlich nicht sollte da ich es so oft und lange brauche bis ich das Script eben selber manuell beende.
    - wenn ich STRG drück springt die Maus an die angegebene Stelle und klickt (was ja auch richtig ist), aber ist es möglich das er die maus NICHT zu der stelle bewegt sondern da bleibt wo sie ist? Wenn nein: ist es möglich das die maus dann wieder an die Stelle zurückspringt an dem STRG gedrückt wurde?

    Ich hoffe du verstehst was ich meine bandido :D

    Hintergrund - wieso ich das überhaupt brauche:

    Spoiler anzeigen

    Ich bin gerade am Videos bearbeiten und dazu muss ich viele hunderte sogenannter "Wegpunkte" setzen. Da aber das Videoprogramm für den Button "wegpunkt setzen" keinen Hotkey hat muss ich jedes mal mit der Maus quer über den 26 Zoller fahren muss, um dann immer diesen Button zu drücken und dann wieder quer über den Monitor zurück zum "Bereich" wo ich das Video bearbeite.
    Somit will ich das einsparen. Das heisst ich will mit der Maus einfach immer auf dem Bearbeitungsbereich sein und wenn ich einen Wegpunkt brauche klick ich eben einfach nur ne Taste und zack, wegpunkt gesetzt OHNE das mit der maus hunderte Kilometer rutschen muss ;)

    Sooo sieht die aktuelle Version mit den korrekten x/y Koordinaten der Maus und verkürzter Wartezeit aus:

    [autoit]

    #include <Misc.au3>

    [/autoit][autoit][/autoit][autoit]

    $dll = DllOpen("user32.dll")

    [/autoit][autoit][/autoit][autoit]

    While 1
    Sleep ( 10 )
    If _IsPressed("A3", $dll) Then
    MouseClick("left", 1595, 390)
    ExitLoop
    EndIf
    WEnd
    DllClose($dll)

    [/autoit]

    Einmal editiert, zuletzt von eugen723674 (8. April 2009 um 10:38)

  • Bitteschön!

    [autoit]

    #include <Misc.au3>

    [/autoit][autoit][/autoit][autoit]

    $dll = DllOpen("user32.dll")

    [/autoit][autoit][/autoit][autoit]

    While 1
    Sleep ( 250 )
    If _IsPressed("A3", $dll) Then
    $pos = MouseGetPos()
    MouseClick("left", 1595, 390, 1, 0)
    MouseMove($pos[0], $pos[1], 0)
    EndIf
    WEnd
    DllClose($dll)

    [/autoit]

    Wahrscheinlich geht das so schnell, dass du das garnicht mitbekommst.. wenn du sehen willst wo er hinklickt, musst du bei MouseClick() den letzten parameter (speed) etwas höher setzen.

  • ok also in dem fall würde ich

    [autoit]

    controlclick

    [/autoit]

    vorschlagn.

    aber jetzt zu deienen fragen

    1.

    Spoiler anzeigen
    [autoit]

    #include <Misc.au3>

    [/autoit] [autoit][/autoit] [autoit]

    $dll = DllOpen("user32.dll")

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    If _IsPressed("A3", $dll) Then
    MouseClick("left", 450, 800)
    EndIf

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    WEnd

    [/autoit]


    dass exitloop und dllclose haben das skript beendet so gehts aber.

    2.

    Spoiler anzeigen
    [autoit]

    #include <Misc.au3>

    [/autoit] [autoit][/autoit] [autoit]

    $dll = DllOpen("user32.dll")

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    If _IsPressed("A3", $dll) Then
    $pos= MouseGetPos()
    MouseClick("left", 450, 800)
    MouseMove($pos[0],$pos[1])
    EndIf
    WEnd

    [/autoit]


    ich galube du meinst dass oder ???


    verdammt zu spät da war jemand schneller ;(

  • Hallo Fisch und bandido!

    Ihr seid beide gleich toll und hilfsbereit!
    Ist also egal wer zuerst war :D

    Es funktioniert alles genau so wie es soll - wow - prima, das ist eine enorme Arbeitserleichterung!

    DANKEEEEEEEEEEE VIELMALS!!!!!

    Optimal wäre jetzt natürlich noch, wenn das nur funktioniert wenn auch das entsprechende Programm das aktive Fenster ist, aber das ist nicht unbedingt nötig und würde wohl auch zu weit führen :whistling:

    Aber wenn euch gerade langweilig ist:
    AutoIt v3 Window Info sagt mir folgendes

    Spoiler anzeigen

    >>>> Window <<<<
    Title: MAGIX Video deluxe 2008 PLUS usw... usw... usw.MVD
    Class: Afx:400000:8:10005:0:5600df5
    Position: 0, 0
    Size: 1920, 1140
    Style: 0x150F8000
    ExStyle: 0x00000110
    Handle: 0x00150866

    >>>> Control <<<<
    Class: Static
    Instance: 94
    ClassnameNN: Static94
    Advanced (Class): [CLASS:Static; INSTANCE:94]
    ID: 8158
    Text:
    Position: 70, 0
    Size: 1761, 19
    ControlClick Coords: 912, 2
    Style: 0x50000000
    ExStyle: 0x00000000
    Handle: 0x00080D6C

    Keine Ahnung was ihr dafür braucht von diesen Infos ...
    Ich schätze mal eine Titelabfrage nach MAGIX* oder MAGIX Video* würde schon reichen oder?

  • Du kannst ja das programm beim Stat öffnen

    [autoit]


    #include <Misc.au3>

    [/autoit][autoit][/autoit][autoit]

    $dll = DllOpen("user32.dll")
    Run("Hier dein Programm Pfad")

    [/autoit][autoit][/autoit][autoit]

    While 1
    If _IsPressed("A3", $dll) Then
    $pos= MouseGetPos()
    MouseClick("left", 450, 800)
    MouseMove($pos[0],$pos[1])
    EndIf
    WEnd

    [/autoit]
  • Dürfte klappen..

    [autoit]

    #include <Misc.au3>

    [/autoit][autoit][/autoit][autoit]

    $dll = DllOpen("user32.dll")
    While 1
    Sleep(100)
    If WinActive("MAGIX Video") Then
    If _IsPressed("A3", $dll) Then
    $pos = MouseGetPos()
    MouseClick("left", 1595, 390, 1, 0)
    MouseMove($pos[0], $pos[1], 0)
    EndIf
    EndIf
    WEnd

    [/autoit]
  • Mit Strg im HotKeySEt geht es so viel ich weis nicht aber mit anderen Tasten ich habs mal mit F4 gemacht

    [autoit]

    #include <Misc.au3>

    [/autoit][autoit][/autoit][autoit]

    HotKeySet("{F4}","_funktion")

    [/autoit][autoit][/autoit][autoit]

    Func _funktion()
    $pos= MouseGetPos()
    MouseClick("left", 450, 800)
    MouseMove($pos[0],$pos[1])
    EndFunc

    [/autoit]
  • @peethebee & simon

    ähm danke ... aber das ist doch gar kein problem oder war gar nicht gefragt :P
    Es funktioniert ja alles so wie ich es brauche - also so wie bandido und fisch es mir gezeigt haben :)
    Also wieso soll ich das ganze jetzt mit einer Hotkey Funktion einsetzen?
    Bin ich zu doof oder verstehe ich den Sinn nicht? ;(

    Also das hier - genau das was ich wollte - perfekt:

    [autoit]

    #include <Misc.au3>

    [/autoit][autoit][/autoit][autoit]

    $dll = DllOpen("user32.dll")

    [/autoit][autoit][/autoit][autoit]

    While 1
    Sleep ( 10 )
    If _IsPressed("A3", $dll) Then
    $pos = MouseGetPos()
    MouseClick("left", 1595, 390, 1, 0)
    MouseMove($pos[0], $pos[1], 0)
    EndIf
    WEnd

    [/autoit]

    Es ging jetzt nur noch drumm das das script nur dann funktioniert wenn auch das richtige fenster/programm aktiv ist ;)


    @Fisch:

    danke, ich versuchs mal mit

    [autoit]

    If WinActive("MAGIX Video") Then

    [/autoit]


    ... mal sehen obs klappt, sag dir gleich bescheid ;)

  • FUNKTIONIERT ALLES!!! Prima, genau so wie ich es wollte - ihr seid toll!
    Danke an alle die geholfen haben - das war sehr nett und freundlich *top!*

    Für alle die die finale Lösung sehen wollen oder sowas auch mal brauchen können:

    [autoit]

    #include <Misc.au3>

    [/autoit][autoit][/autoit][autoit]

    $dll = DllOpen("user32.dll")

    [/autoit][autoit][/autoit][autoit]

    While 1
    Sleep ( 10 )
    If WinActive("MAGIX Video") Then
    If _IsPressed("A3", $dll) Then
    $pos = MouseGetPos()
    MouseClick("left", 1595, 390, 1, 0)
    MouseMove($pos[0], $pos[1], 0)
    EndIf
    EndIf
    WEnd

    [/autoit]

    DANKE NOCHMAL und macht weiter so! *knutscha* :love:

  • Hallo peethebee !

    Achso, das heisst wenn ich es schnell und oft hintereinander benutze könnte es Probleme geben?
    Selbst bei den 10 ms die ich angegeben habe? Könnte man ja rein theoretisch auch löschen oder?

    In der Praxis wird der minimalste Abstand zwischen 2x Taste drücken bei ca. 500-1000 ms liegen denke ich.
    Sollte ich dann lieber HotKeySet einsetzen? Was meinste als Profi und wie würde mein Script dann aussehen?
    Geht as überhaupt mit STRG(rechts) ?

    Du hättest lieber nix mehr gesagt, das haste jetzt davon :D :P ;)

  • [autoit]

    #include <Misc.au3>

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    HotKeySet("A3","_move")

    [/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit]

    Func _move()
    $pos= MouseGetPos()
    MouseClick("left", 450, 800)
    MouseMove($pos[0],$pos[1])
    endfunc

    [/autoit]

    so aber des wird sofort beemdet man kommt also um so ne schleife nicht rum.

  • danke bandido :love:

    Aber ich nutz erstmal das was ich jetzt von euch habe (das von mir zuletzt gepostete).
    Solange das funktioniert ... ansonsten muss ich das doch mit dem HotKey machen.
    Aber wie gesagt, ich hämmer ja nicht auf der STRG rum wie blöd ...
    vielleicht alle 0,5 bis 10 Sekunden mal - da sollte nix schief gehen ... oder? :)

    Ich nutze es ja die nächste stunde ausgiebig, kann euch dann ja berichten obs zu Problemen kam :)

  • Dann danke ich dir (und den anderen) nochmal und hau mal rein ... mal sehen obs im extremen Praxistest taug hat :D

    DANKE und ich melde mich, wenn es Probleme gibt - aber so Komplex ist es ja nicht, sollte klappen *freu*