topbanner_forum
  *

avatar image

Welcome, Guest. Please login or register.
Did you miss your activation email?

Login with username, password and session length
  • Thursday April 18, 2024, 8:07 pm
  • Proudly celebrating 15+ years online.
  • Donate now to become a lifetime supporting member of the site and get a non-expiring license key for all of our programs.
  • donate

Author Topic: Nany 2014 Entry - Early Alpha - JsRoboKey  (Read 11092 times)

relipse

  • Charter Honorary Member
  • Joined in 2005
  • ***
  • Posts: 112
  • I love Jesus. Coding in PHP primarily.
    • View Profile
    • See my GitHub
    • Read more about this member.
    • Donate to Member
Nany 2014 Entry - Early Alpha - JsRoboKey
« on: September 14, 2013, 12:01 AM »
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 http://github.com/relipse/JsRoboKey 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
    rk.run('notepad');
    rk.sleep(700);
    rk.sendKeys('abcdefgABCDEFG1234567890!@#$%^&*()');

###### addGlobalHotkey()
Or even better, trigger to run notepad after a certain hotkey!
rk.addGlobalHotkey('Meta+Alt+N', function(){
   rk.run('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};
    }else{
       return false;
    }
}

function winWait(winTitle, callback){
   var match = fgWinMatches(winTitle);
   if (match === false){
      rk.setTimeout(function(){
         winWait(winTitle, callback);
      },400);
   }else{
     callback(match);
   }
}

rk.run('notepad');
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();
rk.onKeyRelease(function(key){
   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.fileExists(__APPFILEPATH__));
});


rk.trayMsg('About','Click to open the JsRoboKey website', function(){
    rk.openUrl('http://github.com/relipse/JsRoboKey');
});
Ex C++Builder coder, current PHP coder, and noob Qt Coder

TaoPhoenix

  • Supporting Member
  • Joined in 2011
  • **
  • Posts: 4,642
    • View Profile
    • Donate to Member
Re: Nany 2014 Entry - Early Alpha - JsRoboKey
« Reply #1 on: September 14, 2013, 05:30 AM »

Hallo!

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!

:)

relipse

  • Charter Honorary Member
  • Joined in 2005
  • ***
  • Posts: 112
  • I love Jesus. Coding in PHP primarily.
    • View Profile
    • See my GitHub
    • Read more about this member.
    • Donate to Member
Re: Nany 2014 Entry - Early Alpha - JsRoboKey
« Reply #2 on: September 25, 2013, 03:59 PM »
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.
Ex C++Builder coder, current PHP coder, and noob Qt Coder

kyrathaba

  • N.A.N.Y. Organizer
  • Honorary Member
  • Joined in 2006
  • **
  • Posts: 3,200
    • View Profile
    • Donate to Member
Re: Nany 2014 Entry - Early Alpha - JsRoboKey
« Reply #3 on: October 07, 2013, 09:21 PM »
Glad you're participating, relipse. Your project looks quite interesting.

theGleep

  • Supporting Member
  • Joined in 2014
  • **
  • Posts: 28
    • View Profile
    • Nothing fancy ... just staking a claim!
    • Donate to Member
Re: Nany 2014 Entry - Early Alpha - JsRoboKey
« Reply #4 on: August 01, 2014, 10:43 AM »
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... :)
Computer Programmer by day
Dreamer at night