本文主要介绍C#模拟鼠标点击的小功能,通过代码分析给大家。有需要的朋友可以参考一下。
我通过下面的代码和大家分享一下C#模拟鼠标。具体内容如下:
想必很多人在项目开发中可能会遇到需要模拟鼠标点击的小函数,百度之后也会有很多人采用mouse_event函数,但我不想讨论如何使用mouse_event函数,因为它没有太大的意义。
静态void mouse_event(int dwFlags,int dx,int dy,int cButtons,int dwExtraInfo)
{
int x=dx,y=dy
edit_position(dwFlags,dx,dy,ref x,ref y);
IntPtr hWndFromPoint=WindowFromPoint(x,y);
screen_to_client(hWndFromPoint,ref x,ref y);
send_message(hWndFromPoint,dwFlags,cButtons,x,y);
}
你在上面的代码中发现了什么?如果你发现你知道这篇文章讲的是什么,也许你会有兴趣看,但是想想我现在在工地干活这么惨也没关系。
鼠标点击目标时,会向鼠标点击的目标窗口发布消息,根据鼠标的按钮和状态发布不同的消息。一个完整的“鼠标左键点击”事件过程是“WM_LBUTTONDOWN”
WM_LBUTTONUP”是指鼠标“先按下左键,再抬起左键”。因为mouse_event可以模拟鼠标点击过程,而不是直接点击一个完整的鼠标,所以也有“按下抬起”的情况。
mouse _ event(mouse event f _ LEFTDOWN | mouse event f _ LEFTUP | mouse event f _ MOVE,-450,0,1,0);
Mouse_event当没有提供MOUSEEVENTF_MOVE数量时,光标不会移动到相对位置。“光标的相对位置=当前光标位置的新光标位置”。如果提供了MOUSEEVENTF_ABSOLUTE的绝对位置,则新的光标位置将生效,而不添加当前光标位置。
静态void edit_position(int dwFlags,int dx,int dy,ref int x,ref int y)
{
Point pos=鼠标位置;
x=x位置。x;
y=y位置。y;
if((dw flags | mouse eventf _ ABSOLUTE)==dw flags)
SetCursorPos(dx,dy);
if((dw flags | mouse eventf _ MOVE)==dw flags)
SetCursorPos(x,y);
}
edit_position函数主要用于将mouseevent f _移动到MOUSEEVENTF_ABSOLUTE。
支持相对/绝对光标位置修改
静态void send_message(IntPtr hWnd,int dwFlags,int cButtons,int x,int y)
{
if((dw flags | mouse eventf _ left down)==dw flags)
SendMessage(hWnd,WM_LBUTTONDOWN,cButtons,MakeDWord(x,y));
if((dw flags | mouse eventf _ LEFTUP)==dw flags)
SendMessage(hWnd,WM_LBUTTONUP,cButtons,MakeDWord(x,y));
if((dw flags | mouse eventf _ right down)==dw flags)
SendMessage(hWnd,WM_RBUTTONDOWN,cButtons,MakeDWord(x,y));
if((dw flags | mouse eventf _ right up)==dw flags)
SendMessage(hWnd,WM_RBUTTONUP,cButtons,MakeDWord(x,y));
if((dw flags | mouse eventf _ middle down)==dw flags)
SendMessage(hWnd,WM_MBUTTONDOWN,cButtons,MakeDWord(x,y));
if((dw flags | mouse eventf _ middle up)==dw flags)
SendMessage(hWnd,WM_MBUTTONUP,cButtons,MakeDWord(x,y));
}
send_message函数主要用来模拟鼠标点击的过程。我上面提到过“先按下左键,再抬起左键”。在上面的代码中,你可以清楚地看到。如果可以改试试,会怎么样?而不是说
你最好自己做,但你应该早点来。
静态int MakeDWord(int low,int high)
{
return low (high * Abs(~ushort。max value));
}
静态int Abs(int value)
{
返回((值31) ^值)-(值31);
}
MakeDWord/merge integers,功能主要是将两个short合并成一个int,分为高低两部分。
静态bool screen _ to _ client(int ptr hwnd,ref int x,ref int y)
{
bool bRetVal=false
Point lpptPos=新点(x,y);
if((bret val=ScreenToClient(hwnd,ref lpptPos)))
{
x=lpptPos。x;
y=lpptPos。y;
}
返回布雷特瓦尔;
}
Screen_to_client函数,因此得名,主要用于将屏幕上的坐标转换为窗口客户端上的对应坐标。
公共const int wm _ lbuttondown=513//鼠标左键按下
公共const int wm _ lbuttonup=514//鼠标左键抬起
公共const int wm _ rbuttondown=516//鼠标右键按下
公共const int wm _ rbuttonup=517//鼠标右键抬起
公共团体内部wm _ mbuttondown=519//鼠标中键按下
公共团体内部wm _ mbuttonup=520//鼠标中键抬起
public const int mouse ventf _ move=0x 0001;//移动鼠标
public const int mouse ventf _ left down=0x 0002;//鼠标左键按下
公共const int mouse ventf _ left up=0x 0004;//鼠标左键抬起
public const int mouse ventf _ right down=0x 0008;//鼠标右键按下
public const int mouse ventf _ right up=0x 0010;//鼠标右键抬起
public const int mouse ventf _ middle down=0x 0020;//鼠标中键按下
public const int mouse ventf _ middle up=0x 0040;//鼠标中键抬起
public const int mouse ventf _ absolute=0x 8000;//绝对坐标
[DllImport('user32.dll ',SetLastError=true)]
公共静态外部int sendmessage(intpt hwnd、int umsg、int wParam、int lparam
[DllImport('user32.dll ',SetLastError=true)]
公共静态外部intptr windowfrompoint(int point,int point);
[DllImport('user32.dll ',SetLastError=true)]
公共静态外部int setursos(int x,int y);
[DllImport('user32.dll ',SetLastError=true)]
公共静态外部bool屏幕触摸客户端(intpt hwnd,ref point lppt);
//[DllImport('user32 ',SetLastError=true)]
//public static external int mouse _ event(int dwf flags,int dx,int dy,int cButtons,int dwextrainfo);
鼠标右键单击(静默):
复制代码代码如下:
mouse _ event(mouse ventf _ right down | mouse ventf _ right up,0,0,1,0);
鼠标左键双击(静默):
复制代码代码如下:
mouse _ event(mouse event _ left down | mouse event _ left up,0,0,2,0);
鼠标移动(相对位置):
复制代码代码如下:
mouse _ event(鼠标事件_移动,100,50,0,0):
鼠标移动(绝对位置):
复制代码代码如下:
mouse _ event(mouse event f _ absolute,100,50,0,0)-滑鼠_事件(鼠标事件_绝对,100,50,0,0):
以上内容比较多请认真学习,希望能够帮助到大家。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。