V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
chenqh
V2EX  ›  程序员

ahk 的脚本好难写啊

  •  
  •   chenqh · 2022-11-08 17:00:23 +08:00 · 1959 次点击
    这是一个创建于 621 天前的主题,其中的信息可能已经有所发展或是发生改变。

    一点都不好调

    关键还是 sleep

    要 sleep 多次才好呢

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

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

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

    12 条回复    2024-07-21 15:21:41 +08:00
    hxy100
        1
    hxy100  
       2022-11-08 17:57:17 +08:00   ❤️ 2
    sleep 的目的是啥,如果是需要等待窗口可用来做相关的操作,有很多函数可以用( WinWait 、WinWaitActive / WinWaitNotActive 、WinWaitClose )其他情况也可以对症下药
    Thiece
        2
    Thiece  
       2022-11-08 18:05:42 +08:00   ❤️ 1
    和 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
        3
    chenqh  
    OP
       2022-11-08 19:22:04 +08:00
    @Thiece 不是这个问题, 是调用其他程序功能的问题
    chenqh
        4
    chenqh  
    OP
       2022-11-08 19:23:19 +08:00
    @Thiece 比如我调用 ctrl+shift+p 调用一个功能,我怎么知道这个功能做完了呢,不 sleep 怎么办?

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

    ---

    至于执行顺序,加大时间呗,比如一个 250 ,还能骂它,哈哈。

    不论何种工具,自动化脚本肯定会有许多问题,要完美执行,就要有完美的环境条件。

    具体问题,如何检测 vscode 的命令面板已经弹出?

    方法多了,不止一种哦。

    随便说一种,用扩展魔改 vscode ,注入用户脚本,上 mutationobserver / settimer 在面板弹出之时,修改标题,ahk 检测到标题,就说明面板弹出了。

    再说一种 ,findimage 检测特征图像

    再说一种 ,acc 检测特征辅助文本

    ……

    ---


    你以为的走投无路,其实是多歧亡羊。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5704 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 01:59 · PVG 09:59 · LAX 18:59 · JFK 21:59
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.