Skip to content

This package is a native addon for Node.js that allows you to perform various utility operations on Windows systems. It includes key event listeners, window data retrieval, window screenshot capture functionality, mouse movement, mouse click, mouse drag, and typing functionality, also I included precompiled libs of OpenCV(core, imgcodecs, imgproc)

License

Notifications You must be signed in to change notification settings

RynerNO/node-native-win-utils

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

33 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

License

"Buy Me A Coffee"

USDT TRC20 - TYAJ3K3MZraJhWimxxeCKcJ2SYABkVsrzi

USDT TON - UQDokuYZXr4OHvfslDqUoFYcp1_F8tcjQPk_TvqSSDk7SIa7

BTC - 1A3mNKFdWKXZ7Bcnez8LbWbYHgck1g4GeV

NOT - UQDokuYZXr4OHvfslDqUoFYcp1_F8tcjQPk_TvqSSDk7SIa7

Will be very thankful for any support

Node Native Win Utils

I did it for myself because I didn't feel like dealing with libraries like 'node-ffi' to implement this functionality. Maybe someone will find it useful. It's WINDOWS OS ONLY

This package is a native addon for Node.js that allows you to perform various utility operations on Windows systems. It includes key event listeners, window data retrieval, window screenshot capture functionality, mouse movement, mouse click, mouse drag, and typing functionality, also I included precompiled libs of OpenCV(core, imgcodecs, imgproc)

VESRION 1.3.3

Added a new function to simulate button press and release (keyPress), introduced an enumeration KeyCodesHelper with the most common key codes, and fixed a bug where the typeString function was not working with languages other than English.

Installation

You can install the package using npm:

  

npm  install  node-native-win-utils

  

Usage

Importing the Package

To use the package, import the necessary functions, types, and classes:

import {

keyDownHandler,

keyUpHandler,

getWindowData,

captureWindow,

captureWindowN,

mouseMove,

mouseClick,

mouseDrag,

typeString,

OpenCV,

} from  "node-native-win-utils";

Key Event Listeners

The package provides keyDownHandler and keyUpHandler functions, which allow you to register callbacks for key down and key up events, respectively. The callbacks receive the keyCode as a parameter:

keyDownHandler((keyCode) => {

console.log("Key down:", keyCode);

});

  

// Key down: 8

  

keyUpHandler((keyCode) => {

console.log("Key up:", keyCode);

});

  

// Key up: 8

Key Press

The keyPress function allows you to simulate a key press event. Provide the keyCode as a parameter and optionally the number of times to press the key:

keyPress(65); // Press 'A' key once

  

keyPress(65, 3); // Press 'A' key three times

Key Code Helper

The KeyCodeHelper enum provides a set of key codes that can be used with key event functions:

  

import { KeyCodeHelper } from  "node-native-win-utils";

  

console.log(KeyCodeHelper.A); // Outputs the key code for 'A'

Window Data

The getWindowData function retrieves information about a specific window identified by its name. It returns an object with properties width, height, x, and y, representing the window dimensions and position:

const  windowData  =  getWindowData("Window Name");

  

console.log("Window data:", windowData);

  

// Window data: { width: 800, height: 600, x: 50, y: 50 }

Window Capture

The captureWindow function allows you to capture a screenshot of a specific window identified by its name. Provide the window name and the output path as parameters:

captureWindow("Window Name", "output.png");

  

// Output: output.png with a screenshot of the window

Mouse Movement

The mouseMove function allows you to move the mouse to a specific position on the screen. Provide the posX and posY coordinates as parameters:

mouseMove(100, 200);

Mouse Click

The mouseClick function allows you to perform a mouse click event. Optionally, you can specify the mouse button as a parameter ("left", "middle", or "right"). If no button is specified, a left mouse click is performed by default:

mouseClick(); // Left mouse click

  

mouseClick("right"); // Right mouse click

Mouse Drag

The mouseDrag function allows you to simulate dragging the mouse from one position to another. Provide the starting and ending coordinates (startX, startY, endX, endY) as parameters. Optionally, you can specify the speed at which the mouse should be dragged:

mouseDrag(100, 200, 300, 400);

  

mouseDrag(100, 200, 300, 400, 100); // Drag with speed 100

Typing

The typeString function allows you to simulate typing a string of characters. Provide the string to type as the stringToType parameter. Optionally, you can specify

a delay between each character (in milliseconds) using the delay parameter:

typeString("Hello, world!");

  

typeString("Hello, world!", 100); // Type with a delay of 100ms between characters

Key Listener Class

The KeyListener class extends the EventEmitter class and simplifies working with the keyDownHandler and keyUpHandler functions. You can register event listeners for the "keyDown" and "keyUp" events using the on method:

const  listener  =  new  KeyListener();

  

listener.on("keyDown", (data) => {

console.log("Key down:", data.keyCode, data.keyName);

});

  

// Key down: 8 Backspace

  

listener.on("keyUp", (data) => {

console.log("Key up:", data.keyCode, data.keyName);

});

  

// Key up: 8 Backspace

OpenCV

The OpenCV class extends the capabilities of the native addon package by providing various image processing functionalities. It allows users to perform operations such as matching templates, blurring images, converting color formats, drawing rectangles, getting image regions, and writing images to files.

Constructor

const  image  =  new  OpenCV(image: string  |  ImageData)

Creates a new instance of the OpenCV class with the specified image data. The image parameter can be either a file path (string) or an existing ImageData object.

Properties

imageData: ImageData

Holds the underlying image data that will be used for image processing operations.

width: number

Read-only property that returns the width of the image in pixels.

height: number

Read-only property that returns the height of the image in pixels.

Methods

