winform模拟鼠标按键的具体实现
今天朋友说被他们公司的学习网站恶心到了,下班后要他看学习资料,看完点下一页,而且一页必须停留多少时间才能点击下一页,想不看都不行,于是晚上我突发奇想要给他做一个模拟鼠标按键的程序,可以让鼠标定时间隔触发单击,顺便做下程序最小化到右下角。
首先要引用下user32.dll文件,电脑里就有,c:\windows\system32搜索下出来了,复制出来放到debug目录下就行。
以下是解决方案代码
[dllimport("user32.dll", charset = charset.auto, callingconvention = callingconvention.stdcall)]
private static extern int mouse_event(int dwflags, int dx, int dy, int cbuttons, int dwextrainfo);
const int mouseeventf_move = 0x0001; //移动鼠标
const int mouseeventf_leftdown = 0x0002; //模拟鼠标左键按下
const int mouseeventf_leftup = 0x0004; //模拟鼠标左键抬起
const int mouseeventf_rightdown = 0x0008; //模拟鼠标右键按下
const int mouseeventf_rightup = 0x0010; //模拟鼠标右键抬起
const int mouseeventf_middledown = 0x0020; //模拟鼠标中键按下
const int mouseeventf_middleup = 0x0040; //模拟鼠标中键抬起
const int mouseeventf_absolute = 0x8000; //标示是否采用绝对坐标
public form1()
{
initializecomponent();
}
private void timer1_tick(object sender, eventargs e)
{
if (rbtnclick.checked)
{
mouse_event(mouseeventf_leftdown | mouseeventf_leftup, cursor.position.x, cursor.position.y, 0, 0);
}
if (rbtndoubclick.checked)
{
mouse_event(mouseeventf_leftdown | mouseeventf_leftup | mouseeventf_leftdown | mouseeventf_leftup, cursor.position.x, cursor.position.y, 0, 0);
}
}
这是设计界面
最小化到右下角用了一个notifyicon控件,在窗体变化时触发事件
private void form1_resize(object sender, eventargs e)
{
if (this.windowstate == formwindowstate.minimized)
{
notifyicon1.visible = true;
this.hide();
this.showintaskbar = false;//是否在windows任务栏中显示窗体
}
}
双击最小化图标时要恢复窗体
private void notifyicon1_mousedoubleclick(object sender, mouseeventargs e)
{
if (!this.showintaskbar)
{
this.showintaskbar = true;
this.show();
this.activate();
this.windowstate = formwindowstate.normal;
}
}
总体工作做好了,记得给notifyicon控件上个图标。运行起来,启动按钮,最小化程序,鼠标就会间隔性地点击啦。
拓展:可以加入键盘按键功能,指定时间模拟出键盘按键。是否还可以加入模拟鼠标滚轮。以后有需要可以继续写出来。