×用微信扫描并分享

AHK 快餐店 – 开机自动运行程序的延迟启动[绿色版]

46
1 Star2 Stars3 Stars4 Stars5 Stars(快来投票)
Loading...

# 对于我上次那篇噱头文深感抱歉。

火山我的 PC 一开机就自动运行很多程序:strokeitGtalkAutoHotKey(N 个 ahk),ClclUberIcon……当瘟倒死一起把它们都启动的时候,硬盘一阵狂响。

我也听说过能让开机自动运行程序的延迟启动的小软件,一直懒得去找,今天灵感就在硬盘狂响声中迸发出来了。

先来看代码,这个代码太赞了:

folder = F:\Run

Loop, %folder%\*.lnk
{
runwait %folder%\%A_LoopFileName%
; runwait 命令,等一个程序启动完成之后再循环启动下一个程序,直到循环自动退出。
}

ExitApp
; 自动退出

我们只需要把那些开机自动运行的程序快捷方式放到 F:\run 就可以了,然后用超级兔子之类的程序去掉它们的自动运行,把这个 AHK 拖到“开始 – 运行”就可以了。

这样做有三个好处:

1、启动速度加快,这个是从心理上来说,我没有进行详细的测试,- -。欢迎大家留言说说使用后感觉如何。

2、以后重装系统的话,只要把这个 AHK 加入启动菜单。如果你经常看小众软件的话,我想大家手头的软件大部分都是绿色版的吧?

3、排序启动。把快捷键方式按照你想要的顺序命名就可以了,可以按照 A-Z,也可以在快捷方式的名字前面加数字。

另外,这样的代码只适合 AHK fans,对于不想用 AHK 的朋友我又重新写了一个可以配置的绿色版,RunSetting.ini 是配置文件,里面有注释。代码全部可以在下面的任意地址下载:

下载1|来自小众|下载2

×用微信扫描并分享

