Denkfehler? Wieder mal.

  • Da wir grad schon das Thema mit Geschwindigkeit im anderen Thread hatten, wollte ich
    mal gucken ob ich meine MouseClick Func umschreiben kann da sie immo Dll's benutzt
    die ich ungern teile :P Also hab ich mir mal die Windows Dll's angeguckt und was
    gebastelt, nur steckt irgendwo noch der Wurm drin.

    Spoiler anzeigen
    [autoit]

    #include <Timers.au3>
    Opt("MouseClickDelay", 0)
    Opt("MouseClickDownDelay", 0)

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

    Sleep(5000)

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

    ;HyperMouse
    $Cords = MouseGetPos()
    $Timer = _Timer_Init()
    _HyperMouse(WinGetTitle("[active]"), "left", $Cords[0], $Cords[1], 100)
    $Res = _Timer_Diff($Timer)
    ConsoleWrite("Das brauchte jetzt: " & $Res / 1000 & " Sekunden" & @CRLF)

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

    ;Funktion
    Func _HyperMouse($W, $B, $XP, $YP, $HP_C)
    $User32 = DllOpen("user32.dll")
    Switch $B
    Case "left"
    For $ic = 0 To $HP_C
    DllCall($User32, "int", "SendMessage", "hwnd", WinGetHandle($W), "int", 0x0200, "int", 0, "long", _MakeLong($XP, $YP))
    DllCall($User32, "int", "SendMessage", "hwnd", WinGetHandle($W), "int", 0x0201, "int", 0x0001, "long", _MakeLong($XP, $YP))
    DllCall($User32, "int", "SendMessage", "hwnd", WinGetHandle($W), "int", 0x0202, "int", 0x0001, "long", _MakeLong($XP, $YP))
    Next
    Case "right"
    For $ic = 0 To $HP_C
    DllCall($User32, "int", "SendMessage", "hwnd", WinGetHandle($W), "int", 0x0200, "int", 0, "long", _MakeLong($XP, $YP))
    DllCall($User32, "int", "SendMessage", "hwnd", WinGetHandle($W), "int", 0x0204, "int", 0x0002, "long", _MakeLong($XP, $YP))
    DllCall($User32, "int", "SendMessage", "hwnd", WinGetHandle($W), "int", 0x0205, "int", 0x0002, "long", _MakeLong($XP, $YP))
    Next
    EndSwitch
    DllClose($User32)
    EndFunc ;==>_HyperMouse

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

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

    [/autoit]


    Wird denke ich nur ein Denkfehler sein.
    Nur fällt mir nicht auf wo er liegt :/

  • Hab mal meine MouseClick Funktion mit PostMEssage abgespeckt und nur den Click Aspekt genommen, raus kommt das:

    [autoit]

    Func _MouseClick($hWnd, $Button, $xPos, $yPos, $Count)
    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 $User32 = DllOpen("user32.dll")
    Switch $Button
    Case "left"
    $Btn = $MK_LBUTTON
    $BtnDown = $WM_LBUTTONDOWN
    $BtnUp = $WM_LBUTTONUP
    Case "right"
    $Btn = $MK_RBUTTON
    $BtnDown = $WM_RBUTTONDOWN
    $BtnUp = $WM_RBUTTONUP
    EndSwitch
    $Pos = __MakeLong($xPos, $yPos)
    DllCall($User32, "int", "PostMessage", "hwnd", $hWnd, "int", $WM_MOUSEMOVE, "int", 0, "long", $Pos)
    For $i = 1 To $Count
    DllCall($User32, "int", "PostMessage", "hwnd", $hWnd, "int", $BtnDown, "int", $Btn, "long", $Pos)
    DllCall($User32, "int", "PostMessage", "hwnd", $hWnd, "int", $BtnUp, "int", 0, "long", $Pos)
    Next
    DllClose($User32)
    Return True
    EndFunc

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

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

    [/autoit]

    Bitte.