[点评:一般来讲,我们对鼠标的移动用setcursorpos就可以完成,但是相对而言,mouse_event更加底层。与之相对应的还有keybd_event.不过在win2k下面,用sendinput可以代替。]
如果鼠标已经移动,指示MOUSEEVENTF_MOVE要被设置,dx和dy保存关于这一运行的信息,这一信息是绝对坐标或相对坐标的整数值.
如果MOUSEEVENTF_ABSOLUTE值被指定,dx和dy包含0-65535之间的统一坐标值,事件过程映射基于显示表面的坐标,原点是0,0映射
屏幕左上角,(65535,65535)映射屏幕右下角.
如果MOUSEEVENTF_ABSOLUTE未指定,dx和dy指定从最后一次鼠标事件产生的相对位置,正值表示向右或向下,负值表示向上或向左.
相对坐标受限于鼠标速度及加速层次的设置,最终用户通过鼠标面板程序设置这些值,应用程序通过systemParametersInfo来获取
或设置这些值.
当应用加速后,系统应用两项测试至指定的鼠标相对位置值,如果指定的距离沿着x或y大于第一次鼠标的界限值,并且鼠标加速层非
零,操作系统双倍于此距离,如果指定的距离沿着x或y大于第二次鼠标的界定值,并且鼠标加速层次等于2,操作系统双倍于此距离从导致第一
次测试之后,因此操作系统可能沿着x或y乘以相对鼠标移动值最多至四次.
一次加速被应用,系统结果值依附于要求鼠标速度,鼠标速度在1-20之间,并且表示基于鼠标移动距离的多少点.默认值是10,结果没有
额外的鼠标修改值.
函数功能:该函数综合鼠标击键和鼠标动作。
函数原型: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。
也就是说,要达到你说得并不难只要设置dx dy 值就可以啦!
mouse_event MOUSEEVENTF_LEFTDOWN Or MOUSEEVENTF_LEFTUP, 100&, 100&, cButt, dwEI
这样的话应该在(100,100)处发生点击事件拉。
Private
Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Long, ByVal dx
As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As
Long)
Const MOUSEEVENTF_LEFTDOWN = &H2
Const MOUSEEVENTF_LEFTUP = &H4
Const MOUSEEVENTF_MIDDLEDOWN = &H20
Const MOUSEEVENTF_MIDDLEUP = &H40
Const MOUSEEVENTF_MOVE = &H1
Const MOUSEEVENTF_ABSOLUTE = &H8000
Const MOUSEEVENTF_RIGHTDOWN = &H8
Const MOUSEEVENTF_RIGHTUP = &H10
Private Sub Command1_Click()
'Simulate a mouseclick on the cursor's position
mouse_event MOUSEEVENTF_LEFTDOWN Or MOUSEEVENTF_LEFTUP, 100 * 65535 / 1024, 100 * 65535 / 768, 0&, dwEI
End Sub
Private Sub Form_Load()
Me.Move 0, 0, Screen.Width, Screen.Height
End Sub
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
MsgBox "X:" & CStr(X) & " Y:" & CStr(Y)
End Sub
例如:当前界1为6,界2为10,加速度为1
mouse_event(MOUSEEVENTF_MOVE,5,0,0,0),那么,鼠标在1024*768下移动约205下,即5*205=1025,约为1024
阅读(3737) | 评论(0) | 转发(0) |