找回密码
 加入
搜索
查看: 5513|回复: 13

与API有关的几个键盘鼠标函数的参数

[复制链接]
发表于 2009-9-26 00:11:22 | 显示全部楼层 |阅读模式
Func _WinAPI_Mouse_Event($iFlags, $iX = 0, $iY = 0, $iData = 0, $iExtraInfo = 0)
        DllCall("User32.dll", "none", "mouse_event", "int", $iFlags, "int", $iX, "int", $iY, "int", $iData, "int", $iExtraInfo)
EndFunc   
这个的参数怎么设置啊?为什么总是运行不了,同时出现/run /ErrorStdOut /。
_WinAPI_Mouse_Event(0x8000 or 0x2,831*(65535/@DesktopWidth),347*(65535/@DesktopHeight),0,0)
问题出在哪里啊?
还有

ACN_mouse.au3
里面的 _MouseClickPlus($Window, $Button = "left", $X = "", $Y = "", $Clicks = 1)在AU3里面应该怎么填写才合理啊?

希望看到的大大能画几分钟来帮帮忙,先谢谢了。
发表于 2009-9-26 01:59:49 | 显示全部楼层
哥们你用的什么系统,不会是nt/2000/xp以前的吧
 楼主| 发表于 2009-9-26 13:01:30 | 显示全部楼层
1# onestone01

执行环境:
+>        系统语言:        0804
+>        键盘布局:        E0200804
+>        操作系统:        WIN_XP/Service Pack 3
+>        系统构架:        X86
+>        CPU构架:        X64
+>        AU3版本:        0.0.0.0
这是执行环境,函数执行不了跟系统有关吗?
能把mouse_event在你电脑的参数设置发来参考一下吗?
发表于 2009-9-26 13:43:46 | 显示全部楼层
搜索下论坛 有封装好的 鼠标热键
发表于 2009-9-26 15:04:06 | 显示全部楼层
]#Include <WinAPI.au3>
#Include <Constants.au3>
MouseMove(0,0);将鼠标移动到左上角
Sleep(1000)
$test = _WinAPI_Mouse_Event($MOUSEEVENTF_MOVE,30,30);以现在坐标为基本移动x 30 y 30
Sleep(1000)
$test = _WinAPI_Mouse_Event($MOUSEEVENTF_MOVE,30,30)
Sleep(1000)
$test = _WinAPI_Mouse_Event($MOUSEEVENTF_MOVE,30,30)
Sleep(1000)
$test = _WinAPI_Mouse_Event($MOUSEEVENTF_MOVE,30,30)
Sleep(1000)
$test = _WinAPI_Mouse_Event($MOUSEEVENTF_MOVE,30,30)
先将鼠标移动到左上角,再在原来的基础上移动30.
发表于 2009-9-26 15:23:44 | 显示全部楼层
#Include <WinAPI.au3>
#Include <Constants.au3>
Run(@SystemDir & "\notepad.exe " & @SystemDir & "\eula.txt") ;用记事本打开eula.txt文件
WinWait("eula.txt - 记事本")
WinSetState("eula.txt - 记事本","",@SW_MAXIMIZE)
MouseMove(0,0) ;移动鼠标到0,0坐标
_WinAPI_Mouse_Event($MOUSEEVENTF_MOVE ,200,100) ;移动 x200 y 100
_WinAPI_Mouse_Event($MOUSEEVENTF_LEFTDOWN) ;按下左键
_WinAPI_Mouse_Event($MOUSEEVENTF_MOVE ,0,100)        ;继续移动0,100(向下移动100)
_WinAPI_Mouse_Event($MOUSEEVENTF_LEFTUP) ;放下左键  
;~ 以前代码为鼠标的一次选定动作

