Node bindings to native Win32 DLLs through Koffi.
- Very simple and intuitive API (see demos), with TypeScript definitions included.
- Bundler friendly, designed with tree-shakeability in mind.
- Opinionated:
- Only targets 64-bit platforms (Intel/AMD for now, ARM may be added later, no warranty though).
- Only exposes Unicode functions and data structures (those whose name ends in
W
in the Win32 API).
- Very easy to extend with additional functions, data structures and constants. I will add some myself time permitting; any help would be mucho appreciated.
- Install the lib in your project:
npm install libwin32
- Import the functions and types you need. You may either import from
libwin32
or fromlibwin32/<dllname>
(without the.dll
extension) if you know which dll a function belongs to. For example,import { MessageBox } from 'libwin32'
andimport { MessageBox } from 'libwin32/user32'
would both work. - (optional) Import some complementary constants. They greatly simplify calls to the Win32 API.
- All constants are available via the
libwin32/consts
import. - Logically grouped constants are exported as
enum
s, where the prefix is the name of the enum. For instance,WM_DESTROY
andWM_KEYDOWN
are members of theWM_
enum and can be accessed asWM_.DESTROY
andWM_.KEYDOWN
, respectively.
- All constants are available via the
- Call the functions as instructed by the Win32 API documentation. All functions, constants and types are named accordingly.
import { MessageBox } from 'libwin32'
import { MB_ } from 'libwin32/consts'
const result = MessageBox(
null,
"Hello, world!",
"libwin32",
MB_.ICONINFORMATION | MB_.YESNO
)
$ git clone https://github.com/Septh/libwin32.git
$ cd libwin32
$ npm install
$ npm run build
The output goes to /dist
.
Build the lib, then:
- Without bundling:
$ node dist/demos/messagebox.js
$ node dist/demos/enumdesktopwindows.js
$ node dist/demos/window.js
- With bundling:
$ npm run build:demos
$ node demos/messagebox/messagebox.js
$ node demos/enumdesktopwindows/enumdesktopwindows.js
$ node demos/window/window.js
See releases on Github.
All functions come with their associated types and constants.
Many thanks to @shrirajh for the impressive work on b2bf65b!
- user32.dll
- AppendMenu
- CheckMenuItem
- CreatePopupMenu
- DestroyMenu
- GetCursorPos
- SendMessage
- SetForegroundWindow
- TrackPopupMenu
- shell32.dll
- Shell_NotifyIcon
- user32.dll
- AdjustWindowRect
- AdjustWindowRectEx
- AnimateWindow
- BringWindowToTop
- BroadcastSystemMessage
- BroadcastSystemMessageEx
- CallWindowProc
- EnumWindows
- EnumDesktopWindows
- FindWindow
- FindWindowEx
- GetAncestor
- GetClassInfo
- GetClassInfoEx
- GetClassName
- GetWindowText
None.
- kernel32.dll
- GetLastError
- GetModuleHandle
- user32.dll
- CreateWindow
- CreateWindowEx
- DefWindowProc
- DestroyCursor
- DestroyIcon
- DispatchMessage
- GetMessage
- LoadCursor
- LoadIcon
- LoadImage
- MessageBox
- PostQuitMessage
- RegisterClass
- RegisterClassEx
- ShowWindow
- ShowWindowAsync
- TranslateMessageEx
- UnregisterClass
- UpdateWindow
./source/win32
:- The main bindings source files.
./source/demos
:- Some usage examples.
./source/rollup
:- Three Rollup plugins to ease the process of bundling this library with your own code and to boost its tree-shakeability. See rollup.demos.js for an example of usage.