@energypatrikhu/keysender
Version:
Node.js keyboard and mouse inputs emulator, global hotkey register for Windows
322 lines (299 loc) • 8.18 kB
text/typescript
import { _Worker } from "../addon";
import { SetWorkwindow, CancelableFunction } from "./utils";
export type Delay = number | [from: number, to: number];
export type KeyboardRegularButton =
| "backspace"
| "tab"
| "enter"
| "pause"
| "capsLock"
| "escape"
| "space"
| "pageUp"
| "pageDown"
| "end"
| "home"
| "left"
| "up"
| "right"
| "down"
| "printScreen"
| "insert"
| "delete"
| "0"
| "1"
| "2"
| "3"
| "4"
| "5"
| "6"
| "7"
| "8"
| "9"
| "a"
| "b"
| "c"
| "d"
| "e"
| "f"
| "g"
| "h"
| "i"
| "j"
| "k"
| "l"
| "m"
| "n"
| "o"
| "p"
| "q"
| "r"
| "s"
| "t"
| "u"
| "v"
| "w"
| "x"
| "y"
| "z"
| "num0"
| "num0"
| "num1"
| "num2"
| "num3"
| "num4"
| "num5"
| "num6"
| "num7"
| "num8"
| "num9"
| "num*"
| "num+"
| "num,"
| "num-"
| "num."
| "num/"
| "f1"
| "f2"
| "f3"
| "f4"
| "f5"
| "f6"
| "f7"
| "f8"
| "f9"
| "f10"
| "f11"
| "f12"
| "f13"
| "f14"
| "f15"
| "f16"
| "f17"
| "f18"
| "f19"
| "f20"
| "f21"
| "f22"
| "f23"
| "f24"
| "numLock"
| "scrollLock"
| ";"
| "="
| ","
| "-"
| "."
| "/"
| "`"
| "["
| "\\"
| "]"
| "'";
export type KeyboardSpecButton =
| "alt"
| "ctrl"
| "shift"
| "lShift"
| "rShift"
| "lCtrl"
| "rCtrl"
| "lAlt"
| "rAlt"
| "lWin"
| "rWin";
export type KeyboardButton =
| KeyboardRegularButton
| KeyboardSpecButton
| number;
export type MouseButton = "left" | "right" | "middle" | "x1" | "x2";
export type Image = {
data: Buffer;
height: number;
width: number;
};
export type WindowInfo = {
handle: number;
className: string;
title: string;
};
export type Size = {
width: number;
height: number;
};
export type Position = {
x: number;
y: number;
};
export type RGB = [red: number, green: number, blue: number];
export type TextToImgOptions = {
/**
* if `true` - height of returned img will be equal to `fontSize` (some characters may be trimmed top or bottom)
* @default false
*/
enableActualHeight?: boolean;
/**
* @default true
*/
enableAntiAliasing?: boolean;
/**
* Text color
* @default 0xffffff
*/
color?: number | string | RGB;
/**
* @default 0
*/
backgroundColor?: number | string | RGB;
/**
* Color format of returned image
* * Note: `bgra` format has the best performance, but alpha chanel of each pixel is `0`
* @default "rgba"
*/
format?: "rgba" | "bgra" | "grey";
};
export interface Keyboard {
/**
* Toggling {@link key key or combination of keys} to provided {@link state}
* @param key - key or array with combination of keys
* @param state - {@link key} state selection: `true` for press, `false` for release
* @param [delay=0]- milliseconds to await after {@link key} toggling, if not provided defaults to `0`
*/
toggleKey(
key: KeyboardButton | KeyboardButton[],
state: boolean,
delay?: Delay
): Promise<void>;
/**
* Pressing and releasing {@link key key or combination of keys}
* @param key - key or array with combination of keys
* @param [delayAfterPress=35] - milliseconds to await after {@link key} pressed, if not provided defaults to `35`
* @param [delayAfterRelease=0] - milliseconds to await after {@link key} released, if not provided defaults to `0`
*/
sendKey(
key: KeyboardButton | KeyboardButton[],
delayAfterPress?: Delay,
delayAfterRelease?: Delay
): Promise<void>;
readonly sendKeys: CancelableFunction<{
/**
* Pressing and releasing array of {@link keys keys or combinations of keys}
* @param keys - array with keys
* @param [delayAfterPress=35] - milliseconds to await after each key pressed, if not provided defaults to `35`
* @param [delayAfterRelease=35] - milliseconds to await after each key released (excluding last), if not provided defaults to `35`
* @param [delay=0] - milliseconds to await after last key released, if not provided defaults to `0`
*/ (
keys: (KeyboardButton | KeyboardButton[])[],
delayAfterPress?: Delay,
delayAfterRelease?: Delay,
delay?: Delay
): Promise<void>;
}>;
readonly printText: CancelableFunction<{
/**
* Prints given text
* @param text - string to print
* @param [delayAfterCharTyping=0] - milliseconds to await after each char typing (excluding last), if not provided defaults to `0`
* @param [delay=0] - milliseconds to await after {@link text} printed, if not provided defaults to `0`
*/
(text: string, delayAfterCharTyping?: Delay, delay?: Delay): Promise<void>;
}>;
}
export interface Mouse extends Pick<_Worker, "getPos"> {
/**
* @param [button="left"] - name of mouse button, if not provided defaults to `"left"`
* @param [delayAfterPress=35] - milliseconds to await after {@link button} pressed, if not provided defaults to `35`
* @param [delayAfterRelease=0] - milliseconds to await after {@link button} released, if not provided defaults to `0`
*/
click(
button?: MouseButton,
delayAfterPress?: Delay,
delayAfterRelease?: Delay
): Promise<void>;
/**
* Switch mouse button state
* @param button - name of mouse button
* @param state - {@link button} state selection: `true` for press, `false` for release
* @param [delay=0] - milliseconds to await after switching {@link button} {@link state}, if not provided defaults to `0`
*/
toggle(button: MouseButton, state: boolean, delay?: Delay): Promise<void>;
/**
* Move mouse to [{@link x}, {@link y}] in current workwindow
* @param [delay=0] - milliseconds to await after mouse movement, if not provided defaults to `0`
*/
moveTo(x: number, y: number, delay?: Delay): Promise<void>;
/**
* Move mouse from current position by [{@link x}, {@link y}] relatively
* @param [delay=0] - milliseconds to await after mouse movement, if not provided defaults to `0`
*/
move(x: number, y: number, delay?: Delay): Promise<void>;
readonly humanMoveTo: CancelableFunction<{
/**
* Simulate human similar mouse movement from current cursor position to [{@link x}, {@link y}] in current workwindow
* @param [speed=5] - move speed, if not provided defaults to `5`
* @param [deviation=30] - movement curvature, if not provided defaults to `30`
* @param [delay=0] - milliseconds to await after movement end, if not provided defaults to `0`
*/
(
x: number,
y: number,
speed?: number,
deviation?: number,
delay?: Delay
): Promise<void>;
}>;
/**
* @param amount - the amount of wheel movement. A positive value indicates that the wheel was rotated forward, away from the user, a negative value indicates that the wheel was rotated backward, toward the user
* @param [delay=0] - milliseconds to await after wheel scroll, if not provided defaults to `0`
*/
scrollWheel(amount: number, delay?: Delay): Promise<void>;
}
export interface Workwindow
extends Pick<
_Worker,
| "refresh"
| "setForeground"
| "isForeground"
| "isOpen"
| "capture"
| "kill"
| "close"
| "getView"
| "setView"
> {
set: SetWorkwindow;
get(): WindowInfo;
colorAt: {
/**
* @param format - type of return value:
* * `"string"` for hexadecimal color representation "rrggbb"
* * `"array"` for array representation of color [r,g,b]
* * `"number"` for color representation in decimal
* * if not provided defaults to `"string"`
* @returns pixel color in [{@link x}, {@link y}] of current workwindow (or screen if `handle` was unset)
*/
(x: number, y: number, format?: "string"): string;
(x: number, y: number, format: "array"): RGB;
(x: number, y: number, format: "number"): number;
};
}