ATTENTION: You are viewing a page formatted for mobile devices; to view the full web page, click HERE. Software > N.A.N.Y. 2014

Nany 2014 Entry - Early Alpha - JsRoboKey


I am announcing JsRoboKey as one of my entries to NANY 2014. Right now it is pre-alpha but it's got some starter features similar to AutoHotkey.
I hope to get version 1.0 in by the new year!

In case you want some teasers, the app sits in the tray (similar to ahk) and will run a script. Here are some examples (go to for more readable format):

Example Scripts

###### sendKeys()
A simple script might look like this:

--- ---    //run notepad, wait a little bit for it to open, then send some keystrokes'notepad');
    rk.sendKeys('[email protected]#$%^&*()');

###### addGlobalHotkey()
Or even better, trigger to run notepad after a certain hotkey!

--- ---rk.addGlobalHotkey('Meta+Alt+N', function(){'notepad');
(Meta) means the Windows key

###### getForegroundWindow() and getWindowText()
And demonstrating some new functionality, this script will run notepad and wait for it to open

--- ---function fgWinMatches(winTitle){
    var hwnd = rk.getForegroundWindow();
    var title = rk.getWindowText(hwnd);
    if (title.toLowerCase().indexOf(winTitle.toLowerCase()) >= 0){
       return {hwnd:hwnd,title:title};
       return false;

function winWait(winTitle, callback){
   var match = fgWinMatches(winTitle);
   if (match === false){
         winWait(winTitle, callback);
winWait('notepad', function(match){
    rk.sendKeys('Hello World');
###### onClipboardChange()
A new feature onClipboardChange() which sets up a callback when the clipboard changes, think of the possibilities!

--- ---rk.onClipboardChange(function(data){
    if (typeof(data) != 'string'){ return; }
    if (data.indexOf('foobar') >= 0){
       rk.alert('foobar on clipboard: ' + data);

###### onKeyPress() onKeyRelease()
*unstable* not yet in master (hotfix_keylisten branch)

--- ---rk.allowKeyListen();
   if (key == 'F7'){
     rk.sendKeys('Hello World F7');

###### trayMsg()
demonstrating a few of the latest features as well,
after the tray bubble message gets shown, the callback gets called when the user clicks the tray message

--- ---rk.trayMsg('Hi','Check if JsRoboKey executable file exists...', function(){
   alert(__APPFILEPATH__ + ' exists: ' +

rk.trayMsg('About','Click to open the JsRoboKey website', function(){



What's the "angle"? When people do stuff similar to something else, there's usually at least one aspect that's inspiring the attempt to improve on or fix something! So what's the nifty starter finesse that is inspiring this entry? I don't know anything about ahk so try to make it easy for us newbies!


Honestly ahk did such a great job writing their little powertool to do pretty much anything you need in windows. It's downfall - it's not cross-platform and the language is nothing like a programming language in my opinon. JsRoboKey's aim is to Have at least the powerful features in the familiar javascript syntax using the powerful v8 engine.

Glad you're participating, relipse. Your project looks quite interesting.

Hi, Relipse!

I love this idea - and have considered doing the same thing quite a few times.

Unfortunately, I think there could be a better way to go about it - have  you looked into Node.js?

It's a javascript engine - so half of the work is already done for you.  Plus, there are already plugins to load native code files (DLLs in Windows ... but I *think* it's cross-platform, so can load whatever-it-is-that-*nix-platforms-use-for-DLLs (I can't remember what they're called!)) - so 2/3 of the work is already done.  

All that's left, really, is bundling up a bunch of wrapper calls into a node package to mimic the AHK feature-set.

I just wish there were 8 of me so I could have done it already... :)


[0] Message Index

Go to full version