matchTemplate(template: ImageData, method?: number | null, mask?: ImageData): OpenCV

Matches a template image with the current image and returns a new OpenCV instance containing the result.

  • template: ImageData: The template image data to be matched.

  • method?: number | null: (Optional) The matching method to be used. If not provided, the default method will be used.(currently no implemented)

  • mask?: ImageData: (Optional) An optional mask image data to be used during the matching process.

blur(sizeX: number, sizeY: number): OpenCV

Applies a blur filter to the current image and returns a new OpenCV instance containing the blurred result.

  • sizeX: number: The size of the blur kernel in the X direction.

  • sizeY: number: The size of the blur kernel in the Y direction.

bgrToGray(): OpenCV

Converts the current image from the BGR color format to grayscale and returns a new OpenCV instance containing the grayscale result.

drawRectangle(start: Point, end: Point, rgb: Color, thickness: number): OpenCV

Draws a rectangle on the current image and returns a new OpenCV instance containing the modified result.

  • start: Point: The starting point (top-left) of the rectangle.

  • end: Point: The ending point (bottom-right) of the rectangle.

  • rgb: Color: The color of the rectangle in the RGB format (e.g., { r: 255, g: 0, b: 0 } for red).

  • thickness: number: The thickness of the rectangle's border.

getRegion(region: ROI): OpenCV

Extracts a region of interest (ROI) from the current image and returns a new OpenCV instance containing the extracted region.

  • region: ROI: An object specifying the region of interest with properties x, y, width, height.
imwrite(path: string): void

Writes the current image to a file specified by the path.

  • path: string: The file path where the image will be saved.

Functions

Function Parameters Return Type
keyDownHandler callback: (keyCode: number) => void void
keyUpHandler callback: (keyCode: number) => void void
getWindowData windowName: string WindowData
captureWindow windowName: string, outputPath: string void
mouseMove posX: number, posY: number boolean
mouseClick button?: "left" | "middle" | "right" boolean
mouseDrag startX: number, startY: number, endX: number, endY: number, speed?: number boolean
typeString stringToType: string, delay?: number boolean
captureWindowN windowName: string Buffer
keyPress keyCode: number, repeat?: number boolean

Examples

Here are some examples of using the package:

// Example usage of the OpenCV class

import { OpenCV } from  "node-native-win-utils";

  

const  image  =  new  OpenCV("path/to/image.png");

  

const  template  =  new  OpenCV("path/to/template.png");

const  matchedImage  =  image.matchTemplate(template.imageData);

  

const  blurredImage  =  image.blur(5, 5);

  

const  grayscaleImage  =  image.bgrToGray();

  

const  regionOfInterest  = { x:  100, y:  100, width:  200, height:  150 };

const  regionImage  =  image.getRegion(regionOfInterest);

  

const  redColor  = { r:  255, g:  0, b:  0 };

const  thickRectangle  =  image.drawRectangle(

{ x:  50, y:  50 },

{ x:  150, y:  150 },

redColor,

3

);

  

matchedImage.imwrite("output/matched.png");

blurredImage.imwrite("output/blurred.png");

grayscaleImage.imwrite("output/grayscale.png");

regionImage.imwrite("output/region.png");

thickRectangle.imwrite("output/thick_rectangle.png");
// If you want to aply blur and convert to gray then do it that order:

image.blur(5, 5).bgrToGray();

// Otherwise you will get an error.

Please note that the above example demonstrates the usage of different methods available in the OpenCV class. Make sure to replace "path/to/image.png" and "path/to/template.png" with actual image file paths.

import {

keyDownHandler,

keyUpHandler,

getWindowData,

captureWindow,

mouseMove,

mouseClick,

mouseDrag,

typeString,

KeyListener,

} from  "node-native-win-utils";

  

// Register key event handlers

  

keyDownHandler((keyCode) => {

console.log("Key down:", keyCode);

});

  

// Key down: 123

  

keyUpHandler((keyCode) => {

console.log("Key up:", keyCode);

});

  

// Key up: 123

  

// Retrieve window data

  

const  windowData  =  getWindowData("My Window");

  

console.log("Window data:", windowData);

  

// Window data: { width: 1024, height: 768, x: 100, y: 100 }

  

// Capture window screenshot

  

captureWindow("My Window", "output.png");

  

// Output: output.png with a screenshot of the window

  

// Move the mouse

  

mouseMove(100, 200);

  

// Perform mouse click

  

mouseClick(); // Left mouse click

  

mouseClick("right"); // Right mouse click

  

// Simulate mouse drag

  

mouseDrag(100, 200, 300, 400);

  

mouseDrag(100, 200, 300, 400, 100); // Drag with speed 100

  

// Simulate typing

  

typeString("Hello, world!");

  

typeString("Hello, world!", 100); // Type with a delay of 100ms between characters

  

// Use KeyListener class

  

const  listener  =  new  KeyListener();

  

listener.on("keyDown", (data) => {

console.log("Key down:", data.keyCode, data.keyName);

});

  

// Key down: keyCode keyName

  

listener.on("keyUp", (data) => {

console.log("Key up:", data.keyCode, data.keyName);

});

  

// Key up: keyCode keyName

  
  

TODO

  • Write proper tests

  • Add more useful functions

  • Fix issue with Windows scale for font,text,apps

OpenCV License MIT License

About

This package is a native addon for Node.js that allows you to perform various utility operations on Windows systems. It includes key event listeners, window data retrieval, window screenshot capture functionality, mouse movement, mouse click, mouse drag, and typing functionality, also I included precompiled libs of OpenCV(core, imgcodecs, imgproc)

Topics

Resources

License

Stars

Watchers

Forks

Languages