Seu código é bom em relação a quais chaves ele envia. Não funciona, porque os envia rápido demais. Após o #e, leva algum tempo para iniciar a nova janela.
Uma solução simples seria aguardar uma quantidade fixa de tempo. Mas uma abordagem melhor seria esperar dinamicamente pela nova janela. Por exemplo, achável através do COM-Object "Shell.Application" (ver resposta por Gray) ou AHK-Command "WinGet, List" (veja abaixo).
Fix-Wait-Time:
#space::
startExplorerAttached("Left")
startExplorerAttached("Right")
return
startExplorerAttached(sideToAttacheTo)
{
Send, #e
Sleep, 500
Send, #{%sideToAttacheTo%}
}
Dinâmica:
#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
}