Remapear Ctrl para Alt e manter Alt + Tab e Ctrl + Tab

2

Estou usando o autohotkey para trocar Ctrl e Alt

LAlt::LCtrl
LCtrl::LAlt 

Isso funciona muito bem, mas além disso eu quero manter Alt + Tab e Ctrl + Tab onde eles eram originalmente.

Já experimentei vários trechos de código diferentes, mas nenhum deles funcionou bem até agora.

O mais próximo que eu cheguei de uma solução totalmente funcional, mas apenas para o Alt + Tab e não Shift + Alt + Tab é link

    
por herkulano 09.10.2015 / 14:28

5 respostas

5

Entendi, funciona agora!

Estava na direção certa, mas havia alguns problemas com o código. Especialmente o LShift não estava sendo verificado se era falso, então a primeira afirmação sempre foi verdadeira.

Também adicionei suporte para Ctrl + Tab.

*tab:: 
{   
    if (GetKeyState("LAlt", "P") AND GetKeyState("LShift", "P") = false) {     
        Send {LControl up}{LAlt down}{tab}
        KeyWait, tab  
    } else if (GetKeyState("LAlt", "P") AND GetKeyState("LShift", "P")) {     
        Send {LControl up}{LShift down}{LAlt down}{tab}
        KeyWait, tab
    } else if (GetKeyState("LCtrl", "P") AND GetKeyState("LShift", "P") = false) {     
        Send {LAlt up}{LCtrl down}{tab}
        KeyWait, tab
    } else if (GetKeyState("LCtrl", "P") AND GetKeyState("LShift", "P")) {  
        Send {LAlt up}{LShift down}{LCtrl down}{tab}
        KeyWait, tab
    } else if (GetKeyState("LWin", "P") AND GetKeyState("LShift", "P") = false) {     
        Send {LWin down}{tab}
        KeyWait, tab
    } else if (GetKeyState("LWin", "P") AND GetKeyState("LShift", "P")) {  
        Send {LShift down}{LWin down}{tab}
        KeyWait, tab
    } else {   
        send {tab}
    }      
    return
}

~LAlt Up::
{   
    send {LAlt up}
    return
}

~LCtrl Up::
{   
    send {LCtrl up}
    return
}

LAlt::LCtrl 
LCtrl::LAlt
    
por 12.10.2015 / 14:36
1

Como estou trabalhando apenas a partir do exemplo do código fornecido na resposta à qual você se vinculou, juntei o código abaixo. Eu não sei qual ação "Shift + Alt + Tab" executa, já que não obtenho resposta em meu sistema com ela, então você terá que testar para verificar se isso tem o efeito desejado.

*tab::
{   if (GetKeyState("LAlt", "P"))  
{   Send {LControl up}{Alt down}{tab}
    KeyWait, tab  
}else if (GetKeyState("LAlt", "P")) AND (GetKeyState("LShift", "P"))  
{ Send {LControl up}{LShift down}{Alt down}{tab}
    KeyWait, tab  
}else   
{   send {tab}
}      
return
}          
~LAlt Up::
{   send {lAlt up}
return
}
LAlt::LCtrl 
LCtrl::LAlt  
    
por 11.10.2015 / 06:16
1

Para mim, a versão @herkulano não é confiável no Windows10. Às vezes, ele roda chaves diferentes e não consigo trabalhar.

Em vez disso, uso isso que também funciona com o Emacs para combinações como C-M-- .

#NoEnv  ; Recommended for performance and compatibility with future AutoHotkey releases.
; #Warn  ; Enable warnings to assist with detecting common errors.
; The .ahk text file needed to be saved with UTF8-BOM encoding rather than UTF8
; https://stackoverflow.com/questions/15635635/how-do-i-use-unicode-in-autohotkey
SendMode Input  ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir%  ; Ensures a consistent starting directory.

global sendLAltUpOnLCtrlUp := 0

