自制鼠标自动点击器

工具集 专栏收录该内容
1 篇文章 0 订阅

因为玩游戏(XX水族馆)的原因,需要频繁点击鼠标,所以想找个软件的动作来替代鼠标动作。在网上找了好多鼠标自动点击器,不是要收费就是程序根本就是个bug。所以决定干脆自己做一个好了。。。原理也不难,涉及到的知识也很简单。。我相信这是一篇不错的启蒙导读。毕竟我也是个新手。。

下载地址:http://download.csdn.net/detail/skygpan/3881900

小技术:API函数应用,hotkey热键注册,最小化隐藏窗体

指导思想:越简单越好


一、首先是设计界面,
1.有个启动/关闭按钮。
2.有个热键说明。
3.有个模拟鼠标的动作的选择。
4.有个时间间隔的输入
5.标题栏:窗体上不需要最大化按钮,最小化按钮是自动隐藏,再有个叉子退出按钮

以上这些差不多了。。实用为主
好了,在VS中设计一下界面,大概就是这样了,可以自己选择自己喜欢的位置


二、设计类
1.一套windows的API,这个通常我都是在网上找,资源很丰富。
包含:鼠标API,热键API
正所谓,一个男人应该有一套属于自己的API! 还有很多API自己去攒吧~

a.鼠标操作API

public static extern void mouse_event(int flags, int dx, int dy, uint data, UIntPtr extraInfo);
public enum MouseButton : uint
{
    Left = 0x2,
    Right = 0x8,
    Middle = 0x20
}



封装鼠标操作类:

class MouseUtility
{
         public static int intervalTime = 1;
	public static void MouseDown(WinAPI.MouseButton mouse);
	public static void MouseUp(WinAPI.MouseButton mouse);
	public static void Click(WinAPI.MouseButton button);
	public static void DoubleClick(WinAPI.MouseButton button);
}

b.热键操作API

[DllImport("user32.dll", SetLastError = true)]
public static extern bool RegisterHotKey(
	IntPtr hWnd, // handle to window 
	int id, // hot key identifier
	int fsModifiers, // key-modifier options 
	int vk // virtual-key code 
);
[DllImport("user32.dll", SetLastError = true)]
public static extern bool UnregisterHotKey(
                 IntPtr hWnd, // handle to window 
                 int id // hot key identifier 
);
 
public enum MyKeyValue : uint
{
      MOD_ALT = 0x0001,
      MOD_CONTROL = 0x0002,
      MOD_SHIFT = 0x0004,
      MOD_WIN = 0x0008,
}

2.业务逻辑代码主要程序模块:

1.初始化
 a.绑定热键,方便用户随时调用

WinAPI.RegisterHotKey(this.Handle, this.hotKeyIDRun, 0, (int)Keys.F8);
WinAPI.RegisterHotKey(this.Handle, this.hotKeyIDStop, 0, (int)Keys.F9);

b.绑定界面数据

ViewBind()

2.重写WndProc函数
用于捕获window窗体的消息,如果是快捷键,则检查是否是绑定的快捷键。

protected override void WndProc(ref Message m)
{
	switch (m.Msg)
	{
		case WinAPI.WM_HOTKEY:
			if (m.WParam.ToInt32().Equals(this.hotKeyIDRun)){RunningClick();}
			if (m.WParam.ToInt32().Equals(this.hotKeyIDStop)){StopClick();} break; 
	}
	base.WndProc(ref m);
}

3.应用配置项
应用配置按钮的事件,用于绑定间隔时间和获得操作类型

try
{
	double inTime = double.Parse(this.TxbIntervalTime.Text);
	if (inTime < 0) ViewUtility.ShowInfo("时间间隔必须是正数!");
	this.timer1.Interval = (int)inTime * 1000;
}
catch
{
	ViewUtility.ShowInfo("您输入的时间间隔有误,请重新输入!");
	return;
}
this.action = (MyAction)this.CbxSelectAction.SelectedValue;
ViewUtility.ShowInfo("配置成功!");

4.开始运行

private void RunningClick()
{
	/界面显示
	this.BtnRunning.Text = "停止";
 	this.BtnRunning.BackColor = Color.DarkGray;
	this.BtnRunning.ForeColor = Color.White;
	this.notifyIcon1.Text = "已启动";
 	/业务处理
	this.timer1.Start();
}

5.间隔执行函数
根据界面的现实,调用封装的鼠标点击操作

private void timer1_Tick(object sender, EventArgs e)
{
	switch (action)
	{
		case MyAction.LeftClick: MouseUtility.Click(WinAPI.MouseButton.Left); break;
		case MyAction.RightClick: MouseUtility.Click(WinAPI.MouseButton.Right); break;
		case MyAction.LeftDoubleClick: MouseUtility.DoubleClick(WinAPI.MouseButton.Left); break;
		case MyAction.RightDoubleClick: MouseUtility.DoubleClick(WinAPI.MouseButton.Right); break;
		default: break;
	}
}

6.结束运行

private void StopClick()
{
 	//界面显示
	this.BtnRunning.Text = "启动";
	this.BtnRunning.BackColor = Color.WhiteSmoke;
	this.BtnRunning.ForeColor = Color.Black;
	this.notifyIcon1.Text = "已停止";
	//业务处理
	this.timer1.Stop();
}

7.最小化隐藏函数和显示事件

private void notifyIcon1_DoubleClick(object sender, EventArgs e)
{
	if (base.WindowState.Equals(FormWindowState.Minimized))
	{
		//顺序不能颠倒,否则你会后悔的!
		base.Show();
		base.WindowState = FormWindowState.Normal;
	}

}
private void Form1_Deactivate(object sender, EventArgs e)
{
	if (this.WindowState == FormWindowState.Minimized)
         {
                this.Hide();
         }
}

最后来个截图:

基本上,这个简单的程序,就是由以上这些主要代码组成的,零零碎碎的还有一些代码,就不粘贴出来了。
自己用的时候还是很爽的。尤其是在玩水族馆的时候,摆脱了狂点鼠标的烦恼。

这套程序提供给大家完整的源代码和实现方案。有兴趣的朋友可以拿去扩展。

 

 

  • 3
    点赞
  • 1
    评论
  • 16
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值