9

我从论坛收集了一个脚本,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
4

6 回答 6

16

在 c:\ 路径下运行 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
于 2013-08-09T06:16:32.847 回答
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

无需直接从资源管理器中神奇地获取地址!:)

于 2014-09-25T01:14:05.490 回答
2

无法获得其他工作答案(自编写以来已经有几年了)。

我最终写了这个脚本:

#o::
    Send {Alt down}D{Alt up}cmd{enter}
return
于 2017-11-14T09:27:38.620 回答
1

这是来自AHK 论坛的一个非常复杂的脚本:

#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 或Windows XP这样的自定义路径。如果您想对冲您的赌注,我还添加了一个替代条件,该条件还检查是否存在路径。ComputerMy Computer

于 2013-08-13T08:12:40.993 回答
1

把事情简单化。除非你当然需要复杂性。

!f1::
    run, C:\Windows\System32\cmd.exe
return

!f1意味着Alt+F1。对于我个人的喜好。将其更改为您喜欢的任何内容。

于 2018-02-12T04:00:45.160 回答
1

另一个解决方案是从这里一起破解的。在 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
于 2019-04-17T20:16:56.623 回答