Helper utilities for creating an electron desktop app.
The keySender
and keyHook
utilities, which sends and listen to key presses respectively, have OS specific dependencies:
- For windows, this relies on
powershell
,user32.dll
, andkernel32.dll
. - For linux, this relies on
bash
,xdotool
, andxinput
. - Not tested on mac, but should work with replacements for
xdotool
andxinput
.
const {keySender} = require('js-desktop-base');
keySender.string(keySender.TYPE, 'hello world');
keySender.strings([
keySender.PRESS, '{shift}',
keySender.TYPE, 'hello world',
keySender.RELEASE, '{shift}',
keySender.COMBO, '{ctrl}a',
keySender.COMBO, '{ctrl}c',
]);
const {keyHook} = require('js-desktop-base');
keyHook.addShortcut('{ctrl}{l_shift}', 'ab', () =>
console.log('Either "a" or "b" was pressed while holding down the left shift and either the left or right ctrl modifiers.'));
const {ClipboardListener} = require('js-desktop-base');
let clipboardListener = new ClipboardListener();
clipboardListener.addListener(data =>
console.log('each time user copies, this will be called', data));
clipboardListener.getNext().then(data =>
console.log('the next time the user copies, this will be called', data));
clipboardListener.copy().then(data =>
console.log('will send ctrl+c and then invoke getNext()', data));
clipboardListener.paste('sets this text as the clipboard data and sends ctrl+v');
const {httpRequest} = require('js-desktop-base');
httpRequest.get('endpoint.com')
.then(response => console.log(response));
httpRequest.get('endpoint.com', {queryParam1: 1, queryParam2: 2})
.then(response => console.log(response));
httpRequest.post('endpoint.com', {data1: 1, data2: 2})
.then(response => console.log(response));
const {ScreenMouse} = require('js-desktop-base');
ScreenMouse.getMouse().then(({x, y}) => console.log(x, y));
ScreenMouse.getScreenBounds().then(({x, y, width, height}) => console.log(x, y, width, height));
Note: try using keyHook
instead.
const {ShortcutListener} = require('js-desktop-base');
ShortcutListener.add('Control+Shift+X', () => console.log('ctrl+shift+x preessed'));
const {TrayHelper} = require('js-desktop-base');
TrayHelper.createExitTray('icon.png', 'tooltip');
const {ViewHandle} = require('js-desktop-base');
class MyViewHandle extends ViewHandle {
constructor() {
super({
width: 500,
height: 450,
frame: false,
thickFrame: false,
skipTaskbar: true,
alwaysOnTop: true,
show: false,
webPreferences: {nodeIntegration: true}
}, path.join(__dirname, './view/View.html'));
}
onMessage(message){
console.log('recieved message from renderer process', message)
}
}
let viewHandle = new MyViewHandle();
viewHandle.resize(300, 300);
viewHandle.move(500, 500);
viewHandle.validateOnScreen();
viewHandle.show(3000); // show for n seconds. If 0 or not provided, will keep visible.
viewHandle.hide();
console.log('view handle is visible?', viewHandle.visible);
viewHandle.send('hi from main process');
viewHandle.addWindowListener('blur', () => console.log('window blurred'));
const {XPromise} = require('js-desktop-base');
let promise = new XPromise();
promise.then(a => console.log(a));
promise.catch(a => console.log(a));
if (Math.random() > .5)
promise.resolve('resolved');
else
promise.reject('rejected');
const {RateLimitedRetryQueue} = require('js-desktop-base');
let queue = new RateLimitedRetryQueue();
queue.add(asyncGet1);
queue.add(asyncGet2);
queue.add(asyncGet3);