
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
Features
- Global keyboard event listener (
keyDown / keyUp)
- Window information & screenshots
- Mouse movement, clicks, drag & drop
- Keyboard emulation (
keyPress, typeString)
- OpenCV integration (template matching, blur, grayscale, histogram equalization, color manipulation, ROI, drawing)
- Tesseract OCR text recognition
- Screen capture
- Mouse event listener
- Prebuilt binaries (no Python or build tools required on Windows)
- ESM + CommonJS support
Requirements
- Windows 10 or later (x64)
- Node.js >= 18 (prebuilts for recent versions via
prebuildify)
Installation
npm install node-native-win-utils
Usage
import {
KeyboardListener,
KeyCodeHelper,
KeyListener,
getWindowData,
captureWindow,
captureWindowN,
captureScreenToFile,
mouseMove,
mouseClick,
mouseDrag,
typeString,
keyPress,
textRecognition,
OpenCV,
startMouseListener,
stopMouseListener,
} from "node-native-win-utils";
Keyboard
const listener = KeyboardListener.listener();
listener.on("keyDown", (data) => console.log("Down:", data.keyName));
listener.on("keyUp", (data) => console.log("Up:", data.keyName));
keyPress(KeyCodeHelper.A);
keyPress(KeyCodeHelper.Enter, 2);
Mouse & Typing
mouseMove(500, 300);
mouseClick();
mouseClick("right");
mouseClick("left", "down")
mouseClick("left", "up")
mouseDrag(100, 100, 800, 600, 50);
typeString("Hello from Node!", 30);
Window Operations
const data = getWindowData("Notepad");
console.log(data);
captureWindow("Notepad", "screenshot.png");
const buffer = captureWindowN("Notepad");
Screen Capture
await captureScreenToFile("full-screen.png");
Text Recognition (Tesseract OCR)
import path from "path";
const text = textRecognition(
path.join(__dirname, "traineddata"),
"eng",
path.join(__dirname, "image.png")
);
console.log(text);
OpenCV (image processing)
import { OpenCV } from "node-native-win-utils";
const img = new OpenCV("image.png");
const processed = img
.blur(5, 5)
.bgrToGray()
.equalizeHist()
.darkenColor([240, 240, 240], [255, 255, 255], 0.5)
.drawRectangle([10, 10], [200, 100], [255, 0, 0], 3)
.getRegion([50, 50, 300, 200]);
processed.imwrite("processed.png");
const match = img.matchTemplate(templateImage, , );
console.log(match);
Mouse Event Listener
startMouseListener(({ x, y, type }) => {
console.log(`${type} at ${x},${y}`);
});
mouseClick("left");
stopMouseListener();
Building from source
npm install
npm run build
Requires:
Visual Studio Build Tools (C++).
Python 3
License
--
OpenCV License
MIT License
Made with ❤️ for Windows automation.
Issues / PRs welcome!