From a6fb4f09115773f44d0c9aff494d81f253a0e04c Mon Sep 17 00:00:00 2001 From: Auca Maillot Date: Tue, 7 Apr 2026 12:07:25 -0300 Subject: [PATCH] add keychar --- src/index.ts | 9 +++++++-- src/lib/addon.c | 7 ++++++- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/index.ts b/src/index.ts index 9cc0cea..b48bb66 100644 --- a/src/index.ts +++ b/src/index.ts @@ -15,6 +15,7 @@ enum KeyToggle { } export enum EventType { + EVENT_KEY_TYPED = 3, EVENT_KEY_PRESSED = 4, EVENT_KEY_RELEASED = 5, EVENT_MOUSE_CLICKED = 6, @@ -25,13 +26,14 @@ export enum EventType { } export interface UiohookKeyboardEvent { - type: EventType.EVENT_KEY_PRESSED | EventType.EVENT_KEY_RELEASED + type: EventType.EVENT_KEY_TYPED | EventType.EVENT_KEY_PRESSED | EventType.EVENT_KEY_RELEASED time: number altKey: boolean ctrlKey: boolean metaKey: boolean shiftKey: boolean keycode: number + keychar: number } export interface UiohookMouseEvent { @@ -202,7 +204,7 @@ declare interface UiohookNapi { on(event: 'keydown', listener: (e: UiohookKeyboardEvent) => void): this on(event: 'keyup', listener: (e: UiohookKeyboardEvent) => void): this - + on(event: 'keytyped', listener: (e: UiohookKeyboardEvent) => void): this on(event: 'mousedown', listener: (e: UiohookMouseEvent) => void): this on(event: 'mouseup', listener: (e: UiohookMouseEvent) => void): this on(event: 'mousemove', listener: (e: UiohookMouseEvent) => void): this @@ -215,6 +217,9 @@ class UiohookNapi extends EventEmitter { private handler (e: UiohookKeyboardEvent | UiohookMouseEvent | UiohookWheelEvent) { this.emit('input', e) switch (e.type) { + case EventType.EVENT_KEY_TYPED: + this.emit('keytyped', e) + break case EventType.EVENT_KEY_PRESSED: this.emit('keydown', e) break diff --git a/src/lib/addon.c b/src/lib/addon.c index d4dffe9..85f55e5 100644 --- a/src/lib/addon.c +++ b/src/lib/addon.c @@ -57,11 +57,15 @@ napi_value uiohook_to_js_event(napi_env env, uiohook_event* event) { status = napi_create_double(env, (double)event->time, &e_time); NAPI_FATAL_IF_FAILED(status, "uiohook_to_js_event", "napi_create_double"); - if (event->type == EVENT_KEY_PRESSED || event->type == EVENT_KEY_RELEASED) { + if (event->type == EVENT_KEY_TYPED || event->type == EVENT_KEY_PRESSED || event->type == EVENT_KEY_RELEASED) { napi_value e_keycode; status = napi_create_uint32(env, event->data.keyboard.keycode, &e_keycode); NAPI_FATAL_IF_FAILED(status, "uiohook_to_js_event", "napi_create_uint32"); + napi_value e_keychar; + status = napi_create_uint32(env, event->data.keyboard.keychar, &e_keychar); + NAPI_FATAL_IF_FAILED(status, "uiohook_to_js_event", "napi_create_uint32"); + napi_property_descriptor descriptors[] = { { "type", NULL, NULL, NULL, NULL, e_type, napi_enumerable, NULL }, { "time", NULL, NULL, NULL, NULL, e_time, napi_enumerable, NULL }, @@ -70,6 +74,7 @@ napi_value uiohook_to_js_event(napi_env env, uiohook_event* event) { { "metaKey", NULL, NULL, NULL, NULL, e_metaKey, napi_enumerable, NULL }, { "shiftKey", NULL, NULL, NULL, NULL, e_shiftKey, napi_enumerable, NULL }, { "keycode", NULL, NULL, NULL, NULL, e_keycode, napi_enumerable, NULL }, + { "keychar", NULL, NULL, NULL, NULL, e_keychar, napi_enumerable, NULL }, }; status = napi_define_properties(env, event_obj, sizeof(descriptors) / sizeof(descriptors[0]), descriptors); NAPI_FATAL_IF_FAILED(status, "uiohook_to_js_event", "napi_define_properties");