Ваш код в порядке относительно того, какие ключи он отправляет. Это не работает, потому что отправляет их слишком быстро. После #e требуется некоторое время, чтобы запустить новое окно.
Простым решением было бы подождать некоторое время. Но лучше было бы динамически ожидать появления нового окна. Например достижимо через COM-объект "Оболочка".Приложение »(см. Ответ Грея) или AHK-Command« WinGet, List »(см. Ниже).
Fix-Wait-Time:
#space::
startExplorerAttached("Left")
startExplorerAttached("Right")
return
startExplorerAttached(sideToAttacheTo)
{
Send, #e
Sleep, 500
Send, #{%sideToAttacheTo%}
}
Динамический:
#space::
startExplorerAttached("Left")
startExplorerAttached("Right")
return
startExplorerAttached(sideToAttacheTo)
{
hWnd := startExplorer()
if ( hWnd == -1 )
{
Msgbox, Could not start/find new explorer window!
return
}
WinActivate, ahk_id %hWnd%
Send, #{%sideToAttacheTo%}
}
startExplorer()
{
; Starts a new Windows Explorer with the Computer-View.
; Returns the handle from the new window or -1 if no new window is found
static AFTER_START_DELAY := 150
static AFTER_FAILED_SEARCH_DELAY := 20
static MAX_SEARCH_ATTEMPTS := 100
explorerWinTitle = ahk_class CabinetWClass
WinGet, explorerWinHandlesBeforeStart, List, %explorerWinTitle%
argToStartWithComputerView = /e`,
Run, explorer.exe %argToStartWithComputerView%
Sleep, %AFTER_START_DELAY%
Loop, %MAX_SEARCH_ATTEMPTS%
{
WinGet, explorerWinHandlesAfterStart, List, %explorerWinTitle%
Loop, %explorerWinHandlesAfterStart%
{
curAfterStartWinHandle := explorerWinHandlesAfterStart%A_Index%
isOldWin := false
Loop, %explorerWinHandlesBeforeStart%
{
curBeforeStartWinHandle := explorerWinHandlesBeforeStart%A_Index%
if ( curBeforeStartWinHandle == curAfterStartWinHandle )
{
isOldWin := true
break
}
}
if ( not isOldWin )
{
return curAfterStartWinHandle
}
}
Sleep, %AFTER_FAILED_SEARCH_DELAY%
}
return -1
}