;~ 以下为一次右键的点击动作
_WinAPI_Mouse_Event($MOUSEEVENTF_RIGHTDOWN) ;按下右键
_WinAPI_Mouse_Event($MOUSEEVENTF_RIGHTUP) ;按下右键  
再来个例子
发表于 2009-9-26 15:51:00 | 显示全部楼层
bing164答案应该是正解了,要给鼠标一个动作标记
发表于 2009-9-26 15:51:43 | 显示全部楼层
bing164答案应该是正解了,要给鼠标一个动作标记
 楼主| 发表于 2009-9-26 21:45:17 | 显示全部楼层
4# sxd
非常感谢,看明白了。
但还是有个小问题。
MOOSE_EVENTF_ABSOLOTE:表明参数dX,dy含有规范化的绝对坐标。如果不设置此位,参数含有相对数据:相对于上次位置的改动位置。
这个可以和其他的结合
所以可以写成

$test = _WinAPI_Mouse_Event(MOOSE_EVENTF_ABSOLOTE and $MOUSEEVENTF_MOVE,30,30)
具体怎么样写啊?
 楼主| 发表于 2009-9-26 22:14:07 | 显示全部楼层
7# netegg

关于鼠标移动还是无法完成,需要依靠AU3的mousemove.只调用了API就可以啦。
MOOSE_EVENTF_ABSOLOTE:表明参数dX,dy含有规范化的绝对坐标。如果不设置此位,参数含有相对数据:相对于上次位置的改动位置。
不过到底怎么移动,我看了 API的说明好久了,也弄不好。

