UNPKG

node-libuiohook

Version:
78 lines (77 loc) 2.92 kB
/// <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;