Enquanto a resposta de JJohnston2 me dava parte da solução, acabei perguntando a vários outros lugares e fazendo muita experimentação. Aqui está o que eu finalmente acabei com:
Up::RShift
*RShift::
delay=400
While GetKeyState("RShift", "P") {
Send {Blind}{Up}
Sleep %delay% ; Set delay to taste
delay=30
}
Return
Isso resolve os problemas de repetição de chave e permite que o shift + up funcione como esperado. Existem dois problemas pendentes que eu não resolvi, mas que são suficientemente baixos em prioridade e que vou considerar essa questão resolvida de qualquer maneira:
- A condição de corrida não está resolvida. Eu tentei colocar a primeira iteração fora do loop, como JJohnston2 fez, mas não teve efeito observável para mim.
- A causa raiz de todo esse problema é que o sistema não parece repetir as teclas shift, Ctrl ou Alt, mesmo que as outras repetam. Então, AHK não pode repetir o que nunca vê. Já que todos que eu pedi ajuda não tiveram esse problema, deve haver algo interessante com a minha configuração, mas eu não tenho a menor ideia do que isso possa ser.