已有 46 条评论, 我要留言

  1. 悠悠南风说道:

    看不懂啊……

  2. 朱仔明说道:

    我也是看不明白.

  3. sfufoet说道:

    请从头开始看 AHK 系列文章:http://www.appinn.com/search/ahk

  4. 路人甲说道:

    用过那个启动延时的软件,不过偶来还是删了。主要觉得为了启动这点儿事儿还装个程序,把系统拖累的更慢了。不过貌似那个程序比这个脚本更完善一些。比较重要的,比如支持暂停,也就是你着急开机干点儿什么,可以把所有不必要的启动程序先暂停一下,等有空了再resume.

  5. scavin说道:

    赞。。。

  6. 天堂之门说道:

    可以把它改成等待启动多个程序

  7. Fantasy OnLine说道:

    这个也太 简单了点,
    如果里面有一个程序启动失败,
    那么下面的也启动不了了!

  8. […] AHK 快餐店 – 开机自动运行程序的延迟启动[绿色版] [小众软件 – Appinn] […]

  9. Mr.z说道:

    你写的那个软件
    在我机子上运行不了啊
    不知道是什么原因

    • sfufoet说道:

      请问你运行的是 Run2.exe 吗?请先看 RunSetting.ini 里面的注释。

  10. msmouse说道:

    用runwait可以吗?这个不是要等前一个程序退出才会继续的吗?很多启动程序是不会立即退出的吧

    没用过ahk,猜测而已。。

    • sfufoet说道:

      :)

      没用过的话,请不要乱猜。

      我的写的每一个脚本都是进行过详细测试。没成功的话,就发布是不是太对不起小众的读者?

      • tolbkni说道:

        @sfufoet, 确实,这里用 RunWait 有问题,像 @msmouse 说的,要等到前一个程序结束才会启动下一个程序。暂时只能用 Run 配合 Sleep ,有没有同学有更合适的写法。

  11. poison说道:

    我把那个代码的ahk文件也创建了一个快捷方式,放到f:\run里面去了,于是开机的时候恐怖的事情发生了~~~~~~~~~~~~~~
    太恐怖了~~~~~~~~~~~~~~~

  12. poison说道:

    就是成为一个死循环了~~~~~变成递归启动了

    • sfufoet说道:

      怪我没看清楚你的上一个评论,你把 AHK 也放进去的结果只能是递归。

      我还以为我的脚本出问题了。:)

  13. qinyafei说道:

    其实…… 和*nix下的/etc/init.d/rc*的原理是类似的吧

  14. shinwoo说道:

    火山你好,我请问一下,如果需要设定开机5秒后才开始运行所有得快捷方式应该如何修改命令,因为是DHCP的网络,开机会有DHCP获取IP地址的一段时间,如果这个时候程序陆续运行,有部分网络程序会造成假死,另外,请问哪里有比较齐全得AHK中文命令帮助?看了几篇教程比较感兴趣,想系统的学习一下。

    • sfufoet说道:

      在这句“folder = F:\Run”下面加上:

      sleep 5000
      睡眠 5000 毫秒,就是暂停 5 秒。

      比较入门的只有这个:
      汉化了一部分的 AutoHotKey 帮助文件 – 入门 AutoHotKey 必备

      这里下载。http://www.box.net/shared/qnay28xn7s

      由 yonken 汉化。

  15. shinwoo说道:

    好快得回复速度……难道订阅了最新回复的RSS……
    我现在先下载教程看一下,等搞明白AHK的基本操作后后再慢慢请教。

  16. sfufoet说道:

    新评论会以邮件发送给我,再加 Gtalk。:)

  17. JERRY说道:

    我也写了个小软件,用ini文件于管理启动程序的顺序,延迟时间,以及需要填的密码口令,呵呵

  18. sfufoet说道:

    能把代码贴到这里来吗?:)

  19. riceking说道:

    火山你好,ahk里有获得当前路径的命令么?我的ahk是英文的,读了便help文档,没有找到。
    背景是这样的,我想用win+q在当前路径下”新建文件夹“,脚本如下:
    #q:: ;新建文件夹
    send {RButton}wf
    return
    但上述脚本我基本是模仿鼠标操作进行的,没有普遍性,要新建个txt,该套机制就不行了。所以想换个思路:run new.txt–>获取当前路径值–>保存 new.txt于当前路径。
    顺便再问一句,国内有较好的ahk论坛么?我现在只知道上http://www.autohotkey.com/
    谢谢

    • sfufoet说道:

      获取当前文件夹的是没有这样的功能的。

      最简单的办法,模拟键盘操作:

      alt + d Ctrl + c 就可以把地址栏的地址复制到剪贴板(用 path=%clipboard%,就可以获得剪贴板),然后来个 filecopy 命令。

      其实还可以模拟键盘的操作,send {RButton}w{up 8}{enter}
      {up 8} 就是发送多少次向上键,根据你的右键菜单进行设置。

      国内没有什么 ahk 论坛。

      我建立了一个 ahk group :http://groups.google.com/group/autohotkey-appinn

    • Fantasy OnLine说道:

      那还用说
      http://groups.google.com/group/autohotkey-appinn
      这里么,你要的脚本都有!

    • riceking说道:

      方法一我这就试试,至于方法二:send {RButton}w{up 8}{enter},由于我宿舍,实验室加起来有三四台电脑,up8没什么可移植性。
      总之,非常感谢。

  20. 说道:

    我记得有个CMD下的START命令有个参数也有这个功能……可以写个CMD或者BAT嘛……

    • sfufoet说道:

      start 有个参数是“WAIT”作用是启动应用程序并等候它结束。它和 ahk 这个命令不一样的。

      这篇是专门介绍 ahk 的教程。

    • 说道:

      = =想起来了,那个参数是要等前一个程序结束后再运行下一个程序,确实与这个要实现的不一样,抱歉呃

    • sfufoet说道:

      没事,谁都会失误啦。

  21. 自言自语说道:

    我想在每次启动AHK的时候自动运行一些程序,,就加进了这样的语句:

    folder = F:\outil\Links\Run
    Loop, %folder%\*.lnk
    {
    runwait %folder%\%A_LoopFileName%
    }
    ExitApp

    可是为什么启动AHK之后并没有自动运行这里边的程序呢??

  22. 自言自语说道:

    这个文件夹里边确实是lnk文件啊。。

  23. […] 下面又酷酷地拿了我的开机自动运行程序的延迟启动,再把33世界的移动文件或文件夹至目标路径-AutoHotkey脚本改头换面,和帅帅滴拿了关闭显示器-AutoHotkey脚本。 […]

  24. DemoJameson说道:

    感觉 Runwait 运行 lnk 用起来和 Run 命令一样,启动进程后就马上执行下一句了。
    Runwait 的正确作用是等待运行的程序结束才继续向下运行。
    如:
    Runwait, notepad
    Msgbox, notepad have been closed

  25. 黑色柳丁说道:

    火山你好,我试验了这个延迟启动方案,并且根据自己需要写了代码,效果很好,但是我发现一些问题:
    1.启动顺序不是按照名称排序。在我的电脑上就是按照1,3,2这样的顺序启动(以msgbox判定的),似乎有其他的排序依据。有需要按照固定顺序启动的童鞋可以吧快捷方式剪切出去再放回来,顺序就会改变,但是没发现固定的规律。
    @自言自语2.关于那个lnk启动不了,我也发现过,如果你通过修改把快捷方式上的小箭头图标去掉,AHK就认不出快捷方式了,不知道什么原因 :(。
    @DemoJameson 3.这个问题我也发现了 runwait似乎确实是执行完程序就执行下一句,我想这也许是和咱们是通过执行快捷方式而不是原程序来执行有关。可以通过添加sleep来解决,对于需要延迟时间长些的程序还可以利用if语句单独处理。

    暂时发现的就这些问题了,我还想问一下AHK有没有结束进程的语句?我是想通过一个快捷键来开关一些小程序,既按一下启动,再按一下结束,不知道火山有没有什么思路啊?

    最后祝愿小众越搞越好,真是太喜欢你们的网站了!呱唧呱唧~~~

    • sfufoet说道:

      @黑色柳丁, 是按照字母排列的,数字方面没注意过。其实也没所谓了。要提前就全部加 0。

      结束进程可以用:Process, Close, %active_id%

      active_id 请替换为实际变量。在启动软件的时候,可以获得。比如:Run Notepad.exe, , , active_id

      • 黑色柳丁说道:

        @sfufoet, 多谢点拨!一键开关程序实现了,代码如下
        #c::
        {
        Process,exist,FastStone Capture.exe
        if ErrorLevel
        winclose,FastStone Capture
        else
        run E:\greed soft\FastStone capture\FastStone Capture.exe
        return
        }
        这里我用的是winclose 因为发现Process, Close是结束进程强制退出,会出现很多问题(未刷新托盘区,退出无提示等)
        对于像记事本这种标题会改变的窗口则这样写

        if ErrorLevel
        {
        ;部分匹配模式
        SetTitleMatchMode, 2
        ;关闭含有”记事本”字样的窗口
        winclose,记事本
        }

        关于那个启动顺序我再试试,因为我这边校园网要先启动一个客户端才有网络,所以那个流氓软件必须得先启动才行…

      • 黑色柳丁说道:

        @sfufoet, 厄 俺刚刚的回复被HX了?

    • sfufoet说道:

      @黑色柳丁, 评论放出来了。加个 0 在前面就行了。绝对是第一个启动的。

  26. linuxfan说道:

    在我的 win7 ultimate 32 sp1 不能正常运行,必须等上一个程序进程结束才能运行下一个程序,把 runwait 改成 run 就完美运行了!

有不同想法?说说看(首次评论会被人工审核,请耐心等待)