Alternativen zu ControlClick

  • Hi,

    ich versuche grade eine "zauber lösung" zum senden eines mausklicks an ein bestimmtes fenster zu finden ^^.
    Der Hintergrund ist der, das ich versuche einen Mausklick in einem Fenster zu machen ohne das es dadurch in den Vordergrund kommt.
    Ich ermittele also das fenster was sich unter dem mauszeiger befindet und bekomme letztendlich das handle raus.
    Nun habe ich mit ControlClick versucht den Mausklick an das fenster zu sende. Das funzt auch, allerdings nur dann wenn das Fenster keine Controls enthält. :(
    Also habe ich es damit versucht:
    http://www.autoitscript.com/forum/index.php?showtopic=7112
    Leider passiert dabei garnichts :( (villeicht liegt das daran das ich Win7 x64 habe)

    Nun suche ich nach einer anderen Möglichkeit um einen Mausklick an ein Fenster zu senden (von dem ich die Controls nicht kenne).
    Ich hoffe jemand kennt noch eine

    2 Mal editiert, zuletzt von IchEben (24. April 2010 um 01:54)

  • [autoit]

    ControlClick($Zhwnd,"","","left",1,$x2,$y2)

    [/autoit]

    $Zhwnd ist das handle des fensters. Ich bin mir sicher das es stimmt habe es getestet.
    $x2 und $y2 sind variabelen in denen die x und y position steht. Ich habe natürlich die mauskoordinaten mit screentoclient umgerechnet um die fenster koordinaten zu erhalten.

    Der script funzt auch einwandfrei in z.B. einem game, da ich da ja keine controls drinn habe.
    Aber versuche ich es z.B. mit dem Taschenrechner von windows, passiert nix mehr. :(

    Einmal editiert, zuletzt von IchEben (23. April 2010 um 21:49)

  • Ohh Ohh....
    ein game + controlclick = bot?
    http://www.autoit.de/index.php?page=Forumrules

    Wenn es keiner ist habe ich nicht's gesagt!

    :huh: Wird kein bot, sonst würde ich es ja wohl nicht mit nem taschenrechner versuchen. Ich hab es nur mit dem game probiert, weil ich wuste das dort controlclick gehen müste. ;)
    Allerdings hatt dieses Projekt wirklich nichts mit einem Game zu tuhen. Ich versuche lediglich Windows multitouch fähig zu machen. 8)
    Zum Beweis meine Website: http://delphitouch.jimdo.com/

  • WOW

    keine schlechte arbeit aber kann dir leider nich weiterhelfen bei deinem problem!
    achja!
    benutze ma lieber1. spoiler und 2. autoitquellcode =)

    Beispiel:

    Spoiler anzeigen
    [autoit]

    MsgBox(0,"lalala","dies ist ein text!!!")
    Sleep(200)
    Exit

    [/autoit]

    2 Mal editiert, zuletzt von Alizame (23. April 2010 um 21:33)

  • Habe auch mal mit ControlClick versucht den taschenrechner zu steuern...
    geht aber nicht!
    tja da haben wir wohl ein kleines problem!aber setze mich mal dran!
    schließlich ist dieses touch kram ja mega geil! =)

  • Hi,
    das wär auch richtig geil wenn das ginge, denn dann könnte man zwei Anwendungen gleichzeitig bediehnen. ^^
    Ich hab mir noch was überlegt: Gibt es nicht eine Funktion mit der man alle Controls die in einem fenster enthalten sind auslesen kann? Oder zu mindest herausfindin kann welches Control sich unter der Maus befindet? Denn beim AutoIt Window Info geht das ja auch...
    Hab bis jetzt noch nix gefunden.

    PS: Den Spoiler hab ich geändert.

  • Zitat

    Habe auch mal mit ControlClick versucht den taschenrechner zu steuern...
    geht aber nicht!


    Sicher? ;)

    Spoiler anzeigen
    [autoit]

    Run("calc")
    ControlClick("Rechner", "", "[CLASS:Button; INSTANCE:7]")
    Sleep(500)
    ControlClick("Rechner", "", "[CLASS:Button; INSTANCE:11]")
    Sleep(500)
    ControlClick("Rechner", "", "[CLASS:Button; INSTANCE:15]")
    Sleep(500)
    ControlClick("Rechner", "", "[CLASS:Button; INSTANCE:6]")
    Sleep(500)
    ControlClick("Rechner", "", "[CLASS:Button; INSTANCE:10]")
    Sleep(500)
    ControlClick("Rechner", "", "[CLASS:Button; INSTANCE:20]")
    Sleep(500)
    ControlClick("Rechner", "", "[CLASS:Button; INSTANCE:7]")
    Sleep(500)
    ControlClick("Rechner", "", "[CLASS:Button; INSTANCE:11]")
    Sleep(500)
    ControlClick("Rechner", "", "[CLASS:Button; INSTANCE:15]")
    Sleep(500)
    ControlClick("Rechner", "", "[CLASS:Button; INSTANCE:6]")
    Sleep(500)
    ControlClick("Rechner", "", "[CLASS:Button; INSTANCE:10]")
    Sleep(1000)
    ControlClick("Rechner", "", "[CLASS:Button; INSTANCE:21]")

    [/autoit]
  • Super! Wenn du mir jetzt noch verrätst wie ich auf die Controls komme ohne sie vorher zu kennen, also ohne Find Window Info, dann ist das Problem gelöst!
    Denn ich will ja nicht nur den Tschenrechner ansteuern können, sondern auch alle anderen Fenster wie z.B. den Explorer.

  • du brauchst das AutoIt v3 Window Info tool
    gehst auf einen button mit dem fadenkreuz und guckst bei Control
    dort steht

    Code
    [CLASS:Button; INSTANCE:8]

    dann hast du es (bespiel button 0 )

    Edit\\ ohne tool geht nicht (nur raten wie name22 gesagt hat)

    MfG
    Alizame

  • Hi,
    alsoo ich muss es aber ohne window info machan, denn sonst kann ich ja nur den taschenrechner im hintergrund ansteuern.
    Window info ist ja auch ein Programm, ich weiß zwar nicht ob es mit autoit geschrieben ist, aber wenn ja, muss das ja auch für mich möglich sein ein Control zu finden.

    Den Touchtabel habe ich selbst gebaut. Anleitungen findest du z.B. auf der nuigroupe Website. (ist auf meiner Website verlinkt) Die Wiki dort ist sehr hilfreich. :)
    Allerdings must du mit über 100€ rechnen (ohne Beamer).
    Man braucht: Einen Spiegel, eine bis zwei Scheiben, einen Beamer, eine Webcam + IR filter und IR LED`s.
    Als Altanative: Nen wiimote und IR LED`s sind allerdings schon relativ günstig zu erwerben (Johnny Lee).

  • wieso?wenn es im vordergrund ist geht es doch auch?
    oder habe ich das jetzt falsch verstanden?

    und das mit dem touchtable schön wieder aus den kopf schlagen so pleite wie ich bin

  • Klar geht das auch wenn das fenster im vordergrund ist, wenn man aber auf zwei verschiedene Fenster klickt (gleichzeitig) dann würden sie immer abwechseld im vordergrund sein und sich wenn sie ungünstig plaziert sind überlappen. :(
    Genau das ist ja das Windows Problem das ich versuche zu umgehen, indem ich die mausklicks direckt an die Fenster sende.

  • Du kannst dir das aktive Fenster merken und sofort nach dem Klick wiederherstellen...

    Johannes


    Hmmm,
    das wäre villeicht eine Möglichkeit. Aber vermutlich änder sich dadurch die Reihenfole der Fenster.
    Aber das versuche ich mal. :)

  • Also ich hab das mal getestet, aber das geht nicht richtig, da sich die Reihenfolge der Fenster ändert und es extrem flackert.
    Na ja, ich denke das wird wohl nicht hinhauen was ich da vorhabe. Habe nun sämtliche winapi Funktionen durchprobiert, hatt aber nix gebracht.
    Windows ist einfach nicht dafür ausgelegt. Muss wohl auf die nächste Windows Version warten. :sleeping:

    Danke für all eure Antworten :)