I took your advice. Here is the newest version of the script. I am using F20-F23 instead of the Ctrl-Arrow keys because I have them mapped.
#Requires AutoHotkey v2.0
*F20::
{
if(WinActive(“ahk_exe rhino.exe”))
{
Try ControlGetPos &OutX, &OutY, &OutWidth, &OutHeight, “RICHEDIT50W1”, “A”
if(!isSet(OutX) || !isSet(OutY) || !isSet(OutWidth) || !isSet(OutHeight))
{
Click 0, -12
return
}
EditFieldLBound := OutX+69
EditFieldRBound := OutX+OutWidth-21
EditFieldYPos := OutY+OutHeight+1
MouseGetPos(&MouseX, &MouseY, &MouseWin, &MouseControl)
if(CaretGetPos(&OutputVarX, &OutputVarY))
{
if(OutputVarY=EditFieldYPos)
{
if(OutputVarX>EditFieldLBound)
{
Click OutputVarX-7, OutputVarY
MouseMove MouseX, MouseY
}
}
else
{
Send “{Left}”
}
}
else
{
Click EditFieldRBound, EditFieldYPos
MouseMove MouseX, MouseY
}
}
else
{
Send “{Left}”
}
}
*F21::
{
if(WinActive(“ahk_exe rhino.exe”))
{
Try ControlGetPos &OutX, &OutY, &OutWidth, &OutHeight, “RICHEDIT50W1”, “A”
if(!isSet(OutX) || !isSet(OutY) || !isSet(OutWidth) || !isSet(OutHeight))
{
Click 0, -12
return
}
EditFieldLBound := OutX+69
EditFieldRBound := OutX+OutWidth-21
EditFieldYPos := OutY+OutHeight+1
MouseGetPos &MouseX, &MouseY, &MouseWin, &MouseControl
if(CaretGetPos(&OutputVarX, &OutputVarY))
{
if(OutputVarY=EditFieldYPos)
{
Click OutputVarX+7, OutputVarY
MouseMove MouseX, MouseY
}
else
{
Send “{Right}”
}
}
else
{
Click EditFieldRBound, EditFieldYPos
MouseMove MouseX, MouseY
}
}
else
{
Send “{Right}”
}
}
*F22::
{
if(WinActive(“ahk_exe rhino.exe”))
{
Try ControlGetPos &OutX, &OutY, &OutWidth, &OutHeight, “RICHEDIT50W1”, “A”
if(!isSet(OutX) || !isSet(OutY) || !isSet(OutWidth) || !isSet(OutHeight))
{
Click 0, -12
return
}
EditFieldLBound := OutX+69
EditFieldRBound := OutX+OutWidth-21
EditFieldYPos := OutY+OutHeight+1
MouseGetPos &MouseX, &MouseY, &MouseWin, &MouseControl
if(CaretGetPos(&OutputVarX, &OutputVarY))
{
if(OutputVarY>OutY && OutputVarY<=EditFieldYPos)
{
Click OutputVarX, OutputVarY-12
MouseMove MouseX, MouseY
}
else
{
Send “{Up}”
}
}
else
{
Click EditFieldRBound, EditFieldYPos
MouseMove MouseX, MouseY
}
}
else
{
Send “{Up}”
}
}
*F23::
{
if(WinActive(“ahk_exe rhino.exe”))
{
Try ControlGetPos &OutX, &OutY, &OutWidth, &OutHeight, “RICHEDIT50W1”, “A”
if(!isSet(OutX) || !isSet(OutY) || !isSet(OutWidth) || !isSet(OutHeight))
{
Click 0, -12
return
}
EditFieldLBound := OutX+69
EditFieldRBound := OutX+OutWidth-21
EditFieldYPos := OutY+OutHeight+1
MouseGetPos &MouseX, &MouseY, &MouseWin, &MouseControl
if(CaretGetPos(&OutputVarX, &OutputVarY))
{
if(OutputVarY>=OutY && OutputVarY<EditFieldYPos)
{
Click OutputVarX, OutputVarY+12
Sleep 100
CaretGetPos(&OutputVarX2, &OutputVarY2)
if(OutputVarY2=OutputVarY)
{
if(OutputVarX<EditFieldLBound)
{
Click EditFieldLBound,EditFieldYPos
}
else
{
Click OutputVarX,EditFieldYPos
}
}
MouseMove MouseX, MouseY
}
else if(OutputVarY=EditFieldYPos)
{
}
else
{
Send “{Down}”
}
}
else
{
Click EditFieldRBound, EditFieldYPos
MouseMove MouseX, MouseY
}
}
else
{
Send “{Down}”
}
}