函数功能:该函数综合鼠标击键和鼠标动作。

    函数原型:VOID mouse_event(DWORD dwFlags,DWORD dx,DWORD dwFlags,OWORD dx,DWORD dy, DWORD dwData, DWORD dwExtralnfo);

    参数:

    dwFlags:标志位集,指定点击按钮和鼠标动作的多种情况。此参数里的各位可以是下列值的任何合理组合:

    MOOSE_EVENTF_ABSOLOTE:表明参数dX,dy含有规范化的绝对坐标。如果不设置此位,参数含有相对数据:相对于上次位置的改动位置。此标志可被设置,也可不设置,不管鼠标的类型或与系统相连的类似于鼠标的设备的类型如何。要得到关于相对鼠标动作的信息,参见下面备注部分。

    MOOSEEVENTFMOVE:表明发生移动。

    M00SEEVENTF_LEFTDOWN:表明接按下鼠标左键。

    M00SEEVENTF_LEFTUP:表明松开鼠标左键。

    MOOSEEVENTF_RIGHTDOWN:表明按下鼠标右键。

    MOOSEEVENTF_RIGHTUP:表明松开鼠标右键。

    MOOSEEVENTF_MIDDLEDOWN:表明按下鼠标中键。

    MOOSEEVENTF_MIDDLEUP:表明松开鼠标中键。

    MOOSEEVENTF_WHEEL:在Windows NT中如果鼠标有一个轮,表明鼠标轮被移动。移动的数量由dwData给出。

    dx:指定鼠标沿x轴的绝对位置或者从上次鼠标事件产生以来移动的数量,依赖于MOOSEEVENTF_ABSOLOTE的设置。给出的绝对数据作为鼠标的实际X坐标;给出的相对数据作为移动的mickeys数。一个mickey表示鼠标移动的数量,表明鼠标已经移动。

    dy:指定鼠标沿y轴的绝对位置或者从上次鼠标事件产生以来移动的数量,依赖于MOOSEEVENTF_ABSOLVTE的设置。给出的绝对数据作为鼠标的实际y坐标,给出的相对数据作为移动的mickeys数。

    dwData:如果dwFlags为MOOSEEVENTF_WHEEL,则dwData指定鼠标轮移动的数量。正值表明鼠标轮向前转动,即远离用户的方向;负值表明鼠标轮向后转动,即朝向用户。一个轮击定义为WHEEL_DELTA,即120。

    如果dwFlagsS不是MOOSEEVENTF_WHEEL,则dWData应为零。

    dwExtralnfo:指定与鼠标事件相关的附加32位值。应用程序调用函数GetMessgeExtrajnfo来获得此附加信息。

    返回值:无。

    备注:如果鼠标被移动,用设置MOUSEEVENTF_MOVE来表明,dX和dy保留移动的信息。给出的信息是绝对或相对整数值。

    如果指定了MOWSEEVENTF_ABSOLOTE值,则dX和dy含有标准化的绝对坐标,其值在0到65535之间。事件程序将此坐标映射到显示表面。坐标(0,0)映射到显示表面的左上角,(6553,65535)映射到右下角。

    如果没指定MOWSEEVENTF_ABSOLOTE,dX和dy表示相对于上次鼠标事件产生的位置(即上次报告的位置)的移动。正值表示鼠标向右(或下)移动;负值表示鼠标向左(或上)移动。

    鼠标的相对移动服从鼠标速度和加速度等级的设置,一个最终用户用鼠标控制面板应用程序来设置这些值,应用程序用函数SystemParameterslnfo来取得和设置这些值。

    在应用加速时系统对指定相对鼠标移动提供了两个测试。如果指定的沿X轴y轴的距离比第一个鼠标阈值大,并且鼠标的加速等级非零,则操作系统将距离加倍。如果指定的沿X轴或y轴的距离比第二个鼠标阈值大,并且鼠标的加速等级为2,则操作系统将从第一个阈测试得来的距离加倍。这样就允许操作系统将指定鼠标沿X轴或y轴的相对位移加到4倍。

    一旦应用了加速,系统用期望的鼠标速度换算合成的值。鼠标速度的范围是从1(最慢)到20(最快),并代表基于鼠标移动的距离指示符移动的数量。缺省值是10,表示对鼠标的移动设有附加的修改。

    函数mouse_event需要用的应用程序用来合成鼠标事件。也被应用程序用来取得鼠标位置和鼠标按键状态之外的鼠标信息。例如,如果输入板制造商想将基于画笔的信息传给自己的应用程序,可以写一个直接与输入板硬件通信的动态键接库(DLL),获得附加的信息,并保存到一个队列中。DLL然后调用mouse_event,用标准按键和x/y位置数据,并在参数dwExtralnfo设置排列的附加信息的指针或索引。当应用程序需要附加信息时,调用DLL(连同存贮在dwEXtralnfo中的指针或索引),则DLL返回附加信息。

    Windows CE:Windows CE不支持参数 dwFlags取MOOSE EVENTF WHEEL常数。

    速查: Windows NT: 3.1及以上版本; Windows:95及以上版本;Windows CE:不支持;头文件:winuser.h;输入库:user32.lib。
 楼主| 发表于 2009-9-26 23:29:16 | 显示全部楼层
在官网上逛了2个钟头终于解决了
鼠标移动的代码是:_WinAPI_Mouse_Event(0x8000 + 0x1,60*65535/@DesktopWidth,60*65535/@DesktopHeight)
;$MOOSE_EVENTF_ABSOLOTE=0x8000,  $MOOSEEVENTFMOVE=0x1,$M00SEEVENTF_LEFTDOWN=0x02,$M00SEEVENTF_LEFTUP=0x04
鼠标点击指定坐标的代码是
:_WinAPI_Mouse_Event(0x8000 + 0x1+0x02+0x04,60*65535/@DesktopWidth,60*65535/@DesktopHeight)

评分

参与人数 1金钱 +22 贡献 +5 收起 理由
lynfr8 + 22 + 5

查看全部评分

发表于 2009-9-27 00:52:48 | 显示全部楼层
对,应该是相加就可以了。
发表于 2009-9-27 08:36:42 | 显示全部楼层
呵呵,学习一下。。
发表于 2010-3-17 22:02:59 | 显示全部楼层
学习学习。。。。。。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-9-22 12:44 , Processed in 0.081111 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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