A JNativeHook example in Scala
I’ve been working on a few applications where I want to get access to native, global keystrokes and mouse movements, so I’ve been using the JNativeHook library, which seems to work well on Mac OS X systems. I’ve been using Scala for all my coding the last few years instead of Java, so here’s a quick Scala port of the JNativeHook GlobalMouseListenerExample:
package jnativehookexample import org.jnativehook.GlobalScreen import org.jnativehook.NativeHookException import org.jnativehook.mouse.NativeMouseEvent import org.jnativehook.mouse.NativeMouseInputListener class GlobalMouseListenerExample extends NativeMouseInputListener { def nativeMouseClicked(e: NativeMouseEvent) { println(s"Mouse Clicked: ${e.getClickCount}") } def nativeMousePressed(e: NativeMouseEvent) { println(s"Mouse Pressed: ${e.getButton}") } def nativeMouseReleased(e: NativeMouseEvent) { println(s"Mouse Released: ${e.getButton}") } def nativeMouseMoved(e: NativeMouseEvent) { println(s"Mouse Moved: ${e.getX}, ${e.getY}") } def nativeMouseDragged(e: NativeMouseEvent) { println(s"Mouse Dragged: ${e.getX}, ${e.getY}") } } object GlobalMouseListenerExample extends App { try { GlobalScreen.registerNativeHook } catch { case ex: NativeHookException => System.err.println("There was a problem registering the native hook.") System.err.println(ex.getMessage) System.exit(1) } //construct the example object val example = new GlobalMouseListenerExample //add the appropriate listeners for the example object GlobalScreen.getInstance.addNativeMouseListener(example) GlobalScreen.getInstance.addNativeMouseMotionListener(example) }
I just realized that I didn’t change the println
statements initially, so I just updated those to use string interpolation. If I didn’t make any mistakes in changing those, the rest of the code should work fine. To run the example you’ll need to use the JNativeHook library and its dependencies.
Note: For your application to work properly on Mac OS X systems, you need to enable “access for assistive devices” for your application. On Mac OS X 10.9, that setting is under System Preferences > Security & Privacy > Privacy tab > Accessibility > Your Application.
Recent blog posts
- Free Scala and functional programming video training courses
- Free: Introduction To Functional Programming video training course
- The #1 functional programming (and computer programming) book
- The User Story Mapping Workshop process
- Alvin Alexander, Certified Scrum Product Owner (CSPO)
- Alvin Alexander is now a Certified ScrumMaster (CSM)
- Our “Back To Then” app (for iOS and Android)
- A Docker cheat sheet
- Pushing a Scala 3 JAR/Docker file to Google Cloud Run
- Reading a CSV File Into a Spark RDD (Scala Cookbook recipe)