我有一个使用 Ctrl + j 运行的脚本
mongod
(mongo服务器)mongo
(mongo数据库)npm start
(启动节点的网络服务器)localhost:3000
。 每个任务必须在下一个任务开始之前就绪。例如,mongod
是mongo服务器,因此如果mongo
在服务器准备就绪之前启动,则会发生错误。
这是我的剧本:
// Start or stop mongod, mongo, node
^j::
IfWinNotExist, npm // start everything up. This must be done in order, but the timing varies.
{
// Start the mongo server
Run, mongod.exe
WinGet, active_id, ID, A // Get the id of the window
GroupAdd, One, ahk_id %active_id% // Add the window to a new Group so we can minimize them all later
Sleep 1000 // This works, but the time varies. I'd like to replace it
// Start the mongo database
Run, mongo.exe
WinGet, active_id, ID, A
GroupAdd, One, ahk_id %active_id%
Sleep 1000 // I'd like to replace this
// Start the node server
Run, cmd.exe
Sleep 100
send, cd webroot{\}{enter}
Sleep 300
send, npm start{enter}
WinGet, active_id, ID, A
GroupAdd, One, ahk_id %active_id%
Sleep 1000 // I'd like to replace this
// Minimize all the cmd windows
WinMinimize, ahk_group One
// Always opens a new tab - but that's for another question...
Run, chrome.exe http://localhost:3000
} else { // shut everything down if they're already running
SetKeyDelay, 400
ControlSend, ,^cy{enter}, npm
SetKeyDelay, -1
Sleep 1000
WinClose, ahk_class ConsoleWindowClass
SetTitleMatchMode 2
ControlSend, ,^c, mongo
Sleep 1000
WinClose, ahk_class ConsoleWindowClass
ControlSend, ,^c, mongod
SetKeyDelay, 200,
Sleep 1000
WinClose, ahk_class ConsoleWindowClass
}
Return
// Bonus for anyone that's interested in using this script.
// Recycle the node server in the background
!`::
SetKeyDelay, 200
ControlSend, ,^c y{enter} npm start{enter}, npm
Return
<小时/> 编辑:更改了代码的结构,使重要部分更靠近顶部。
答案 0 :(得分:1)
根据我的评论,请尝试:
...
SetKeyDelay, 400
ControlSend, ,^cy{enter}, npm
SetKeyDelay, -1
Sleep 1000
WinClose, ahk_class ConsoleWindowClass
WinWaitClose, ahk_class ConsoleWindowClass, , 3
SetTitleMatchMode 2
ControlSend, ,^c, mongo
Sleep 1000
WinClose, ahk_class ConsoleWindowClass
WinWaitClose, ahk_class ConsoleWindowClass, , 3
...
H个
答案 1 :(得分:0)
在AutoHotkey脚本中,一些替换Sleep的方法是:
- WinWaitActive或WinWait(&#39;赢得等待存在&#39;)
- 通过Run命令检索创建过程的PID
e.g。
DetectHiddenWindows, On
Run, mongod.exe, , , vPID1
WinWaitActive, ahk_pid %vPID1%
WinGet, hWnd1, ID, ahk_pid %vPID1%
Run, mongod.exe, , , vPID2
WinWaitActive, ahk_pid %vPID2%
WinGet, hWnd2, ID, ahk_pid %vPID2%
;then later
WinMinimize, ahk_id %hWnd1%
WinMinimize, ahk_id %hWnd2%
AutoHotkey擅长做蝙蝠文件所做的一切, 例如,如果可以检索StdOut。 一般来说,您不需要打开cmd.exe并输入内容。
您可以使用cmd.exe(ComSpec)并指定路径/目标 此示例选择文件夹中的文件 (在Windows 7上测试过。)
vPathNotepad = C:\Windows\System32\notepad.exe
Run, %ComSpec% /c explorer.exe /select`, "%vPathNotepad%",, Hide
注意:需要在带有反引号的“运行”命令中转义文字逗号, 但是当分配变量时,请注意单词&#39;选择&#39;之后的反引号。以上,但不低于。
或者更容易遵循重写:
vPathNotepad = C:\Windows\System32\notepad.exe
vTarget = %ComSpec% /c explorer.exe /select, "%vPathNotepad%"
Run, %vTarget%,, Hide
如果您想要一个进程运行,并等待它终止, 在做任何其他事情之前,您可以使用RunWait而不是Run e.g。
vPath = C:\webroot\npm.exe ;or whatever the path is
RunWait, %vPath%
也可以在窗口隐藏/最小化的情况下启动进程。 e.g。
Run, %vPath%, , Hide
Run, %vPath%, , Min
RunWait, %vPath%, , Hide
RunWait, %vPath%, , Min
mongo和mongod,命令行还是GUI? 如果它们是GUI,则可能存在可以检测到的其他内容, 确定要做什么,例如从控件中检索文本。
[编辑:]
有用的链接:
在每个文件和(子)文件夹上运行命令行工具,甚至包含空格的文件夹 - AutoHotkey社区
https://autohotkey.com/boards/viewtopic.php?f=5&t=26819
关于Chrome,&#39; 始终打开一个新标签 - 但这是另一个问题...... &#39;,我写的一些功能:
Firefox / Chrome,获取标签名称/焦点标签 - AutoHotkey社区
https://autohotkey.com/boards/viewtopic.php?f=6&t=26947&p=126248#p126248