Autohotkey 较慢设置DefaultMouseSpeed上的对角线不准确

Autohotkey 较慢设置DefaultMouseSpeed上的对角线不准确,autohotkey,Autohotkey,我有一个AHK脚本,可以将矢量文件转换为鼠标移动和单击。 SVG源文件示例: 下一幅图像是我在脚本上以常规鼠标速度运行上一幅图片的SVG时在MS PaintBrush上获得的输出: 正如我们在青色线条上所注意到的,它看起来不错。现在(在下一张图片的粉红色线条上)我面临的问题如果我将SetDefaultMouseSpeed更改为100: 我需要降低鼠标速度,使其在落后的在线应用程序上工作,但线路变得弯曲。为了解决这个问题,我目前使用的是SetMouseDelay。我的问题是:有没有一种方法可

我有一个AHK脚本,可以将矢量文件转换为鼠标移动和单击。 SVG源文件示例:

下一幅图像是我在脚本上以常规鼠标速度运行上一幅图片的SVG时在MS PaintBrush上获得的输出:

正如我们在青色线条上所注意到的,它看起来不错。现在(在下一张图片的粉红色线条上)我面临的问题如果我将
SetDefaultMouseSpeed
更改为100:

我需要降低鼠标速度,使其在落后的在线应用程序上工作,但线路变得弯曲。为了解决这个问题,我目前使用的是
SetMouseDelay
。我的问题是:有没有一种方法可以使用更高的
SetDefaultMouseSpeed
值而不获取这些弯曲的对角线?

以下是有关此问题的最基本代码:

SendMode Event  

$F1::
SetDefaultMouseSpeed, 2
SetMouseDelay, 10   

Mousemove, 159, 180
Send {Click Down}
Mousemove, 188, 168
Mousemove, 217, 159
Mousemove, 249, 155
Send {Click Up}

return

$F2::
SetDefaultMouseSpeed, 100
SetMouseDelay, 10   

Mousemove, 159, 180
Send {Click Down}
Mousemove, 188, 168
Mousemove, 217, 159
Mousemove, 249, 155
Send {Click Up}

return
这是MS PaintBrush上的最小示例结果(右侧为缩放版本):


平滑的黑线是F1按键(默认鼠标速度)的结果,弯曲的粉红线是F2按键(速度降低)的结果。

问题可能是脚本交互的UI响应不够。那样的话,你就无能为力了。我的意思是除了关闭后台进程或升级硬件之外。
你可能想试着用鼠标移动来代替鼠标移动等等。这样你就可以在背景中进行,这样你至少可以在画图的时候做其他的事情

您可以尝试的另一件事是只使用并发送您想要设置的每个像素的点击。不过,你可能需要做一些基本的插值数学

还有一个,你可以用它来确定像素是否已经被画出来了

但最终,您最好还是搜索一个简单的转换器工具/库。我的意思是,在一天结束时,您只是将SVG转换为位图

我的建议是:
获取ImageMagick,然后您可以简单地从ahk脚本运行:
run,magick convert test.svg test.png
,或者在命令行中键入
magick convert test.svg test.png
。我认为Inkscape有类似的命令来做类似的事情

编辑: 您可以尝试使用PostMessage发送鼠标单击/移动事件。该行为与ControlClick非常相似,但您也可以通过这种方式移动鼠标。
例如

x:=159
y:=189
;沃尔布顿镇

PostMessage,0x201,0,x&0xFFFF | y这里是另一个想法。您提到要将鼠标事件发送到网站。因此,使用浏览器的开发工具在网站上触发鼠标事件可能更快、更可靠。 你提到了anondraw.com,所以我尝试了一下,它似乎奏效了

  • 在浏览器中转到网站
  • 按F12打开开发人员工具
  • 单击开发人员工具中的console选项卡
  • 现在将以下代码粘贴到其中并按enter键
加载一些库:

//This first part is not necessary in this case because the website already uses jquery
//var script = document.createElement('script');
//script.src = 'http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js';
//document.head.appendChild(script); 

