mouseevent模拟鼠标点击,mouse click

http://www.itjxue.com  2023-01-04 22:10  来源:未知  点击次数: 

VB 模拟点击mouse_event 的问题

看你的代码如何写了是不是只写了

down,应该是两次语句,一次down,一次up,才算一次完整的鼠标点击的

mouse_event(MouseEventFlag.LeftDown,

0,

0,

0,

UIntPtr.Zero);

mouse_event(MouseEventFlag.LeftUp,

0,

0,

0,

UIntPtr.Zero);

C#用mouse_event模拟鼠标点击的问题

1、首先添加using System.Runtime.InteropServices;

2、为鼠标添加模拟点击的各种参数

//鼠标事件??因为我用的不多,所以其他参数没有写

???private?readonly?int?MOUSEEVENTF_LEFTDOWN?=?0x0002;//模拟鼠标移动

???private?readonly?int?MOUSEEVENTF_MOVE?=?0x0001;//模拟鼠标左键按下

???private?readonly?int?MOUSEEVENTF_LEFTUP?=?0x0004;//模拟鼠标左键抬起

???private?readonly?int?MOUSEEVENTF_ABSOLUTE?=?0x8000;//鼠标绝对位置

???private?readonlyint?MOUSEEVENTF_RIGHTDOWN?=?0x0008;?//模拟鼠标右键按下?

???private?readonlyint?MOUSEEVENTF_RIGHTUP?=?0x0010;?//模拟鼠标右键抬起?

???private?readonlyint?MOUSEEVENTF_MIDDLEDOWN?=?0x0020;?//模拟鼠标中键按下?

???private?readonlyint?MOUSEEVENTF_MIDDLEUP?=?0x0040;//?模拟鼠标中键抬起

3、为鼠标点击添加点击函数

public?static?extern?void?mouse_event(int?dwFlags,?int?dx,?int?dy,?int?dwData,?int?dwExtraInfo);

?????????private?void?button2_Click(object?sender,?EventArgs?e)????????{????????????int?x?=?int.Parse(textBox1.Text);????????????int?y?=?int.Parse(textBox2.Text);

//绝对位置????????????mouse_event(MOUSEEVENTF_MOVE?|?MOUSEEVENTF_ABSOLUTE,?x?*?65535?/?1600,?y?*?65535?/?900,?0,?0);//移动到需要点击的位置????????????mouse_event(MOUSEEVENTF_LEFTDOWN?|?MOUSEEVENTF_ABSOLUTE,?x?*?65535?/?1600,?y?*?65535?/?900,?0,?0);//点击????????????mouse_event(MOUSEEVENTF_LEFTUP?|?MOUSEEVENTF_ABSOLUTE,?x?*?65535?/?1600,?y?*?65535?/?900,?0,?0);//抬起

//相对位置??指的是相对于当前鼠标的相对位置

????????????mouse_event(MOUSEEVENTF_MOVE?,?x?,?y,?0,?0);//移动????????????mouse_event(MOUSEEVENTF_LEFTDOWN?,?x?,?y,?0,?0);//点击????????????mouse_event(MOUSEEVENTF_LEFTUP?,?x?,?y?,?0,?0);//抬起

????????}

C++,怎么让程序模拟用户输入指令,并自行回车以执行该指令(不是写个输出函数只做样子)?

可以用WinApi实现,需要包含windows.h。

需要两个模块,一个是检测回车键的模块,一个是模拟输入指令的模块。

检测回车键,有两个函数可以用: GetKeyState和GetAsyncKeyState,两个函数的参数都是虚拟键码,虚拟键码可以在网站上查询:虚拟键码 | Microsoft Learn

两个函数的返回值相同:返回一个short型的数,short型是16位有符号的数据类型,如果要查询的键被按下,返回值最高位被置1,则这个数表示负数,所以可以用0或0来判断。

两个函数的区别在于,GetKeyState返回的不是键盘真实状态,而是程序获得的键盘消息。简单地说,如果程序没有获得焦点,则无法获得按键信息,返回的是没有按键的状态。而GetAsyncKeyState返回的是按键的真实状态。

将GetAsyncKeyState放入循环,每次循环检测有没有按下回车键,如果按下则模拟输入指令;每次循环后Sleep一段时间,节约系统资源。

模拟输入指令同样有两种方法:向指定窗口发送按键信息sendMessage和模拟按键

由于我测试的软件无法用第一个方法,我只介绍第二个方法。

模拟按键就像真实按键一样,只有目标窗口获得焦点时,按键信息才会被目标窗口接收到。因此,一方面,程序不能获得焦点,只能用GetAsyncKeyState函数;另一方面,我们需要让目标窗口获得焦点。

让目标窗口获得焦点。最简单的方法是手动操作,点击一下。当然也可以用FindWindow函数,或者由程序启动目标程序并获得句柄,然后调用winapi使其获得焦点。由于需求是按回车键开始模拟按键,手动操作即可,这里不多赘述。

