找回密码
 加入
搜索
查看: 4450|回复: 9

这个函数怎么用_MouseClick

[复制链接]
发表于 2008-7-17 22:45:34 | 显示全部楼层 |阅读模式
Func _MakeLong($LoWord, $HiWord)
        Return BitOR($HiWord * 0x10000, BitAND($LoWord, 0xFFFF))
EndFunc

Func _MouseClick($hWnd, $button, $x, $y, $times=1, $delay=250)
        If $hWnd = 0 Then
                SetError(-1)
                Return
        EndIf
       
        Local $ix
        Local $lParam = _MakeLong($x, $y)
        Local $user32 = DllOpen("user32.dll")
       
        $button = StringLower($button)
       
        If $button = "left" Then
                For $ix = 1 To $times
                        DllCall($user32, "int", "PostMessage", "hwnd", $hWnd, "int", 0x200, "int", 0, "long", $lParam)
                        DllCall($user32, "int", "PostMessage", "hwnd", $hWnd, "int", 0x201, "int", 1, "long", $lParam)
                        DllCall($user32, "int", "PostMessage", "hwnd", $hWnd, "int", 0x202, "int", 0, "long", $lParam)
                       
                        If $ix < $times Then Sleep($delay)
                Next
        ElseIf $button = "right" Then
                For $ix = 1 To $times
                        DllCall($user32, "int", "PostMessage", "hwnd", $hWnd, "int", 0x200, "int", 0, "long", $lParam)
                        DllCall($user32, "int", "PostMessage", "hwnd", $hWnd, "int", 0x204, "int", 2, "long", $lParam)
                        DllCall($user32, "int", "PostMessage", "hwnd", $hWnd, "int", 0x205, "int", 0, "long", $lParam)
                       
                        If $ix < $times Then Sleep($delay)
                Next
        Else
                SetError(-2)
                If $user32 <> -1 Then DllClose($user32)
                Return
        EndIf
        If $user32 <> -1 Then DllClose($user32)
EndFunc

帮忙看看 这个东西有没有问题呀,英文网上转来的,
为什么我怎么试都不成功?
发表于 2009-2-10 16:58:24 | 显示全部楼层
都那么久了都没人解决啊...
发表于 2009-2-10 18:52:59 | 显示全部楼层
函数调用?要达到什么效果?
发表于 2009-2-10 21:38:32 | 显示全部楼层
MouseClick的PostMessage版本把
_MouseClick(窗口句柄, 鼠标按钮, x, y,次数 , 延迟)
发表于 2009-11-5 21:59:22 | 显示全部楼层
遇到了同样的问题
_MouseClickPlus
--------------------------------------------------------------------------------

发送一个鼠标动作到指定的窗口,不是非常准确,但是可以对最小化的窗口生效.


#Include <ACN_Mouse.au3>
_MouseClickPlus($Window[, $Button = "left"[, $X = ""[, $Y = ""[, $Clicks = 1]]]])




参数

$Window 要发送点击的窗口标题
$Button 要点击的按钮:"left"(左键),"right"(右键)
$X X 坐标
$Y Y 坐标
$Clicks 点击次数



返回值




注意/说明

您必须在MouseCoordMode 0的模式下使用才会正常.




相关



经测试无效...请教下这个应该如何解决呢?
发表于 2009-11-5 23:52:09 | 显示全部楼层
你们这个函数哪里来的?帮助里没有啊。

楼上的,是不是忘了
Opt("MouseCoordMode", 0)   
发表于 2009-11-6 00:20:27 | 显示全部楼层
NND,经测试此函数没任何意义,因为它所需要的句柄不是窗体句柄,而是内部控件句柄,晕死,有ControlClick在,这个函数要来何用?
发表于 2009-11-6 00:33:24 | 显示全部楼层
经测试:
#include <SendMessage.au3>
_SendMessage(ControlGetHandle("未命名","","[CLASS:Afx:1000000:8; INSTANCE:1]"), 0x201, 1,_MakeLong(500, 500) )
Func _MakeLong($LoWord, $HiWord)
        Return BitOR($HiWord * 0x10000, BitAND($LoWord, 0xFFFF))
EndFunc
向画图板发送一个鼠标点击,同理只能向控件发送点击,需要获得控件句柄
它等同于
        Func _MakeLong($LoWord, $HiWord)
        Return BitOR($HiWord * 0x10000, BitAND($LoWord, 0xFFFF))
EndFunc

; I = PostMessage(hwnd, WM_LBUTTONDOWN, 0, (mX And &HFFFF) + (mY And &HFFFF) * &H10000)

Func _MouseClick($hWnd, $button, $x, $y, $times=1, $delay=250)
        If $hWnd = 0 Then
                SetError(-1)
                Return
        EndIf
        
        Local $ix
        Local $lParam = _MakeLong($x, $y)
        Local $user32 = DllOpen("user32.dll")
        
        $button = StringLower($button)
        
        If $button = "left" Then
                For $ix = 1 To $times
                        DllCall($user32, "int", "PostMessage", "hwnd", $hWnd, "int", 0x200, "int", 0, "long", $lParam)
                        DllCall($user32, "int", "PostMessage", "hwnd", $hWnd, "int", 0x201, "int", 1, "long", $lParam)
                        DllCall($user32, "int", "PostMessage", "hwnd", $hWnd, "int", 0x202, "int", 0, "long", $lParam)
                                        ; I = PostMessage(hwnd, WM_LBUTTONDOWN, 0, (mX And &HFFFF) + (mY And &HFFFF) * &H10000)               
                        If $ix < $times Then Sleep($delay)
                Next
        ElseIf $button = "right" Then
                For $ix = 1 To $times
                        DllCall($user32, "int", "PostMessage", "hwnd", $hWnd, "int", 0x200, "int", 0, "long", $lParam)
                        DllCall($user32, "int", "PostMessage", "hwnd", $hWnd, "int", 0x204, "int", 2, "long", $lParam)
                        DllCall($user32, "int", "PostMessage", "hwnd", $hWnd, "int", 0x205, "int", 0, "long", $lParam)
                        
                        If $ix < $times Then Sleep($delay)
                Next
        Else
                SetError(-2)
                If $user32 <> -1 Then DllClose($user32)
                Return
        EndIf
        If $user32 <> -1 Then DllClose($user32)
EndFunc

;'lp = Y * 65536 + X
_MouseClick(ControlGetHandle("未命名","","[CLASS:Afx:1000000:8; INSTANCE:1]"), "left", 500,500)
发表于 2009-11-6 08:51:23 | 显示全部楼层
你上面的那函数是把鼠标锁死的一般人很少用啊
发表于 2009-12-21 17:02:49 | 显示全部楼层
回复 1# tenliq


   
_mouseclick这个函数帮助文档里没有啊
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-11-16 09:16 , Processed in 0.446305 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表