npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

node-native-win-utils

v1.3.3

Published

Native addon for Node.js providing utility operations on Windows systems

Downloads

65

Readme

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