Task

Send simulated keystrokes to a GUI window, or terminal.

You should specify whether the target may be externally created
(i.e., if the keystrokes are going to an application
other than the application that is creating them).




(import java.awt.Robot)
(import java.awt.event.KeyEvent)
(defn keytype [str]
  (let [robot (new Robot)]
       (doseq [ch str] 
	      (if (Character/isUpperCase ch)
		  (doto robot
			(.keyPress (. KeyEvent VK_SHIFT))
			(.keyPress (int ch))
			(.keyRelease (int ch))
			(.keyRelease (. KeyEvent VK_SHIFT)))
		  (let [upCh (Character/toUpperCase ch)]
		       (doto robot 
			     (.keyPress (int upCh))
			     (.keyRelease (int upCh))))))))