秒杀抢券、压枪换弹都是网上冲浪的基本操作,制作一个鼠标连点器,从此在互联网所向披靡。
- 一、项目搭建
- 1.1、创建
- 1.2、界面设计
- 二、功能实现
- 2.1、类型库调用
- 2.2、窗口句柄定义
- 2.3、线程处理
- 2.4、快捷键
一、项目搭建
1.1、创建
打开Visual Studio,右侧选择创建新项目。
搜索框输入winform,选择windows窗体应用,填写对应的保存路径点击下一步,创建成功后如下图。
1.2、界面设计
通过工具箱分别拖拽picbox、label、textbox、button等控件放到界面上,通过定义picbox的image属性导入图片素材。
文章是模拟压枪连续点击,所以找了一个手持火麒麟的图片,可以在窗体中间放一个靶心的图标。
定义一个变量接收用户在textbox中输入的数值,同时双击button控件,生成对应的click事件。
private void button1_Click(object sender, EventArgs e)
{
}
二、功能实现
2.1、类型库调用
使用DllImport调用User32.dll,user32.dll是Windows用户界面相关应用程序接口,用于包括Windows处理,基本用户界面等特性,如创建窗口和发送消息。
[DllImport("User32")]
public extern static void mouse_event(int dwFlags, int dx, int dy, int dwData, IntPtr dwExtraInfo);
[DllImport("User32")]
public extern static void SetCursorPos(int x, int y);
[DllImport("User32")]
public extern static bool GetCursorPos(out POINT p);
定义一个结构,用于存储当前鼠标的x轴以及y轴位置
[StructLayout(LayoutKind.Sequential)]
public struct POINT
{
public int X;
public int Y;
}
2.2、窗口句柄定义
定义热键的窗口的句柄,同时定义热键ID,标识热键是否在按Alt、Ctrl、Shift、Windows等键时才会生效
[DllImport("user32.dll")]
public static extern bool RegisterHotKey(IntPtr wnd, int id, MODKEY mode, Keys vk);
[DllImport("user32.dll")]
public static extern bool UnregisterHotKey(IntPtr wnd, int id);
[Flags()]
public enum MODKEY
{
None = 0,
ALT = 0x0001,
CTRL = 0x0002,
SHIFT = 0x0004,
WIN = 0x0008,
}
private NotifyIcon notifyIcon = null;
public enum MouseEventFlags
{
Move = 0x0001,
LeftDown = 0x0002,
LeftUp = 0x0004,
RightDown = 0x0008,
RightUp = 0x0010,
MiddleDown = 0x0020,
MiddleUp = 0x0040,
Wheel = 0x0800,
Absolute = 0x8000
}
2.3、线程处理
在用户点击的时候需要同步在界面上显示当前点击了多少次以及一些特效,这里需要通过线程进行处理。
private void button1_Click(object sender, EventArgs e)
{
// 启动新线程执行循环操作
Thread thread = new Thread(new ThreadStart(Loop));
thread.Start();
}
使用 Invoke 方法将 Label 的 Text 属性设置为当前的值
private void Loop()
{
int count = Convert.ToInt32(this.textBox1.Text);
for (int i = 0; i < count; i++)
{
// 使用 Invoke 方法将 Label 的 Text 属性设置为当前的值
this.Invoke(new Action(() =>
{
label1.Text = "已模拟点击鼠标点击次数:"+i.ToString();
}));
Thread.Sleep(1); // 模拟耗时操作
}
}
实例化一个NotifyIcon对象,将主窗体隐藏的同时放到后台任务运行
//隐藏主窗体
this.Hide();
//实例化一个NotifyIcon对象
notifyIcon = new NotifyIcon();
//托盘图标气泡显示的内容
notifyIcon.BalloonTipText = "正在后台运行";
//托盘图标显示的内容
notifyIcon.Text = "鼠标自动点击器";
//注意:下面的路径可以是绝对路径、相对路径。但是需要注意的是:文件必须是一个.ico格式
//notifyIcon.Icon = new System.Drawing.Icon("F:/renjiashuo/program/AutoClickMouse/AutoClickMouse/mouse.ico");
ComponentResourceManager resources = new ComponentResourceManager(typeof(AutoClickMouseLeftButton));
notifyIcon.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
//true表示在托盘区可见,false表示在托盘区不可见
notifyIcon.Visible = true;
//气泡显示的时间(单位是毫秒)
notifyIcon.ShowBalloonTip(5000);
notifyIcon.MouseClick += new System.Windows.Forms.MouseEventHandler(notifyIcon_MouseClick);
2.4、快捷键
软件最小化后,可以设置不同的快捷键设置它的启动或者停止,通过获取windows消息的回调进行实现。
protected override void WndProc(ref Message m)
{
if (m.Msg == 0x0312)
{
switch (m.WParam.ToInt32())
{
case 10:
this.BT_Start_Click(null,null);
break;
case 11:
this.BT_Stop_Click(null, null);
break;
default:
break;
}
return;
}
base.WndProc(ref m);
}
文章内容仅做参考,切勿用于非法用途。