The most reliable built-in method for detecting keystrokes should be to map them to a command using "When I press keys".
If you want to keep track of a position in a menu, you'll have to map out all the branches, and set up a system to traverse them.
The simplest way to set up such a system would probably be to manually map it out using conditions, E.G. when the current position is X, and the key corresponding to down is pressed, change the position to location Y instead.
E.G. the command mapped to the "down" key, could look like
Begin Text Compare : [menuPosition] Equals 'menuItem1'
Set text [menuPosition] to 'menuItem2'
Else If Text Compare : [menuPosition] Equals 'menuItem2'
Set text [menuPosition] to 'menuItem3'
Else If Text Compare : [menuPosition] Equals 'menuItem3'
Set text [menuPosition] to 'menuItem1'
End Condition
assuming wraparound scrolling, where pressing down on the last menu item goes back up to the first item.