2013-08-09 1 views
4

Я собрал скрипт из форума AutoHotKey, который позволяет мне открыть командную строку в том месте, где я открыт в проводнике Windows. Если текущее окно не является окном проводника, приглашение открывается в том месте, где присутствует скрипт. Я хотел бы изменить это поведение и сделать его открытым с C:\, если текущее окно не является окном проводника. Я попытался отредактировать скрипт, но он не работает по желанию.Сценарий Autohotkey для открытия командной строки

#ifwinactive, ahk_class CabinetWClass 
ControlGetText, address , edit1, ahk_class CabinetWClass 
if (address <> "") { 
Run, cmd.exe, %address% 
} 
else { 
Run, cmd.exe, "C:" 
} 
ExitApp 
#ifwinactive 
+0

Какую версию Windows вы используете? – MCL

ответ

6

Команда для запуска cmd.exe в C: \ путь

бег, cmd.exe, с: \

Полный скрипт, который будет запускать УМК окно каждый раз, когда будет выглядеть следующим образом

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 
+0

В чем разница между '# Ifwinactive' и' Ifwinactive'? –

+0

Я нашел одно предупреждение. Когда я нахожусь в окне «Мой компьютер», начинается приглашение от скрипта. –

+0

Разница заключается в том, что вы можете определять горячие клавиши в блоке «#ifwinactive», которые активны только при активном winodw. Это цель «#ifwinactive command». – 576i

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 , ":")) гарантирует, что нет пользовательский путь, как Computer на Windows 7 или на Windows XP. Я также добавил альтернативное условие, которое дополнительно проверяет существование пути, если вы хотите хеджировать свои ставки.

+0

Я нахожусь на чуваке Windows XP. Это не работает. –

+0

@SohamDasgupta Ну, это совсем не так. Вы должны нажать 'WIN + C', чтобы вызвать функциональность. – MCL

+0

@SohamDasgupta Я только отправил самую горячую клавишу, конечно, вам придется называть 'SetTitleMatchMode, RegEx', как описано в связанном потоке. Я также добавил раздел автозапуска. – MCL

7

Я понимаю, что это старый вопрос, но я изучал это сам и имею лучшее решение.

Windows имеет два встроенных способа запуска cmd по пути текущего окна проводника. Shift + RightClick, а затем нажмите «Открыть окно команд здесь» (или нажмите 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 

Никакой магический захват адреса непосредственно у исследователя! :)

0

Не удалось получить другие ответы на работу (прошло несколько лет с тех пор, как они были написаны).

Я закончил тем, что писал этот сценарий:

#o:: 
    Send {Alt down}D{Alt up}cmd{enter} 
return 
0

держать его просто. Если, конечно, вам не нужна сложность.

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

!f1 означает Alt + F1. По моим личным предпочтениям. Измените его так, как хотите.