Teclas do Windows + combinações de seta para a esquerda / direita no AutoHotkey

0

Eu estou tentando fazer um script AutoHotkey que executaria a seguinte sequência quando eu pressionar + Espaço :

  1. +E-AbreumajaneladoExplorer
  2. + Seta para a esquerda - Ajustar à esquerda da tela
  3. +E-AbreumajaneladoExplorer
  4. + Seta para a direita - Encaixar à direita da tela

Eu tentei o seguinte, mas não funcionou:

# space::
Send #e
Send {LWin Down}{Left}{LWin Up}
Send #e
Send {LWin Down}{Right}{LWin Up}
return

Obrigado,

    
por Semir 24.02.2014 / 18:12

2 respostas

2

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
  }
    
por 27.02.2014 / 14:02
1
oShellWindows:=(oShell:=ComObjCreate("Shell.Application")).windows

#Space:: ; win+space
   KeyWait, Space
   oShell.MinimizeAll
   Loop, 2 ; any reasonable amount
   {
      curCnt:=oShellWindows.count
      Send, {LWinDown}{vk45}{LWinUp} ; vk45 - e
      While, curCnt=oShellWindows.count
         Sleep, 500
   }
   Exit, oShell.TileVertically, curCnt:=""
    
por 26.02.2014 / 21:21