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);//抬起 }
mouse_event
两者都有
鼠标按下或抬起: 即单击一次鼠标
mouse_event
函数功能:该函数综合鼠标击键和鼠标动作。
函数原型: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。
易语言,怎么对指定窗口模拟鼠标点击和按键,可以后台的
其实也不用这么难的。
用超级模块的命令就可以了。
你先把登录的按钮裁下来。
放在易语言里
然后用这个命令
这个坐标是一个变量。坐标型变量模块里有的
坐标 = 新识图.精确找图 (新识图.到可用图片 (#QQ图标), , , , , , )
如果 (坐标.x ≠ 0)
鼠标移动 (0, 坐标.x, 坐标.y)
鼠标键 (#单击左键, #按下_)
鼠标键 (#单击左键, #放开_)
这样自动点击的过程就完成了。
账号和密码只要找到句柄就可以了。也可以用上面的方法
把光标的焦点移到上面然后在模拟按键。到输入密码的时候再
模拟按下Tab键就ok了
mouse_event的参数
dwFlags:标志位集,指定点击按钮和鼠标动作的多种情况。此参数里的各位可以是下列值的任何合理组合:MOUSEEVENTF_ABSOLUTE:表明参数dX,dy含有规范化的绝对坐标。如果不设置此位,参数含有相对数据:相对于上次位置的改动位置。此标志可被设置,也可不设置,不管鼠标的类型或与系统相连的类似于鼠标的设备的类型如何。要得到关于相对鼠标动作的信息,参见下面备注部分:MOUSEEVENTF_MOVE:表明发生移动。MOUSEEVENTF_LEFTDOWN:表明接按下鼠标左键。MOUSEEVENTF_LEFTUP:表明松开鼠标左键。MOUSEEVENTF_RIGHTDOWN:表明按下鼠标右键。MOUSEEVENTF_RIGHTUP:表明松开鼠标右键。MOUSEEVENTF_MIDDLEDOWN:表明按下鼠标中键。MOUSEEVENTF_MIDDLEUP:表明松开鼠标中键。MOUSEEVENTF_WHEEL:在Windows NT中如果鼠标有一个轮,表明鼠标轮被移动。移动的数量由dwData给出。dx:指定鼠标沿x轴的绝对位置或者从上次鼠标事件产生以来移动的数量,依赖于MOUSEEVENTF_ABSOLUTE的设置。给出的绝对数据作为鼠标的实际X坐标;给出的相对数据作为移动的mickeys数。一个mickey表示鼠标移动的数量,表明鼠标已经移动。dy:指定鼠标沿y轴的绝对位置或者从上次鼠标事件产生以来移动的数量,依赖于MOUSEEVENTF_ABSOLUTE的设置。给出的绝对数据作为鼠标的实际y坐标,给出的相对数据作为移动的mickeys数。dwData:如果dwFlags为MOUSEEVENTF_WHEEL,则dwData指定鼠标轮移动的数量。正值表明鼠标轮向前转动,即远离用户的方向;负值表明鼠标轮向后转动,即朝向用户。一个轮击定义为WHEEL_DELTA,即120。如果dwFlagsS不是MOUSEEVENTF_WHEEL,则dWData应为零。dwExtralnfo:指定与鼠标事件相关的附加32位值。应用程序调用函数GetMessageExtraInfo来获得此附加信息。返回值:无。
电脑鼠标自动点击左键?怎么回事
鼠标双击是微动坏了。
第一,建议买个新鼠标吧,维修太麻烦,普通鼠标也就七八块钱,好点儿的十几块,无线的好些的百八十。
第二,如果你的鼠标很高档,那就拿去电子城修修吧,维修价格在十几块钱左右。
鼠标内的微动开关,是一种内部采用金属簧片触发的部件,鼠标上的按键按下一次后,微动开关内的金属簧片前段的银点同下方接触脚触发一次,造成电路导通向电脑传送出一个电讯号,之后再复位。
鼠标上所有的按键下,必然有一个微动开关或轻触开关,因此实际上微动开关就是鼠标的按键,鼠标外壳上按键的作用只是方便使用者按下微动开关,如今微动开关已不止用于鼠标,同时也可用于其他各种玩具上。
微动开关的种类繁多,内部结构有成百上千种,按体积分有普通型、小型、超小型;按防护性能分,有防水型、防尘型、防爆型;按分断形式分,有单联型、双联型、多连型。还有一种强断开微动开关(当开关的簧片不起作用的时候,外力也能使开关断开);按分断能力分,有普通型、直流型、微电流型、大电流型。按使用环境分,有普通型、耐高温型(250℃)、超耐高温陶瓷型(400℃)
微动开关一般以无辅助按压附件为基本型式,并且派生出小行程式、大行程式。根据需要可加入不同辅助按压辅件,根据加入的不同的按压辅件开关可分为按钮式、簧片滚轮式、杠杆滚轮式、短动臂式、长动臂式等各种形式。
微动开关在需频繁换接电路的设备中进行自动控制及安全保护等,广泛应用在电子设备、仪器仪表、矿山、电力系统、家用电器、电器设备,以及航天、航空、舰船、导弹、坦克等军事领域,已经广泛应用于以上领域,开关虽小,但起着不可替代的作用。
目前国内市面上的微动开关根据使用要求的不同,开关的机械寿命有3W次至1000W次不等,一般有10W、20W、50W、100W次、300W次、500W次、800W次,国内一般使用铍青铜、锡青铜、不锈钢丝做簧片,国外的ALPS最高可以做到1000W次,他们的簧片是用稀有金属钛做成的,国内腾飞公司也最高可以做到1000W次。
应用范围
如电脑鼠标、汽车鼠标器、汽车电子产品、通讯设备、军工产品,测试仪器、燃气热水器、煤气灶、小家电、微波炉、电饭锅、浮球设备配套、医疗器械、楼宇自动化、电动工具及一般电气和无线电设备、24小时定时器等
电脑鼠标左键自动点击
原因:
鼠标长时间使用后,由于触点的氧化,造成触点的接触不良,最长见的现象有两种:
1.单击无反映.
2.单击变双击.
解决方案
一、改动设置
选择设备管理器-->通用串行总线控制器-->Intel(R) 82801DB/DBM USB Universal Hos Controller - 24C2
点击其“属性→高级”项:
XP系统: 勾选“不要通知我USB错误”
2000系统:勾选“USB设置”下的“停用USB错误检测”
确定OK。
这能够提高包括USB鼠标在内的USB设备对系统做出反应的灵敏度。
设置2:
在控制面板-鼠标-鼠标配置-切换主要和次要的按钮的勾去掉!
设置3:
打开我的电脑点上面的工具--文件夹选项--常规选项卡里面有一个“通过双击打开项目” 选中它就行了。
设置4:有时移动设备使用后会出现鼠标左键单击变双击的情况,可在任务管理器中结束wowexec.exe和cdilla10.exe进程,就会恢复正常,但下次使用移动设备后会继续出现此问题。
注意:你去控制面板--鼠标属性--”启用左键锁定”,
然后调整双击速度设置,
要是还不行的化就是鼠标真的坏了,换个新的就好了。
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
另外,站长团上有产品团购,便宜有保证
C#模拟鼠标点击
using System.Runtime.InteropServices;
[DllImport("user32.dll")]
static extern void mouse_event(MouseEventFlag flags, int dx, int dy, uint data, UIntPtr extraInfo);
[Flags]
enum MouseEventFlag : uint
{
Move = 0x0001,
LeftDown = 0x0002,
LeftUp = 0x0004,
RightDown = 0x0008,
RightUp = 0x0010,
MiddleDown = 0x0020,
MiddleUp = 0x0040,
XDown = 0x0080,
XUp = 0x0100,
Wheel = 0x0800,
VirtualDesk = 0x4000,
Absolute = 0x8000
}
mouse_event(MouseEventFlag.Move, 0, 0, 0, UIntPtr.Zero)
mouse_event(MouseEventFlag.LeftDown, 0, 0, 0, UIntPtr.Zero);
mouse_event(MouseEventFlag.LeftUp, 0, 0, 0, UIntPtr.Zero);
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是屏幕的横向分辨率(单位是缇),这样就使程序适应所有显示器