Вот довольно сложный сценарий из 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. Я также добавил альтернативное условие, которое дополнительно проверяет существование пути, если вы хотите хеджировать свои ставки.
Какую версию Windows вы используете? – MCL