;; https://superuser.com/questions/984343/remap-ctrl-to-alt-and-keep-alttab-and-ctrltab/1332713#1332713
;; https://autohotkey.com/board/topic/96465-switch-alt-and-ctrl-retain-alt-tab/
;; Let LCtrl sends LWin, LWin sends LAlt and LAlt sends LCtrl using SharpKeys and then
*tab:: 
{
    if (GetKeyState("LCtrl", "P") AND GetKeyState("LShift", "P") = false) {
        sendLAltUpOnLCtrlUp := 1
        Send {LCtrl up}{LAlt down}{tab}
        KeyWait, tab  
    } else
    if (GetKeyState("LCtrl", "P") AND GetKeyState("LShift", "P")) {
        sendLAltUpOnLCtrlUp := 1
        Send {LCtrl up}{LShift down}{LAlt down}{tab}
        KeyWait, tab
    } 
    else {   
        send {tab}
    }      
    return
}

~LCtrl up::
{   
    if(sendLAltUpOnLCtrlUp == 1) {
      sendLAltUpOnLCtrlUp := 0
      send {LAlt up}
    } else {
      send {LCtrl up}
    }
    return
}

~LAlt up::
{   
    send {LAlt up}
    return
}

;; Example how to insert polish diactrics with 'RAlt + Shift + A' etc.
;; https://pl.m.wikipedia.org/wiki/Alfabet_polski
>!+a::Send {U+0104}
>!a::Send {U+0105}
    
por 20.06.2018 / 01:22
0

Eu realmente gostei da versão do @rofrol, mas ela só lidou com o envio de Alt (+ Shift) + Tab quando a tecla Ctrl (+ Shift) + Tab foi pressionada.

Eu também queria o inverso, Ctrl (+ Shift) + Tab quando Alt (+ Shift) + Tab é pressionado.

Além disso, ele quebrou a funcionalidade Shift + Tab simples que uso o tempo todo enquanto codifico, então adicionei uma condição adicional para corrigir isso.

global sendLAltUpOnLCtrlUp := 0
global sendLCtrlUpOnLAltUp := 0

*tab::
{
  if (GetKeyState("LCtrl", "P") AND GetKeyState("LShift", "P"))
  {
    sendLAltUpOnLCtrlUp := 1
    Send {LCtrl up}{LShift down}{LAlt down}{tab}
    KeyWait, tab
  }
  else if (GetKeyState("LCtrl", "P"))
  {
    sendLAltUpOnLCtrlUp := 1
    Send {LCtrl up}{LAlt down}{tab}
    KeyWait, tab
  }
  else if (GetKeyState("LAlt", "P") AND GetKeyState("LShift", "P"))
  {
    sendLCtrlUpOnLAltUp := 1
    Send {LAlt up}{LShift down}{LCtrl down}{tab}
    KeyWait, tab
  }
  else if (GetKeyState("LAlt", "P"))
  {
    sendLCtrlUpOnLAltUp := 1
    Send {LAlt up}{LCtrl down}{tab}
    KeyWait, tab
  }
  else if (GetKeyState("LShift", "P"))
  {
    Send {LShift down}{tab}
    KeyWait, tab
  }
  else
  {
    send {tab}
  }
  return
}

~LCtrl up::
{
  if(sendLAltUpOnLCtrlUp == 1)
  {
    sendLAltUpOnLCtrlUp := 0
    send {LAlt up}
  }
  else
  {
    send {LCtrl up}
  }
  return
}

~LAlt up::
{
  if(sendLCtrlUpOnLAltUp == 1)
  {
    sendLCtrlUpOnLAltUp := 0
    send {LCtrl up}
  }
  else
  {
    send {LAlt up}
  }
  return
}
    
por 06.09.2018 / 22:01
0

Coloque isso em um .ahk :

separado
SendMode Input 
*LAlt::
    send {LCtrl down}
    Keywait, Lalt
    send {LCtrl up}
return
*LCtrl::
    send {Lalt down}
    Keywait, LCtrl
    send {Lalt up}
return

E isso em outro .ahk :

SendMode Input 

LAlt & Tab::
    send {Lalt down}{Tab}
return 

+esc::Exitapp

Em seguida, execute os dois scripts (execute o primeiro primeiro).

    
por 22.09.2018 / 20:56