ahk 的脚本好难写啊

2022-11-08 17:00:23 +08:00
 chenqh

一点都不好调

关键还是 sleep

要 sleep 多次才好呢

之前 sleep 100 够了,偶尔 100 又不行了,

改成 200 好了,OK,突然 cpu 升高 200 就不行了,

啊啊啊,撞墙的冲动油然而生

1856 次点击
所在节点    程序员
11 条回复
hxy100
2022-11-08 17:57:17 +08:00
sleep 的目的是啥,如果是需要等待窗口可用来做相关的操作,有很多函数可以用( WinWait 、WinWaitActive / WinWaitNotActive 、WinWaitClose )其他情况也可以对症下药
Thiece
2022-11-08 18:05:42 +08:00
和 Python 一样的问题,都是调用操作系统中计时系统的精确度,导致毫秒级计时精度问题;

在以下条件下, 计时器可能无法按预期时间运行:
1 、其他程序让 CPU 高负载.
2 、计时器子程序本身在计时器周期到期时仍在运行(定时子程序运行的时间超过它自己的周期), 或者有太多竞争计时器(改变 SetBatchLines 可能有帮助).
3 、计时器已经被另一个线程中断, 即另一个定时子程序, 热键子程序或自定义菜单项(这可以使用 Critical 避免). 如果这种情况发生了并且中断的线程需要很长时间才能结束, 则在此期间将有效地禁用中断的计时器. 不过, 任何其他计时器会对这个中断首个计时器的线程进行中断来继续运行.
4 、使用 Critical 或 Thread Interrupt/Priority 后脚本会变成不可中断的. 在这样的时期, 计时器不会运行. 之后, 当脚本恢复可中断时, 任何过时的计时器会尽快运行一次然后恢复到正常的调度.

AHK 的解决方案:
https://wyagd001.github.io/zh-cn/docs/commands/Sleep.htm#ShorterSleep
chenqh
2022-11-08 19:22:04 +08:00
@Thiece 不是这个问题, 是调用其他程序功能的问题
chenqh
2022-11-08 19:23:19 +08:00
@Thiece 比如我调用 ctrl+shift+p 调用一个功能,我怎么知道这个功能做完了呢,不 sleep 怎么办?

比如我 win+2 切换到 vscode,然后我 click,然后 ctrl+end 到文件结尾,不 sleep 不行啊
chenqh
2022-11-08 19:25:18 +08:00
@hxy100 比如我 vscode 调用命令,怎么办?
Thiece
2022-11-09 09:10:42 +08:00
@chenqh
这种要么你做个可以通讯的接口要么你用类似 Python ORB 这样的图形识别做判断。
chenqh
2022-11-09 09:31:34 +08:00
@Thiece 太难了,我选择摆 TMD
haoliang
2022-11-09 11:23:50 +08:00
我之前写过一个暗黑 3 一键分解背包中装备的 ahk 脚本,当时是通过循环监视特定位置的颜色来做的,不过由于写死了坐标,还需要对不同的分辨率做适配(就我自己用,也就不管了)。
lookStupiToForce
2022-11-09 16:49:34 +08:00
难写何不试试 quicker
不过不知道 quicker 对于步骤生效的判定对比 ahk 如何,我是没出现过上一个步骤没执行完就马上下一个步骤然后报错的情况
chenqh
2022-11-09 19:36:13 +08:00
@haoliang 我肯定也不管分辨率啊,都是自己用的
chenqh
2022-11-09 19:37:51 +08:00
@lookStupiToForce 过几天再研究这个吧

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/893618

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX