7abc778
7abc778

Reputation: 43

I'm having trouble with GetKeyState in AHK

Below is an alt+tab program I wrote that, for some reason, won't work.

while x = 1
{
    mb1 := GetKeyState(j)
    mb2 := GetKeyState(k)
    if (mb1 = 1) and (mb2 = 1)
    {
        Send, {Alt Down}
        Send, {Tab Down}
        sleep, 50
        Send, {Alt Up}
        Send, {Tab Up}
    }
}

I've tried multiple methods of the loop and key detection to no avail.

Upvotes: 0

Views: 3345

Answers (1)

Spyre
Spyre

Reputation: 2344

You do not need to store the value of the keystate in a variable prior to the if-statement; you can check them during the if-statement itself.

So, you could implement this change with something like this:

Loop
{
    if (GetKeyState("j") && GetKeyState("k"))
    {
        Send, {Alt Down}
        Send, {Tab Down}
        sleep, 50
        Send, {Alt Up}
        Send, {Tab Up}
    }
}

However, if you need to save the value of the KeyStates for some reason, there are a couple of ways to do this:

  1. Just save the values from the GetKeyStates while you are checking them in the if-statement.

Note: For both variables to always update every iteration, you need to replace the efficient && with the less efficient &, since the && will stop checking variables as soon as it determines the expression will be false.

This would look something like:

Loop
{
    if (mb1:=GetKeyState("j") & mb2:=GetKeyState("k"))
    {
        Send, {Alt Down}
        Send, {Tab Down}
        sleep, 50
        Send, {Alt Up}
        Send, {Tab Up}
    }
    
    MsgBox During the last check, j was %mb1%, and k was %mb2%!
}
  1. Use the alternative GetKeyState command syntax

Note: Although this version of the command makes it more straightforward to save the output of the command to a variable, it is depreciated and not recommended for use in new scripts.

Upvotes: 1

Related Questions