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