模拟按键一般使用函数Keybd_event。函数有4个参数,一般情况下,第2、4个参数置0即可,第1个参数是按键的虚拟键码,第3个参数是按键状态,0是按下,KEYEVENTF_KEYUP是抬起。注意按下和抬起之间建议Sleep几毫秒,否则目标窗口可能无法获取到按键信息。

模拟鼠标点击一般使用mouse_event,一般与SetCursorPos(x,y)函数一起使用。与Keybd_event类似,mouse_event有5个参数。第1个为dwFlags,如下图。第2、3个参数分别表示鼠标的相对位置,一般置0。第4个参数是dwData,滚轮移动数量,正值向前,负值向后。第5个参数一般置0。

使用方法与Keybd_event函数相似。用SetCursorPos(x,y)函数将鼠标光标移到指定位置(距离屏幕左边x,距离屏幕上边y),用mouse_event模拟鼠标点击。也可以先用mouse_event鼠标按下后,再用SetCursorPos(x,y)模拟鼠标拖动。最好中间也Sleep几毫秒。

请点击输入图片描述

GetKeyState_百度百科

GetAsyncKeyState_百度百科

C#用mouse_event模拟鼠标的点击的问题

给你写了一个示例,你自己可以看明白的:

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)

Private Const MOUSEEVENTF_ABSOLUTE = H8000 '指定鼠标使用绝对坐标系,此时,屏幕在水平和垂直方向上均匀分割成65535×65535个单元

Private Const MOUSEEVENTF_MOVE = H1 '移动鼠标

Private Const MOUSEEVENTF_LEFTDOWN = H2 '模拟鼠标左键按下

Private Const MOUSEEVENTF_LEFTUP = H4 '模拟鼠标左键抬起

Private Const SW = 1024

Private Const SH = 768

Private Sub Screen_Click(ByVal x As Long, ByVal y As Long)

mw = x / SW * 65535

mh = y / SH * 65535

mouse_event MOUSEEVENTF_ABSOLUTE + MOUSEEVENTF_MOVE, mw, mh, 0, 0

mouse_event MOUSEEVENTF_LEFTDOWN Or MOUSEEVENTF_LEFTUP, 0, 0, 0, 0

End Sub

Private Sub Command1_Click()

Screen_Click 512, 384 '点击Command1之后,模拟点击屏幕中间

End Sub

Private Sub Command2_Click()

Print Rnd

End Sub

Private Sub Form_Load()

Me.Height = Me.Width

Command2.Move (Me.ScaleWidth - Command2.Width) / 2, (Me.ScaleHeight - Command2.Height) / 2

End Sub

另外,站长团上有产品团购,便宜有保证

VB mouse_event 模拟鼠标移动问题 帮忙找错!

mouse_event MOUSEEVENTF_MOVE + MOUSEEVENTF_ABSOLUTE, Me.ScaleX(100, 3, 1) * 65535 / Screen.Width, 0, 0, 0

解释:

MOUSEEVENTF_ABSOLUTE 是让鼠标指针按绝对位置移动。如果是相对移动,则实际的移动位置要受控制面板中对鼠标指针移动速度及移动精度的影响,也就是说,在不同的电脑上,鼠标指针相对移动后的位置很可能会出现截然不同的情况,所以最好不要用相对移动,改用绝对移动。

Me.ScaleX(100, 3, 1)是把100像素转为缇(Twip)

Screen.Width是屏幕的横向分辨率(单位是缇),这样就使程序适应所有显示器

请教如何模拟鼠标点击,而不影响光标的其他操作

使用API函数mouse_event可以模拟鼠标事件,比如左键单击、双击和右键单击等。这个实例利用此函数产生了十分有趣的效果,无论鼠标处于屏幕的任何位置,每隔一秒程序会使鼠标在那个位置单击或双击一次,这会给我们造成什么样的混乱呢?试一试就知道了。 先在程序中加入如下的声明后,就能引用mouse_event函数: Private Declare Sub mouse_event Lib "user32" (ByValdwFlags As Long, ByVal dx As Long, ByValdy As Long, ByValcButtons As Long, ByValdwExtraInfo As Long) 其中各个参数的意义如下表所示: 参数意义 dwFlags Long,下表中标志之一或它们的组合 dx,dy Long,根据MOUSEEVENTF_ABSOLUTE标志,指定x,y方向的绝对位置或相对位置 cButtons Long,没有使用 dwExtraInfo Long,没有使用 dwFlags常数意义 MOUSEEVENTF_MOVE H1,移动鼠标 MOUSEEVENTF_LEFTDOWN H2,模拟鼠标左键按下 MOUSEEVENTF_LEFTUP H4,模拟鼠标左键抬起 MOUSEEVENTF_RIGHTDOWN H8,模拟鼠标右键按下 MOUSEEVENTF_RIGHTUP H10,模拟鼠标右键抬起 MOUSEEVENTF_MIDDLEDOWN H20,模拟鼠标中键按下 MOUSEEVENTF_MIDDLEUP H40,模拟鼠标中键抬起 MOUSEEVENTF_ABSOLUTE H8000,标示是否采用绝对坐标

(责任编辑:IT教学网)

更多

推荐XML/XSLT文章