Basically, the lone percent sign changes how a parameter is processed. Consider this example with MsgBox:
car:="truck"
blue:="red"
own:="sold"
I:="You"
a:="the"
MsgBox,,1, I own a blue car
MsgBox,,2, "I own a blue car"
MsgBox,,3, % I own a blue car
MsgBox,,4, % I " " own " " a " " blue " " car ; this includes literal strings of spaces
MsgBox,,5, % "I own a blue car"
return
Notice in the last message box that the quotation marks make it like the first message box, by passing literal strings in the parameter. That's how most parameters are accepted. The biggest difference is in functions which expect variables to be passed instead of literal strings - so you'll sometimes see quotes around a parameter, such as in GetKeyState() which has a second parameter often passed as "P"
to indicate a physical press. (Sending P
with no quotes will evaluate the variable P which is likely undefined, and so that second parameter is treated as if it's blank.)
(Edit: Named the MsgBoxes so you can tell which is which so you can get a better understanding of the script and how the different syntaxes produce different results.)