AHK 脚本在 C:\ 目录中不打开终端,但在其他目录中打开
AHK Script doesn't open terminal in C:\ Directory, but does in others
首先是我的代码:
#t::
IfWinActive, ahk_class CabinetWClass ; If explorer is active
{
path := GetActiveExplorerPath()
Run wt.exe -d "%path%"
}
else
{
Run wt.exe
}
Return
;
GetActiveExplorerPath() {
explorerHwnd := WinActive("ahk_class CabinetWClass")
if (explorerHwnd)
{
for window in ComObjCreate("Shell.Application").Windows
{
if (window.hwnd==explorerHwnd)
return window.Document.Folder.Self.Path
}
}
}
现在,如果我按 [Superkey] + [t]
,终端将按预期打开。但是,如果路径变量中有 space,即 C:\Users\user\AHK Macros
.
,则会出现错误
解决这个问题应该很容易(用双引号引起来)并且有效。现在的问题是在C:\
目录下打开终端会报错。我认为它与 C:\
以“\”结尾,从而转义引号有关。虽然不确定。我试过用 3/4 引号将它包起来。用 MsgBox
打印它确实给出了所需的 "C:/"
结果,如果我省略引号,我可以打开 C:/
。我忽略了什么?
您确实需要转义最后一个反斜杠。
例如
Run, % "wt.exe -d ""C:\"""
(旧语法 Run, wt.exe -d "C:\"
) 不合适
但是
Run, % "wt.exe -d ""C:\"""
(旧语法 Run, wt.exe -d "C:\"
) 没问题。
例如,您可以检查路径是否以 \
结尾(我认为应该只发生在驱动器根目录中) 然后添加一个额外的反斜杠:
#t::
if (WinActive("ahk_exe Explorer.EXE ahk_class CabinetWClass"))
{
path := GetActiveExplorerPath()
if (SubStr(path, 0) == "\") ;get last character
path .= "\"
path := StrReplace(path, ";", "\;") ;semicolon needs to be escaped
Run, % "wt.exe -d """ path """"
}
else
{
Run, % "wt.exe"
}
return
你会注意到我也转义了 ;
,这也需要完成,因为它在 wt 启动参数中分隔命令。
首先是我的代码:
#t::
IfWinActive, ahk_class CabinetWClass ; If explorer is active
{
path := GetActiveExplorerPath()
Run wt.exe -d "%path%"
}
else
{
Run wt.exe
}
Return
;
GetActiveExplorerPath() {
explorerHwnd := WinActive("ahk_class CabinetWClass")
if (explorerHwnd)
{
for window in ComObjCreate("Shell.Application").Windows
{
if (window.hwnd==explorerHwnd)
return window.Document.Folder.Self.Path
}
}
}
现在,如果我按 [Superkey] + [t]
,终端将按预期打开。但是,如果路径变量中有 space,即 C:\Users\user\AHK Macros
.
解决这个问题应该很容易(用双引号引起来)并且有效。现在的问题是在C:\
目录下打开终端会报错。我认为它与 C:\
以“\”结尾,从而转义引号有关。虽然不确定。我试过用 3/4 引号将它包起来。用 MsgBox
打印它确实给出了所需的 "C:/"
结果,如果我省略引号,我可以打开 C:/
。我忽略了什么?
您确实需要转义最后一个反斜杠。
例如
Run, % "wt.exe -d ""C:\"""
(旧语法 Run, wt.exe -d "C:\"
) 不合适
但是
Run, % "wt.exe -d ""C:\"""
(旧语法 Run, wt.exe -d "C:\"
) 没问题。
例如,您可以检查路径是否以 \
结尾(我认为应该只发生在驱动器根目录中) 然后添加一个额外的反斜杠:
#t::
if (WinActive("ahk_exe Explorer.EXE ahk_class CabinetWClass"))
{
path := GetActiveExplorerPath()
if (SubStr(path, 0) == "\") ;get last character
path .= "\"
path := StrReplace(path, ";", "\;") ;semicolon needs to be escaped
Run, % "wt.exe -d """ path """"
}
else
{
Run, % "wt.exe"
}
return
你会注意到我也转义了 ;
,这也需要完成,因为它在 wt 启动参数中分隔命令。