Mausclicks senden

  • Einen normalen Mausclick sende ich ja mit Mouseclick(...)
    aber kann ich auch einen Mausclick an ein Fenster senden,d ass nicht im Vordergrund ist? Der erkennt das ja über messages...also könnte man doch die message senden oder nicht?
    wenn ja, wie geht das (bitte ein beispiel)

    2. Frage bezieht sich darauf...ich möchte, dass der Mausclicks macht, aber nicht das markierte Feld wechselt
    Bsp: in einem chat ist der cursor im Eingabefeld und wärend ich schreibe soll der in diesem fenster einen button anclicken, ohne das der cursor aus dem Eingabefeld springt

    wie geht das?

  • Hi

    das alles sollte über controlclick funtzen! einfach ma in die hilfe geschaut autoitwindowinfo starten, window abfragen und einsetzten!

    mfg DJBasslord

  • achne is ne java...is von nem proggi auf meim rechner...ich will das testen...
    hab nur ne control id und ne classnamenn

    gibts ne controlcliclpos oder so?

  • ok also:
    ein programm mit ner grafischen oberfläche...
    hab da vermutlich ein canvas oder so und davon die controlID
    jetzt möchte ich in diesem control ein mausclick an ne bestimmte posi setzen...

    wie mach ich das?

  • hast du mich falsch verstanden, oder hab ich mich unklar ausgedrückt...
    also: ein control (möglicherweise canvas) hat ein paar gezeichnete buttons...
    auf einen davon will ich alle paar sekunden klicken
    aber der soll den cursor nicht aus dem aktuellem editfeld bzw fenster nehmen...
    also der soll auch in das canvas an der stelle klicken, wenn ein andres fenster aktiv ist und bleibt


    hab das gefunden: http://powerforen.de/forum/showthread.php?t=34223#

    kanns aber i-wie ne nach autoit umsetzen...jmd ein bsp plz?

    mein Ansatz:

    [autoit]

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

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

    Func _ExtMouseclick($window,$x,$y)
    Local $hwnd=WinGetHandle($window)
    if(@error) Then
    MsgBox(0,"1","22")
    Return False
    EndIf
    _SendMessage($hwnd,0x0201,0,_MakeLong($x,$y)) ;;WM_LBUUTONDOWN
    _SendMessage($hwnd,0x0202,0,_MakeLong($x,$y)) ;;WM_LBUTTONUP
    Return True
    EndFunc

    [/autoit]

    aber der macht nix =(

    2 Mal editiert, zuletzt von Flamefire (11. März 2007 um 20:21)

  • kann das jemand mal bitte testen?
    hab noch einen ausm englischem forum:

    Spoiler anzeigen
    [autoit]

    Opt("MouseClickDelay", 1)
    Opt("MouseCoordMode", 0)
    Func _MouseClickPlus($Window, $Button = "left", $X = "", $Y = "", $Clicks = 2)
    Local $MK_LBUTTON = 0x0001
    Local $WM_LBUTTONDOWN = 0x0201
    Local $WM_LBUTTONUP = 0x0202

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

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

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

    Local $WM_MOUSEMOVE = 0x0200

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

    Local $i = 0

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

    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

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

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

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

    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

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

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

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

    $j = 0
    While $j <= 10
    If WinExists("Windows Task Manager") Then
    Exit
    EndIf
    _MouseClickPlus( "SwgClient", "left" )
    _MouseClickPlus( "SwgClient", "left", 430, 260 )
    _MouseClickPlus( "SwgClient", "left", 490, 260 )
    _MouseClickPlus( "SwgClient", "left", 360, 325 )
    _MouseClickPlus( "SwgClient", "left", 425, 325 )
    WEnd

    [/autoit]

    Bei mir gehts aber net...was mach ich falsch?

    Einmal editiert, zuletzt von Flamefire (12. März 2007 um 11:36)

  • Spoiler anzeigen
    [autoit]

    Func ClickInControl( $szLR, $szTitle, $szText, $szControl, $nX, $nY )
    If $szLR <> "left" And $szLR <> "right" Then Return 0
    $hWnd = ControlGetHandle($szTitle, $szText, $szControl )
    If @error Then Return 0
    $hWndDad = WinGetHandle( $szTitle, $szText )
    If @error Then Return 0
    $tmp=ControlGetPos($szTitle, $szText, $szControl )
    $me = DLLCall( "kernel32.dll", "long", "GetCurrentThreadId" )
    $you = DLLCall( "user32.dll", "long", "GetWindowThreadProcessId", "hwnd", $hWndDad, "long_ptr", 0)
    $coord = _MakeLong( $nX-$tmp[0], $nY -$tmp[1])
    If $szLR = "left" Then
    $msg1 = 0x0201;WM_LBUTTONDOWN
    $msg2 = 0x0202;WM_LBUTTONUP
    $i = 0x0001;MK_LBUTTON
    Else
    $msg1 = 0x0204;WM_RBUTTONDOWN
    $msg2 = 0x0205;WM_RBUTTONUP
    $i = 0x0002;MK_RBUTTON
    EndIf
    $ret = DLLCall("user32.dll","int","AttachThreadInput","long",$me[0],"long",$you[0],"int",1)
    If $ret[0] = 0 Then Return 0
    $ret = DLLCall("user32.dll","long","PostMessage","hwnd",$hWnd,"int",$msg1,"int",$i,"int",$coord)
    If $ret[0] = 0 Then Return 0
    Sleep(200)
    $ret = DLLCall("user32.dll","long","PostMessage","hwnd",$hWnd,"int",$msg2,"int",0,"int",$coord)
    If $ret[0] = 0 Then Return 0
    DLLCall("user32.dll","int","AttachThreadInput","long",$me[0],"long",$you[0],"int",0)
    If $ret[0] = 0 Then Return 0
    Return 1
    EndFunc

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

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

    [/autoit]

    damit gehts teilweise...aber ich möchte einen click in ein Fenster ausführen mit coordinaten relativ zum Fenster...

    wie kriege ich das hin? *verzweifel*

  • *PUSH*

    ähm...1. teil hat i-wie geklappt...mach das zwar ziemlich kompliziert aber egel (benutz die clickincontrol)

    2. Teil: es ist wirklich ein javaapllet...es hat nur einen classnamenn aber keine ID
    wenn ich jz controlclick nehme, dann clickt er dahin, wo die maus ist, und nicht an die stelle wo er hinklicken soll
    du hast gesagt bei JAva geht das anders? wie?