Got it, it works now!
It was in the right direction, but there were a couple of problems with the code. Especially the LShift was not being checked if it was false, so the first statement was always true.
I also added support for 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