点赞圣鼠-鼠标连点器超级加强版
**** Hidden Message *****
现存问题
目前随机坐标和模拟真实鼠标移动轨迹问题没解决(算法问题)
目前还不会生成时自动复制所需的运行库文件
没有加入最小化到右下角状态栏功能
主要功能/动作
1.软件关闭后会在程序目录生成两个文件
default.dspt
软件关闭时自动写入,保存当前的配置参数
Language.ini
不存在则根据默认参数生成
存在则只在软件启动时读取
修改后可以重启软件加载,主要是为了验证多国语言的可行性(Diy)
2.支持保存和加载配置文件
可以将当前的配置参数保存成文件,需要时加载
扩展名为 *.uspt
3.关于鼠标/键盘控制
显示鼠标坐标和鼠标按键状态采用Form的Control类自带的方法完成
因为Control类只支持键盘的Ctrl,Shift,Alt这三个键的按键状态监测
鼠标移动使用user32.dll的SetCursorPos
鼠标点击使用user32.dll的SendInput
因为使用了这两个系统自带API,所以安全软件可能会提醒(报毒)
使用方法
1.设置参数
2.点击激活按钮
3.鼠标移动到需要点击的位置
4.根据设置的组合热键启动
5.鼠标右键强制停止运行
有统计点击次数
寻求帮助
1.关于随机坐标和移动轨迹算法
DianZan.MainForm的C4MouseMoves()方法
private void C4MouseMoves()
{
//获取随机坐标数据
int mxa = C5RandomValue(RdType.mos鼠标X偏移);
int mya = C5RandomValue(RdType.mos鼠标Y偏移);
int resultX = cInt.StartPosX + mxa;
int resultY = cInt.StartPosY + mya;
resultX = Math.Abs(resultX);
resultY = Math.Abs(resultY);
//计算鼠标轨迹
Point pn = Control.MousePosition; //获取当前鼠标坐标
int shiftX = resultX - pn.X; //X坐标差值
int shiftY = resultY - pn.Y; //Y坐标差值
shiftX = shiftX == 0 ? 1 : shiftX;
shiftY = shiftY == 0 ? 1 : shiftY;
double k = Math.Abs(shiftX) / Math.Abs(shiftY); //计算斜率
int maxPix = k > 1 ? shiftX : shiftY; //确定最大参考值
int mspeed = 3; //移动速度
for (int n = 1; n <= maxPix; n += mspeed)
{
int stepX, stepY, toX, toY;
if (k > 1)
{
stepX = n; //X距离大于Y距离
stepY = (int)Math.Round(n / k, 0);
}
else
{
stepY = n; //X距离小于等于Y距离
stepX = (int)Math.Round(n * k, 0);
}
stepX = Math.Abs(stepX);
stepY = Math.Abs(stepY);
if (shiftX > 0)
{
toX = pn.X + stepX; //向右移动,正方向
}
else
{
toX = pn.X - stepX; //向左移动,负方向
}
if (shiftY > 0)
{
toY = pn.Y + stepY; //向下移动,正方向
}
else
{
toY = pn.Y - stepX; //向上移动,负方向
}
//toX = shiftX > 0 ? pn.X + stepX : pn.X - stepX;
//toY = shiftY > 0 ? pn.Y + stepY : pn.Y - stepY;
//上面这两行代码与上面代码等效
//移动鼠标
ApiMouseMethod.MouseMove(toX, toY);
Thread.Sleep(3);
if (!cBool.RunStatus) { return; }
}
ApiMouseMethod.MouseMove(resultX, resultY);
}
获取的鼠标坐标基于基准坐标或者都是正数,或者都是负数,这是为啥?
有没有可参考的计算平面两个点之间的经过直线的近似点的循环算法?
2.关于参数文件
有没有可参考的标准配置文件读写样例代码
3.压缩包里面的图片
谁帮忙把中间白色替换成红色,绿色,黄色,我想作为状态栏状态显示,这样就可以在软件最小化的时候判断运行状态了,我美工技术空白,还请美工的大神们帮忙处理一下,重新画一个好看的也行,嘿嘿
获取的鼠标坐标基于基准坐标或者都是正数或都是负数,是因为代码中使用了Math.Abs方法对计算结果进行了绝对值处理。
在代码中,计算鼠标轨迹时,首先获取起始点的坐标pn,然后计算出目标点的坐标toX和toY。在计算toX和toY时,根据shiftX和shiftY的正负值来确定鼠标移动的方向,正值表示向右或向下,负值表示向左或向上。使用Math.Abs方法对stepX和stepY进行绝对值处理,确保步长为正数。这样就保证了获取的鼠标坐标要么都是正数,要么都是负数。
对于计算平面两个点之间经过直线的近似点的循环算法,可以参考以下实现:
获取起始点的坐标为(x1, y1)和目标点的坐标为(x2, y2)。
计算两点之间的水平和垂直距离,即dx = x2 - x1和dy = y2 - y1。
计算斜率k = dy / dx。
确定两个距离dx和dy中的绝对值较大的作为循环次数,假设为steps。
计算每一步的增量值,即stepX = dx / steps和stepY = dy / steps。
初始化当前点坐标为起始点,即currentX = x1和currentY = y1。
循环计算近似点的坐标,并进行相应操作或显示,即for(int i = 1; i <= steps; i++),计算当前点的坐标为(currentX + i * stepX, currentY + i * stepY)。
在循环结束后,将目标点的坐标设为最后一个计算得到的近似点的坐标。
这个算法使用步长实现了经过直线的近似点的计算,可以根据需求进行适当调整和优化。 6666666666666666666
页:
[1]