Giter Site home page Giter Site logo

643364103 / windows-ffi Goto Github PK

View Code? Open in Web Editor NEW

This project forked from venryx/windows-ffi

0.0 0.0 0.0 59 KB

NodeJS wrappers around Windows p-invoke/dll functions in user32, gdi32, etc. (based on node-ffi-napi)

License: MIT License

JavaScript 54.58% TypeScript 45.42%

windows-ffi's Introduction

Windows FFI

NodeJS wrappers around Windows p-invoke/dll functions in user32, gdi32, etc. (based on node-ffi-napi)

Installation

  • 1) Install ffi-napi in your project: npm i ffi-napi
    • 1.1) You may need to install the windows-build-tools first for ffi-napi to be able to build: npm install --global --production windows-build-tools
  • 2) Install: npm i windows-ffi
    • 2.1) If you're using windows-ffi in symlinked mode, supply the parent project's copy of the node-ffi libraries using the init code below:
       // Make sure the code below runs before windows-ffi is imported! (example approach: https://stackoverflow.com/a/42817956)
       import ffi from "ffi-napi";
       import ref from "ref-napi";
       import refStructDI from "ref-struct-di";
       import {SupplyConfig} from "windows-ffi/Dist/@UserSupplied/PreImportConfig.js";
      
       SupplyConfig({ffi, ref, refStructDI});
      

Usage

While this library is meant to gradually expand to cover more of the Windows API, it will never be 100%, because it's a "develop as you need it" sort of endeavor.

Some of the most common and/or noteworthy functionalities are shown below.

Capture image-data from a region on-screen

import {VRect, CaptureScreenshot, GetForegroundWindowHandle} from "windows-ffi";

// First capture a screenshot of a section of the screen.
const screenshot = CaptureScreenshot({
	windowHandle: GetForegroundWindowHandle(), // comment to screenshot all windows
	rectToCapture: new VRect(0, 0, 800, 600),
});

// The image-data is now stored in the `screenshot.buffer` Buffer object.
// Access it directly (and cheaply) using the helper functions on `screenshot`.
for (let x = 0; x < 800; x++) {
	console.log(`Pixel color at [${x}, 0] is:`, screenshot.GetPixel(x, 0).ToHex_RGB());
}

Performance:

  • Full-screen (2560x1440), all windows (ie. "desktop" window): ~80ms
  • Full-screen (2560x1440), single window: ~20ms
  • Region (700x200), all windows (ie. "desktop" window): ~50ms
  • Region (700x200), single window: ~4ms

Tasks

General:

  • Create an accompanying library for Windows-specific functionalities that do not require the ffi-napi dependency. (I've had pains with ffi-related building during NodeJS updates, so things that can be done without that dependency is beneficial to bundle separately)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.