前不久无意中发现了一款手机上的软件,看新闻就可以得金币,通过金币可以换取RMB,怀着好奇,我下载了并且点击进去查看了,通过使用,发现这款软件获取金币的方法很简单,就是点击一篇新闻,进去后,隔一段时间滑动一下屏幕,大概20多秒就可以得到一次金币。当时我就在想有没有办法我自己写一个程序,模拟鼠标的点击,移动,滑轮滚动,然后把手机连接到电脑上,用电脑控制手机的屏幕(我是C#的,就只有这样转换了,要是Android的就直接写控制手机的了)。在上网查询了一些方法,结合自己写的。下面是鼠标点击,移动,滑轮滚动的方法。
[DllImport("user32.dll")]
static extern void mouse_event(int flags, int dX, int dY, int buttons, int extraInfo);
const int MOUSEEVENTF_MOVE = 0x1;//模拟鼠标移动
const int MOUSEEVENTF_LEFTDOWN = 0x2;//
const int MOUSEEVENTF_LEFTUP = 0x4;
const int MOUSEEVENTF_RIGHTDOWN = 0x8;
const int MOUSEEVENTF_RIGHTUP = 0x10;
const int MOUSEEVENTF_MIDDLEDOWN = 0x20;
const int MOUSEEVENTF_MIDDLEUP = 0x40;
const int MOUSEEVENTF_WHEEL = 0x800;
const int MOUSEEVENTF_ABSOLUTE = 0x8000;
//控制鼠标移动到坐标((int_X + 100) * 65536 / 1366, (int_Y + move_long) * 65536 / 768)这个绝对位置上。1366和768是电脑屏幕的分辨率,我的电脑是1366*768的分辨率
//分辨率要根据自己的电脑设置正确,不然获取到的坐标不准确。
mouse_event(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE, (int_X + 100) * 65536 / 1366, (int_Y + move_long) * 65536 / 768, 0, 0);
//鼠标在原地左键点击一次(点下和松开)
mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
//控制鼠标滑轮滚动,count代表滚动的值,负数代表向下,正数代表向上,如-100代表向下滚动100的y坐标
mouse_event(MOUSEEVENTF_WHEEL, 0, 0, count, 0);
下面是我写的这个软件的
public Form1()
{
InitializeComponent();
}
private static int count = -100;//鼠标上下滚动的距离
private int state = 1;//记录鼠标是向上还是向下滚动
private int int_X;//鼠标点击的坐标的X
private int int_Y;//鼠标点击的坐标的Y
private int time=0;//记录执行的时间
private int move_long = 0;
private int settime = 0;
private int clickCount = 5;
private void Form1_Load(object sender, EventArgs e)
{
//每过100毫秒获取鼠标坐标,用于获取鼠标点击地方的坐标
timer2.Enabled = true;
timer2.Interval = 100;
}
[DllImport("user32.dll")]
static extern void mouse_event(int flags, int dX, int dY, int buttons, int extraInfo);
const int MOUSEEVENTF_MOVE = 0x1;//模拟鼠标移动
const int MOUSEEVENTF_LEFTDOWN = 0x2;//
const int MOUSEEVENTF_LEFTUP = 0x4;
const int MOUSEEVENTF_RIGHTDOWN = 0x8;
const int MOUSEEVENTF_RIGHTUP = 0x10;
const int MOUSEEVENTF_MIDDLEDOWN = 0x20;
const int MOUSEEVENTF_MIDDLEUP = 0x40;
const int MOUSEEVENTF_WHEEL = 0x800;
const int MOUSEEVENTF_ABSOLUTE = 0x8000;
//模拟鼠标滑动事件
private void timer1_Tick(object sender, EventArgs e)
{
time++;//事件执行次数
clickCount++;
txt_content.Text = clickCount.ToString();
if (clickCount < 4)
{
//控制鼠标移动到坐标((int_X + 100) * 65536 / 1366, (int_Y + move_long) * 65536 / 768)这个绝对位置上。1366和768是电脑屏幕的分辨率,我的电脑是1366*768的分辨率
//分辨率要根据自己的电脑设置正确,不然获取到的坐标不准确。
mouse_event(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE, (int_X + 100) * 65536 / 1366, (int_Y + move_long) * 65536 / 768, 0, 0);
}
if (clickCount == 4)
{
//鼠标在原地左键点击一次(点下和松开)
mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
time = 1;
txt_content.Text = clickCount.ToString()+":点击事件";
return;
}
if (time % (settime / 3) == 0)
{
mouse_event(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE, int_X * 65536 / 1366, (int_Y) * 65536 / 768, 0, 0);
mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
clickCount = 0;
time = 1;
}
else
{
if (state == 1)
{
count = 100;//
}
else
{
count = -100;//负数代表向下移动
}
//控制鼠标滑轮滚动,count代表滚动的值,负数代表向下,正数代表向上,如-100代表向下滚动100的y坐标
mouse_event(MOUSEEVENTF_WHEEL, 0, 0, count, 0);
if (state == 1)
{
state = 0;
}
else
{
state = 1;
}
}
}
private void btn_start_Click(object sender, EventArgs e)
{
timer2.Enabled = false;
timer1.Enabled = true;
move_long = int.Parse(txt_long.Text);
settime = int.Parse(txt_time.Text);
int_X =int.Parse(txt_X.Text);
int_Y = int.Parse(txt_Y.Text);
timer1.Interval = 3000;
}
//停止按钮
private void btn_end_Click(object sender, EventArgs e)
{
timer1.Enabled = false;
timer1.Interval = 3000;
}
//获取鼠标的位置
private void timer2_Tick(object sender, EventArgs e)
{
textBox1.Text= Cursor.Position.X.ToString();
textBox2.Text = Cursor.Position.Y.ToString();
}
记录下了第一次编写了一个可以为自己服务的一个小程序,感觉还是非常开心的。(刷金币的行为是不值得的,回报很少而且浪费精力。发表这篇博客只是为了和大家分享一些知识和我能够通过自己的写程序满足自己的想法的喜悦。)