This is the same order of calls that MSDN uses in their example. My return value ($1) is 1, which means that the call succeeded, according to the docs.
System::Call "user32::CreateCaret(i r0, i, i R2, i R5)i"
System::Call "user32::SetCaretPos(i 10, i) i .r1"
System::Call "user32::ShowCaret(i r0)i"
But, no matter what values I pass in, the caret remains at the beginning of the text field when it is given focus. Has anybody used this successfully? If so, how do you know what to pass in for the x/y coordinates? For example, how would you set the position to the end of the string in a text field?