我从AutoHotKey
论坛收集了一个脚本,该脚本允许我在Windows资源管理器中打开的位置打开命令提示符。如果当前窗口不是资源管理器窗口,则会在脚本所在的位置打开提示。如果当前窗口不是资源管理器窗口,我想更改此行为并从C:\
打开它。我试图编辑脚本,但它没有按预期工作。
#ifwinactive, ahk_class CabinetWClass
ControlGetText, address , edit1, ahk_class CabinetWClass
if (address <> "") {
Run, cmd.exe, %address%
}
else {
Run, cmd.exe, "C:"
}
ExitApp
#ifwinactive
答案 0 :(得分:8)
在c:\ path中运行cmd.exe的命令是
运行,cmd.exe,c:\
每次运行cmd窗口的完整脚本看起来像这样
SetTitleMatchMode, 2
ifwinactive, ahk_class CabinetWClass
ControlGetText, address , edit1, ahk_class CabinetWClass
else
address =
; Exclude specific windows
ifwinactive, My Computer
address =
ifwinactive, My Documents
address =
if (address <> "")
Run, cmd.exe, %address%
else
Run, cmd.exe, C:\
ExitApp
答案 1 :(得分:7)
我意识到这是一个古老的问题,但我自己正在研究这个问题,并有一个更好的解决方案。
Windows有两种内置方法可以在当前资源管理器窗口的路径上启动cmd。按Shift +右键单击,然后单击打开命令窗口(或按w)。您也可以按alt + d,键入cmd,然后按Enter键。所以......
LWin & Return::
if WinActive("ahk_class CabinetWClass")
or WinActive("ahk_class ExploreWClass")
{
Send {Shift Down}{AppsKey}{Shift Up}
Sleep 10
Send w{enter}
}
else
{
run, cmd, C:\
}
return
没有直接从资源管理器中抓取地址! :)
答案 2 :(得分:1)
这是来自AHK forums:
的非常复杂的脚本#NoEnv
#SingleInstance Force
#NoTrayIcon
SendMode Input
SetWorkingDir %A_ScriptDir%
SetTitleMatchMode RegEx
#IfWinActive ahk_class ExploreWClass|CabinetWClass|Progman
#c::
WinGetClass WinClass
If ( WinClass = "Progman" )
{
Run %ComSpec% /K cd /D "C:\"
Return
}
If ( InStr( "WIN_7,WIN_VISTA" , A_OSVersion ) )
{
ControlGetText, Path, ToolbarWindow322
RegExMatch(Path, ":\s*(.*)", Path)
Path := Path1
}
Else
{
; Windows XP doesn't know the Edit1 control exists if
; the Address Bar is hidden, so check if it exists and temporarly
; show the Address bar if needed. Temporarly showing the Address bar
; will register the Edit1 control, which contains the path.
ControlGetPos Edit1Pos , , , , Edit1
If ( !Edit1Pos )
{
PostMessage 0x111 , 41477 , 0 , , A ; Show Address Bar
Sleep 100
PostMessage 0x111 , 41477 , 0 , , A ; Hide Address Bar
}
ControlGetText Path , Edit1
}
If ( InStr( Path , ":" ) )
; If( InStr( Path , ":" ) && FileExist(Path) )
Run %ComSpec% /K cd /D "%Path%"
Else
Run %ComSpec% /K cd /D "C:\"
Return
我稍微调整了WIN_7
部分,因此代码独立于不可靠的Edit1
控件,它并不总是暴露当前的资源管理器位置或不正确的位置。 If ( InStr( Path , ":" ) )
确保Windows 7上没有自定义路径,如Computer
或Windows XP上My Computer
。我还添加了一个替代条件,如果你想对冲你的赌注,还会另外检查存在的路径。
答案 3 :(得分:1)
无法得到其他工作答案(自写完以来已经过了几年)。
我最后写了这个剧本:
#o::
Send {Alt down}D{Alt up}cmd{enter}
return
答案 4 :(得分:1)
保持简单。除非你需要复杂性。
!f1::
run, C:\Windows\System32\cmd.exe
return
!f1
表示 Alt + F1 。为了我个人的喜好。把它改成你喜欢的任何东西。
答案 5 :(得分:1)
另一个从here入侵的解决方案。在Windows 10上适合我,但我承认它是全部复制粘贴。发布该邮件的目的是希望能够避免其他人对AHK脚本的恐惧。
;; Open terminal in current Explorer window folder
#If WinActive("ahk_class CabinetWClass") ; explorer
F4::
WinGetTitle, ActiveTitle, A
If InStr(ActiveTitle, "\") ; If the full path is displayed in the title bar (Folder Options)
Fullpath := ActiveTitle
else
If InStr(ActiveTitle, ":") ; If the title displayed is something like "DriveName (C:)"
{
Fullpath := SubStr(ActiveTitle, -2)
Fullpath := SubStr(Fullpath, 1, -1)
}
else ; If the full path is NOT displayed in the title bar
; https://autohotkey.com/boards/viewtopic.php?p=28751#p28751
for window in ComObjCreate("Shell.Application").Windows
{
try Fullpath := window.Document.Folder.Self.Path
SplitPath, Fullpath, title
If (title = ActiveTitle)
break
}
Run, cmd.exe, %Fullpath%
return
#If