node-libuiohook
Version:
NodeJS bindings for libuiohook
78 lines (77 loc) • 2.92 kB
JavaScript
/// <reference path="../index.d.ts" />
Object.defineProperty(exports, "__esModule", { value: true });
const events_1 = require("events");
const native = require("./iohook.node");
const enums_1 = require("./enums");
let EVENTS = null;
function initEvents() {
if (!!EVENTS)
return;
EVENTS = new Map();
EVENTS.set(3, enums_1.Events.keypress);
EVENTS.set(4, enums_1.Events.keydown);
EVENTS.set(5, enums_1.Events.keyup);
EVENTS.set(6, enums_1.Events.mouseclick);
EVENTS.set(7, enums_1.Events.mousedown);
EVENTS.set(8, enums_1.Events.mouseup);
EVENTS.set(9, enums_1.Events.mousemove);
EVENTS.set(10, enums_1.Events.mousedrag);
EVENTS.set(11, enums_1.Events.mousewheel);
}
class IOHook extends events_1.EventEmitter {
constructor() {
super();
initEvents();
this._isActive = false;
this._startHook();
}
start() {
this._startHook();
this._isActive = true;
}
pause() {
this._isActive = false;
}
stop() {
this.pause();
this._stopHook();
}
_startHook() {
if (this._isHookStarted)
return;
this._isHookStarted = true;
native.startHook(this._nativeEventHandler.bind(this));
}
_stopHook() {
if (!this._isHookStarted)
return;
this._isHookStarted = false;
native.stopHook();
}
_nativeEventHandler(nativeEvent) {
if (!nativeEvent || !this._isActive)
return;
if (!EVENTS.has(nativeEvent.type)) {
console.warn("unrecognized event type: ", nativeEvent.type, nativeEvent);
return;
}
let event = {
type: EVENTS.get(nativeEvent.type),
mask: nativeEvent.mask,
};
event = Object.assign({}, event, nativeEvent.mouse || nativeEvent.keyboard || nativeEvent.wheel);
this._decorateEventWithModifiers(event);
this.emit(event.type, event);
}
_decorateEventWithModifiers(event) {
event.isShiftPressed = (event.mask & enums_1.KeyModifiersMasks.Shift_L) === enums_1.KeyModifiersMasks.Shift_L
|| (event.mask & enums_1.KeyModifiersMasks.Shift_R) === enums_1.KeyModifiersMasks.Shift_R;
event.isCtrlPressed = (event.mask & enums_1.KeyModifiersMasks.Ctrl_L) === enums_1.KeyModifiersMasks.Ctrl_L
|| (event.mask & enums_1.KeyModifiersMasks.Ctrl_R) === enums_1.KeyModifiersMasks.Ctrl_R;
event.isAltPressed = (event.mask & enums_1.KeyModifiersMasks.Alt_L) === enums_1.KeyModifiersMasks.Alt_L
|| (event.mask & enums_1.KeyModifiersMasks.Alt_R) === enums_1.KeyModifiersMasks.Alt_R;
event.isMetaPressed = (event.mask & enums_1.KeyModifiersMasks.Meta_L) === enums_1.KeyModifiersMasks.Meta_L
|| (event.mask & enums_1.KeyModifiersMasks.Meta_R) === enums_1.KeyModifiersMasks.Meta_R;
}
}
exports.IOHook = IOHook;