//Load some scripts to make simulating mouse events easy
$.getScript('http://j-ulrich.github.com/jquery-simulate-ext/jquery.simulate.js')
$.getScript('http://j-ulrich.github.com/jquery-simulate-ext/jquery.simulate.ext.js')
$.getScript('http://j-ulrich.github.com/jquery-simulate-ext/bililiteRange.js')
$.getScript('http://j-ulrich.github.com/jquery-simulate-ext/jquery.simulate.key-sequence.js')
$.getScript('http://j-ulrich.github.com/jquery-simulate-ext/jquery.simulate.key-combo.js')
$.getScript('http://j-ulrich.github.com/jquery-simulate-ext/jquery.simulate.drag-n-drop.js')
现在复制粘贴以下代码并按enter键:

//Simulate mouse events to draw stuff
$('.paint-canvas').simulate("mousedown", {clientX: 188, clientY: 168});
$('.paint-canvas').simulate("mousemove", {clientX: 188, clientY: 168});
$('.paint-canvas').simulate("mousemove", {clientX: 217, clientY: 159});
$('.paint-canvas').simulate("mousemove", {clientX: 249, clientY: 155});
$('.paint-canvas').simulate("mouseup", {clientX: 249, clientY: 155});

// (paint-canvas is the class name of the element in which you want to draw)

这里的问题是假设AHK如何移动鼠标。鼠标只是从原点移动到目的地。所提供的代码中没有要求在较高速度或较低速度下形成平滑曲线;这就是AHK的工作原理。如果您想以更高的速度添加平滑度,那么您可能需要在代码中添加更多的点来解释AHK的行为。但您可能仍然会遇到勘误表,因为该行为并不适用于这些平滑圆弧。只需自动化一个已经能够光栅化SVG文件的程序,或使用类似Python的语言,可能会更容易。关于UI,我曾尝试使用该脚本在不同的应用程序中绘制,结果总是一样的,不管当前用户界面如何。关于ControlClick(在后台运行),我知道,但不幸的是,AutoHotKey没有在后台移动的功能(仅单击)。然后,如果我点击每个像素,它会在背景中工作,但速度会非常慢(我确实尝试过)。它不是图像转换器:我的脚本可以在anondraw.com等网站上绘制,而ImageMagick在此类应用程序中无法工作。在我的回答中添加了更多的想法。1-感谢这些想法,我很抱歉刚才在给出的示例中发现了一个错误:我编写了
发送模式输入
,而它应该是
SendMode事件
(现已修复)。2-我正在尝试使用你的PostMessage代码,但它不起作用,我会继续尝试,如果我得到任何结果,我会给你反馈。你的意思是
单击Down
而不是
发送{Click Down}
?是的,但问题还是一样;嘿,我现在正在尝试这个,但是(画布上什么也没有发生)。由于错误提到了“跨源”,我认为这是因为脚本位于不同的域(不在anondraw服务器中)。首先运行所有$.getScript行。然后运行其余的。并确保你已经选择了网站上的绘图工具。我仍然得到错误;我在Chrome和Firefox上都试过了;我还试图一行一行地粘贴它,但再次出现同样的错误“UncaughtDomeException:阻止一个源代码为'anondraw.com'的帧访问跨源代码的帧”。我在Chromium和Firefox中尝试过。对我来说很好。没有错误。我的浏览器是。您是否使用了可能导致此问题的插件?为了澄清,我关闭了弹出消息,改为画笔工具,粘贴$.getScript行,按enter键,粘贴其余代码,按enter键。=>画线了。是的,我做了完全相同的,但我在按Enter键后收到错误消息,而且我没有在画布上画任何东西。Windows 10 Chrome 58.0.3029.110上的即时通讯
//Simulate mouse events to draw stuff
$('.paint-canvas').simulate("mousedown", {clientX: 188, clientY: 168});
$('.paint-canvas').simulate("mousemove", {clientX: 188, clientY: 168});
$('.paint-canvas').simulate("mousemove", {clientX: 217, clientY: 159});
$('.paint-canvas').simulate("mousemove", {clientX: 249, clientY: 155});
$('.paint-canvas').simulate("mouseup", {clientX: 249, clientY: 155});

// (paint-canvas is the class name of the element in which you want to draw)