Mouseclicks in nicht aktiven bzw minimieren Anwendungen...

  • also vorweg, für mich ist eine

    inaktive Anwendung eine die nicht aktiv Focus hat
    Minimiert eben klein in der Taskleiste versteckt

    Autoit bietet ja tolle Möglichkeiten mit Controllsends Tasten zu schicken an alle möglichen Anwendungen...

    wie schauts aber mit Mouseclicks, Pixelsearch und dem ganzen Kram aus ?

    Also was ich mir selber vorstellen kann...

    Inaktiv könnten einige Sachen funktionieren.
    Minimiert glaub ich wird aber spätestens der Ofen aus sein.

    Habe mit der unteren Funktion schon geschaft das er in einem nicht aktiven Paint einen Farbpunkt zeichnet ;) *freu*


    Die Funktion ist nicht von mir ;) , bin viel zu dumm dafür. Vielleicht kann mir wer ja ein paar Tipps. In der deutschen Autoit Hilfe und Anleitung habe ich jedenfalls nicht dazu gefunden...

    danke cya

    [autoit]

    ;===============================================================================s
    ;
    ; Function Name: _MouseClickPlus()
    ; Version added: 0.1
    ; Description: Sends a click to window, not entirely accurate, but works
    ; minimized.
    ; Parameter(s): $Window = Title of the window to send click to
    ; $Button = "left" or "right" mouse button
    ; $X = X coordinate
    ; $Y = Y coordinate
    ; $Clicks = Number of clicks to send
    ; Remarks: You MUST be in "MouseCoordMode" 0 to use this without bugs.
    ; Author(s): Insolence <[email='insolence_9@yahoo.com'][/email]>
    ;
    ;===============================================================================
    Func _MouseClickPlus($Window, $Button = "left", $X = "", $Y = "", $Clicks = 1)
    Local $MK_LBUTTON = 0x0001
    Local $WM_LBUTTONDOWN = 0x0201
    Local $WM_LBUTTONUP = 0x0202

    Local $MK_RBUTTON = 0x0002
    Local $WM_RBUTTONDOWN = 0x0204
    Local $WM_RBUTTONUP = 0x0205

    Local $WM_MOUSEMOVE = 0x0200

    Local $i = 0

    Select
    Case $Button = "left"
    $Button = $MK_LBUTTON
    $ButtonDown = $WM_LBUTTONDOWN
    $ButtonUp = $WM_LBUTTONUP
    Case $Button = "right"
    $Button = $MK_RBUTTON
    $ButtonDown = $WM_RBUTTONDOWN
    $ButtonUp = $WM_RBUTTONUP
    EndSelect

    If $X = "" OR $Y = "" Then
    $MouseCoord = MouseGetPos()
    $X = $MouseCoord[0]
    $Y = $MouseCoord[1]
    EndIf

    For $i = 1 to $Clicks
    DllCall("user32.dll", "int", "SendMessage", _
    "hwnd", WinGetHandle( $Window ), _
    "int", $WM_MOUSEMOVE, _
    "int", 0, _
    "long", _MakeLong($X, $Y))

    DllCall("user32.dll", "int", "SendMessage", _
    "hwnd", WinGetHandle( $Window ), _
    "int", $ButtonDown, _
    "int", $Button, _
    "long", _MakeLong($X, $Y))

    DllCall("user32.dll", "int", "SendMessage", _
    "hwnd", WinGetHandle( $Window ), _
    "int", $ButtonUp, _
    "int", $Button, _
    "long", _MakeLong($X, $Y))
    Next
    EndFunc




    Func _MakeLong($LoWord,$HiWord)
    Return BitOR($HiWord * 0x10000, BitAND($LoWord, 0xFFFF))
    EndFunc

    [/autoit]
  • Minimiert gehts auch ;)
    z.b.:

    [autoit]


    Opt ("WinTitleMatchMode", 4)
    ControlClick("classname=Notepad", "", "MDIClient1") ; Notepad Beispiel
    ;oder
    $handle = WinGetHandle("classname=Notepad")
    PixelGetColor( 10 , 100, $handle )

    [/autoit]

    Habs jetzt nicht getestet, sollte aber so klappen :)

  • Hallo,
    genausowenig, wie man in nicht "existenten"(sichtbaren) Fenstern per Pixelsearch suchen kann, kann man dort auch "hinklicken". Eine Möglichkeit besteht darin, an ein Programm (ob minimiert/maximiert, versteckt usw. ist dabei egal) eine NACHRICHT zu schicken.
    Wenn aber ein Programm keine Controls benutzt, an die man eine Nachricht senden kann, dann ist es auch nicht möglich die Nachricht auszuwerten. Daher funktioniert bei einigen Programmen _MouseClickPlus() und bei anderen eben nicht.

    Zitat

    Habe mit der unteren Funktion schon geschaft das er in einem nicht aktiven Paint einen Farbpunkt zeichnet

    Ja, nicht aktiv heisst ja nicht, dass Paint keine Nachrichten empfangen kann. Nur welcher Programmierer würde in einem Programm, dass nun mal primär zum Zeichnen gedacht ist, eine Funktion vorsehen die im minimierten Zustand (wenn das Programm aus Sicht des Programmierers ohne Nutzwert ist) erlaubt auf die "Zeichenfläche" zu malen obwohl diese überhaupt nicht sichtbar ist? Wer macht so etwas und warum?
    Einem Control (z.B. ein Button) ist das völlig egal, das liegt als Nummer in irgendeiner Liste gaaanz tief unten im Windows vergraben und ist mit der Nachrichtenkette verknüpft. Völlig egal ob das Fenster sichtbar ist oder nicht, ob mit der Maus, der Tastatur oder einem Send()-Befehl die Nachricht generiert wird, die Liste wird abgeklappert, die Nachricht wird vom Control registriert und die damit verknüpfte Funktion aufgerufen....
    Auf der einen Seite beschwert sich die Leute, dass Windows so lahmars****ig ist, aber auf der anderen Seite wollen sie daß Funktionen in Programme eingebaut (und zigmal in der Sekunde abgefragt) werden, die von der Mehrzahl der User NIE abgefragt werden...

    ciao
    Andy