package Ġme . sed lar . util Ċ Ċ import Ġjava . awt . AW TKey Stroke Ċ import Ġjava . awt . AW TKey Stroke . get AW TKey Stroke Ċ import Ġjava . awt . Robot Ċ import Ġjava . awt . event . Input Event . SHIFT _ DOWN _ MASK Ċ import Ġjava . awt . event . KeyEvent Ċ Ċ object ĠKeyboard Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġrobot : ĠRobot Ġ= ĠRobot () ĊĊĠĠĠ Ġfun Ġtype ( chars : ĠCharSequence , Ġms : ĠInt Ġ= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġmillis Ġ= Ġms ĊĠĠĠĠĠĠĠ Ġmillis Ġ= Ġif Ġ( millis Ġ> Ġ 0 ) Ġmillis Ġelse Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġi Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġval Ġlen Ġ= Ġchars . length ĊĠĠĠĠĠĠĠ Ġwhile Ġ( i Ġ< Ġlen ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġc Ġ= Ġchars [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkey Stroke Ġ= ĠgetKey Stroke ( c ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠkeyCode Ġ= Ġkey Stroke . keyCode ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġshift Ġ= ĠCharacter . is UpperCase ( c ) Ġ|| Ġkey Stroke . modifiers Ġ== ĠSHIFT _ DOWN _ MASK Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( shift ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrobot . key Press ( KeyEvent . VK _ SHIFT ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġrobot . key Press ( keyCode ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrobot . key Release ( keyCode ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( shift ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrobot . key Release ( KeyEvent . VK _ SHIFT ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( millis Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrobot . delay ( millis ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġi ++ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠgetKey Stroke ( c : ĠChar ): ĠA WT KeyStroke Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġupper Ġ= Ġ"` ~ ' \" ! @ #$ %^ & * () _ + {} |: <> ?" ĊĠĠĠĠĠĠĠ Ġval Ġlower Ġ= Ġ"` ~ ' \" 1 2 3 4 5 6 7 8 9 0 - =[] \\ ;, ./ " ĊĊĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġupper . indexOf ( c ) ĊĠĠĠĠĠĠĠ Ġif Ġ( index Ġ!= Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠkeyCode : ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġshift Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( c ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġthese Ġchars Ġneed Ġto Ġbe Ġhandled Ġspec ially Ġbecause ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġthey Ġdon 't Ġdirectly Ġtranslate Ġinto Ġthe Ġcorrect Ġkey code ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ'~ ' Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshift Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠkeyCode Ġ= ĠKeyEvent . VK _ BACK _ QUOTE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ' `' Ġ-> ĠkeyCode Ġ= ĠKeyEvent . VK _ BACK _ QUOTE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ'\" ' Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshift Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠkeyCode Ġ= ĠKeyEvent . VK _ QUOTE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ'\'' Ġ-> ĠkeyCode Ġ= ĠKeyEvent . VK _ QUOTE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠkeyCode Ġ= ĠCharacter . toUpperCase ( lower [ index ]). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshift Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġget AW TKey Stroke ( keyCode , Ġif Ġ( shift ) ĠSHIFT _ DOWN _ MASK Ġelse Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġget AW TKey Stroke ( Character . toUpperCase ( c ). toInt (), Ġ 0 ) ĊĠĠĠ Ġ} Ċ }