win32-api
Version:
FFI definitions of windows win32 api for node-ffi
363 lines (336 loc) • 14.3 kB
JavaScript
/**
* win32-api
* FFI definitions of windows win32 api for node-ffi
*
* @version 6.2.0
* @author waiting
* @license MIT
* @link https://github.com/waitingsong/node-win32-api#readme
*/
'use strict';
Object.defineProperty(exports, '__esModule', { value: true });
var win32Def = require('win32-def');
var ffi = require('ffi');
const dllInst = new Map(); // for DLL.load() with settings.singleton === true
function load(dllName, dllFuncs, fns, settings) {
const st = parse_settings(settings);
if (st && st.singleton) {
let inst = get_inst_by_name(dllName);
if (!inst) {
inst = ffi.Library(dllName, gen_api_opts(dllFuncs, fns));
set_inst_by_name(dllName, inst);
}
return inst
}
else {
return ffi.Library(dllName, gen_api_opts(dllFuncs, fns))
}
}
// generate function definitions via converting macro windows data type (like PVOID) to the expected value
function gen_api_opts(dllFuncs, fns) {
const ret = {};
if (fns && Array.isArray(fns) && fns.length) {
for (const fn of fns) {
const ps = dllFuncs[fn];
if (ps) {
Object.defineProperty(ret, fn, {
value: ps,
writable: false,
enumerable: true,
configurable: false,
});
}
}
}
else {
for (const fn of Object.keys(dllFuncs)) {
const ps = dllFuncs[fn];
Object.defineProperty(ret, fn, {
value: ps,
writable: false,
enumerable: true,
configurable: false,
});
}
}
return ret
}
function get_inst_by_name(dllName) {
return dllInst.get(dllName)
}
function set_inst_by_name(dllName, inst) {
dllInst.set(dllName, inst);
}
function parse_settings(settings) {
const st = Object.assign({}, win32Def.Config.settingsDefault);
if (typeof settings !== 'undefined' && settings && Object.keys(settings).length) {
Object.assign(st, settings);
}
return st
}
const apiDef = {
InitCommonControlsEx: [win32Def.DTypes.BOOL, [win32Def.DTypes.LPINITCOMMONCONTROLSEX]],
};
const dllName = 'comctl32'; /* comctl32 */
const load$1 = (fns, settings) => load(dllName, apiDef, fns, settings);
var index = /*#__PURE__*/Object.freeze({
__proto__: null,
apiDef: apiDef,
dllName: dllName,
load: load$1
});
const apiDef$1 = {
FormatMessageW: [
win32Def.DTypes.DWORD,
[win32Def.DTypes.DWORD, win32Def.DTypes.LPCVOID, win32Def.DTypes.DWORD, win32Def.DTypes.DWORD, win32Def.DTypes.LPTSTR, win32Def.DTypes.DWORD, win32Def.DTypes.va_list],
],
FreeConsole: [win32Def.DTypes.BOOL, []],
/** err code: https://msdn.microsoft.com/zh-cn/library/windows/desktop/ms681381(v=vs.85).aspx */
GetLastError: [win32Def.DTypes.DWORD, []],
/** retrive value from buf by ret.ref().readUInt32() */
GetModuleHandleW: [win32Def.DTypes.HMODULE, [win32Def.DTypes.LPCTSTR]],
/** flags, optional LPCTSTR name, ref hModule */
GetModuleHandleExW: [win32Def.DTypes.BOOL, [win32Def.DTypes.DWORD, win32Def.DTypes.LPCTSTR, win32Def.DTypes.HMODULE]],
GetProcessHeaps: [win32Def.DTypes.DWORD, [win32Def.DTypes.DWORD, win32Def.DTypes.PHANDLE]],
GetSystemTimes: [win32Def.DTypes.BOOL, [win32Def.DTypes.PFILETIME, win32Def.DTypes.PFILETIME, win32Def.DTypes.PFILETIME]],
HeapFree: [win32Def.DTypes.BOOL, [win32Def.DTypes.HANDLE, win32Def.DTypes.DWORD, win32Def.DTypes.LPVOID]],
OpenProcess: [win32Def.DTypes.HANDLE, [win32Def.DTypes.DWORD, win32Def.DTypes.BOOL, win32Def.DTypes.DWORD]],
OutputDebugStringW: [win32Def.DTypes.VOID, [win32Def.DTypes.LPCTSTR]],
SetLastError: [win32Def.DTypes.VOID, [win32Def.DTypes.DWORD]],
SetThreadExecutionState: [win32Def.DTypes.INT, [win32Def.DTypes.INT]],
};
const dllName$1 = 'kernel32'; /* kernel32 */
const load$2 = (fns, settings) => load(dllName$1, apiDef$1, fns, settings);
var index$1 = /*#__PURE__*/Object.freeze({
__proto__: null,
apiDef: apiDef$1,
dllName: dllName$1,
load: load$2
});
const apiDef$2 = {
NtQueryInformationProcess: [win32Def.DTypes.NTSTATUS, [win32Def.DTypes.HANDLE, win32Def.DTypes.DWORD32, win32Def.DTypes.PVOID, win32Def.DTypes.ULONG, win32Def.DTypes.PULONG]],
};
const dllName$2 = 'ntdll'; /* ntdll */
const load$3 = (fns, settings) => load(dllName$2, apiDef$2, fns, settings);
var index$2 = /*#__PURE__*/Object.freeze({
__proto__: null,
apiDef: apiDef$2,
dllName: dllName$2,
load: load$3
});
const apiDef$3 = {
BringWindowToTop: [win32Def.DTypes.BOOL, [win32Def.DTypes.HWND]],
/** url: https://docs.microsoft.com/en-us/windows/desktop/api/winuser/nf-winuser-clienttoscreen */
ClientToScreen: [win32Def.DTypes.BOOL, [win32Def.DTypes.HWND, win32Def.DTypes.LPPOINT]],
CloseWindow: [win32Def.DTypes.BOOL, [win32Def.DTypes.HWND]],
CreateWindowExW: [win32Def.DTypes.HWND, [
win32Def.DTypes.DWORD, win32Def.DTypes.LPCTSTR, win32Def.DTypes.LPCTSTR, win32Def.DTypes.DWORD,
win32Def.DTypes.INT, win32Def.DTypes.INT, win32Def.DTypes.INT, win32Def.DTypes.INT,
win32Def.DTypes.HWND, win32Def.DTypes.HMENU, win32Def.DTypes.HINSTANCE, win32Def.DTypes.LPVOID,
]],
DefWindowProcW: [win32Def.DTypes.LRESULT, [win32Def.DTypes.HWND, win32Def.DTypes.UINT, win32Def.DTypes.WPARAM, win32Def.DTypes.LPARAM]],
DestroyWindow: [win32Def.DTypes.BOOL, [win32Def.DTypes.HWND]],
DispatchMessageW: [win32Def.DTypes.LRESULT, [win32Def.DTypes.LPMSG]],
EnumThreadWindows: [win32Def.DTypes.BOOL, [win32Def.DTypes.DWORD, win32Def.DTypes.WNDENUMPROC, win32Def.DTypes.LPARAM]],
EnumWindows: [win32Def.DTypes.BOOL, [win32Def.DTypes.WNDENUMPROC, win32Def.DTypes.LPARAM]],
FindWindowExW: [win32Def.DTypes.HWND, [win32Def.DTypes.HWND, win32Def.DTypes.HWND, win32Def.DTypes.LPCTSTR, win32Def.DTypes.LPCTSTR]],
GetAncestor: [win32Def.DTypes.HWND, [win32Def.DTypes.HWND, win32Def.DTypes.UINT]],
GetClassInfoExW: [win32Def.DTypes.BOOL, [win32Def.DTypes.HINSTANCE, win32Def.DTypes.LPCTSTR, win32Def.DTypes.LPWNDCLASSEX]],
GetForegroundWindow: [win32Def.DTypes.HWND, []],
GetMessageW: [win32Def.DTypes.BOOL, [win32Def.DTypes.LPMSG, win32Def.DTypes.HWND, win32Def.DTypes.UINT, win32Def.DTypes.UINT]],
GetParent: [win32Def.DTypes.HWND, [win32Def.DTypes.HWND]],
GetTopWindow: [win32Def.DTypes.HWND, [win32Def.DTypes.HWND]],
GetWindow: [win32Def.DTypes.HWND, [win32Def.DTypes.HWND, win32Def.DTypes.UINT]],
GetWindowInfo: [win32Def.DTypes.BOOL, [win32Def.DTypes.HWND, win32Def.DTypes.PWINDOWINFO]],
GetWindowLongW: [win32Def.DTypes.LONG, [win32Def.DTypes.HWND, win32Def.DTypes.INT]],
GetWindowTextW: [win32Def.DTypes.INT, [win32Def.DTypes.HWND, win32Def.DTypes.LPTSTR, win32Def.DTypes.INT]],
GetWindowThreadProcessId: [win32Def.DTypes.DWORD, [win32Def.DTypes.HWND, win32Def.DTypes.LPDWORD]],
IsWindowVisible: [win32Def.DTypes.BOOL, [win32Def.DTypes.HWND]],
PeekMessageW: [win32Def.DTypes.BOOL, [win32Def.DTypes.LPMSG, win32Def.DTypes.HWND, win32Def.DTypes.UINT, win32Def.DTypes.UINT, win32Def.DTypes.UINT]],
PostMessageW: [win32Def.DTypes.BOOL, [win32Def.DTypes.HWND, win32Def.DTypes.UINT, win32Def.DTypes.WPARAM, win32Def.DTypes.LPARAM]],
RegisterClassExW: [win32Def.DTypes.ATOM, [win32Def.DTypes.WNDCLASSEX]],
SendMessageW: [win32Def.DTypes.LRESULT, [win32Def.DTypes.HWND, win32Def.DTypes.UINT, win32Def.DTypes.WPARAM, win32Def.DTypes.LPARAM]],
SetWindowTextW: [win32Def.DTypes.BOOL, [win32Def.DTypes.HWND, win32Def.DTypes.LPCTSTR]],
SetWinEventHook: [win32Def.DTypes.HWINEVENTHOOK, [win32Def.DTypes.UINT, win32Def.DTypes.UINT, win32Def.DTypes.HMODULE, win32Def.DTypes.WINEVENTPROC, win32Def.DTypes.DWORD, win32Def.DTypes.DWORD, win32Def.DTypes.UINT]],
ShowWindow: [win32Def.DTypes.BOOL, [win32Def.DTypes.HWND, win32Def.DTypes.INT]],
TranslateMessage: [win32Def.DTypes.BOOL, [win32Def.DTypes.LPMSG]],
TranslateMessageEx: [win32Def.DTypes.BOOL, [win32Def.DTypes.LPMSG]],
UnhookWinEvent: [win32Def.DTypes.BOOL, [win32Def.DTypes.HWINEVENTHOOK]],
UpdateWindow: [win32Def.DTypes.BOOL, [win32Def.DTypes.HWND]],
};
/* istanbul ignore next */
if (process.arch === 'x64') {
apiDef$3.GetWindowLongPtrW = [win32Def.DTypes.LONG_PTR, [win32Def.DTypes.HWND, win32Def.DTypes.INT]];
}
/* --------- Window Styles ---------------- */
// https://msdn.microsoft.com/en-us/library/windows/desktop/ms632600(v=vs.85).aspx
const WS_BORDER = 0x00800000;
const WS_CAPTION = 0x00C00000;
const WS_CHILD = 0x40000000;
const WS_CLIPCHILDREN = 0x02000000;
const WS_CLIPSIBLINGS = 0x04000000;
const WS_DISABLED = 0x08000000;
const WS_DLGFRAME = 0x00400000;
const WS_GROUP = 0x00020000;
const WS_HSCROLL = 0x00100000;
const WS_ICONIC = 0x20000000;
const WS_MAXIMIZE = 0x01000000;
const WS_MAXIMIZEBOX = 0x00010000;
const WS_MINIMIZE = 0x20000000;
const WS_MINIMIZEBOX = 0x00020000;
const WS_OVERLAPPED = 0x00000000;
const WS_POPUP = 0x80000000; // The windows is a pop-up window
const WS_SIZEBOX = 0x00040000;
const WS_SYSMENU = 0x00080000; // The window has a window menu on its title bar.
const WS_TABSTOP = 0x00010000;
const WS_THICKFRAME = 0x00040000;
const WS_TILED = 0x00000000;
const WS_VISIBLE = 0x10000000;
const WS_VSCROLL = 0x00200000;
// tslint:disable-next-line
const WS_OVERLAPPEDWINDOW = (WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU |
WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX);
// tslint:disable-next-line
const WS_POPUPWINDOW = (WS_POPUP | WS_BORDER | WS_SYSMENU);
// tslint:disable-next-line
const WS_TILEDWINDOW = (WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU |
WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX);
/* --------- Extended Window Styles ---------------- */
// https://msdn.microsoft.com/en-us/library/windows/desktop/ff700543(v=vs.85).aspx
const WS_EX_ACCEPTFILES = 0x00000010;
const WS_EX_APPWINDOW = 0x00040000;
const WS_EX_CLIENTEDGE = 0x00000200;
const WS_EX_COMPOSITED = 0x02000000;
const WS_EX_CONTEXTHELP = 0x00000400;
const WS_EX_CONTROLPARENT = 0x00010000;
const WS_EX_DLGMODALFRAME = 0x00000001;
const WS_EX_LAYERED = 0x00080000;
const WS_EX_LAYOUTRTL = 0x00400000;
const WS_EX_LEFT = 0x00000000;
const WS_EX_LEFTSCROLLBAR = 0x00004000;
const WS_EX_LTRREADING = 0x00000000;
const WS_EX_MDICHILD = 0x00000040;
const WS_EX_NOACTIVATE = 0x08000000;
const WS_EX_NOINHERITLAYOUT = 0x00100000;
const WS_EX_NOPARENTNOTIFY = 0x00000004;
const WS_EX_NOREDIRECTIONBITMAP = 0x00200000;
const WS_EX_RIGHT = 0x00001000;
const WS_EX_RIGHTSCROLLBAR = 0x00000000;
const WS_EX_RTLREADING = 0x00002000;
const WS_EX_STATICEDGE = 0x00020000;
const WS_EX_TOOLWINDOW = 0x00000080;
const WS_EX_TOPMOST = 0x00000008;
const WS_EX_TRANSPARENT = 0x00000020;
const WS_EX_WINDOWEDGE = 0x00000100;
// tslint:disable-next-line
const WS_EX_OVERLAPPEDWINDOW = (WS_EX_WINDOWEDGE | WS_EX_CLIENTEDGE);
// tslint:disable-next-line
const WS_EX_PALETTEWINDOW = (WS_EX_WINDOWEDGE | WS_EX_TOOLWINDOW | WS_EX_TOPMOST);
const PM_NOREMOVE = 0x0000;
const PM_REMOVE = 0x0001;
const PM_NOYIELD = 0x0002;
var constants = /*#__PURE__*/Object.freeze({
__proto__: null,
WS_BORDER: WS_BORDER,
WS_CAPTION: WS_CAPTION,
WS_CHILD: WS_CHILD,
WS_CLIPCHILDREN: WS_CLIPCHILDREN,
WS_CLIPSIBLINGS: WS_CLIPSIBLINGS,
WS_DISABLED: WS_DISABLED,
WS_DLGFRAME: WS_DLGFRAME,
WS_GROUP: WS_GROUP,
WS_HSCROLL: WS_HSCROLL,
WS_ICONIC: WS_ICONIC,
WS_MAXIMIZE: WS_MAXIMIZE,
WS_MAXIMIZEBOX: WS_MAXIMIZEBOX,
WS_MINIMIZE: WS_MINIMIZE,
WS_MINIMIZEBOX: WS_MINIMIZEBOX,
WS_OVERLAPPED: WS_OVERLAPPED,
WS_POPUP: WS_POPUP,
WS_SIZEBOX: WS_SIZEBOX,
WS_SYSMENU: WS_SYSMENU,
WS_TABSTOP: WS_TABSTOP,
WS_THICKFRAME: WS_THICKFRAME,
WS_TILED: WS_TILED,
WS_VISIBLE: WS_VISIBLE,
WS_VSCROLL: WS_VSCROLL,
WS_OVERLAPPEDWINDOW: WS_OVERLAPPEDWINDOW,
WS_POPUPWINDOW: WS_POPUPWINDOW,
WS_TILEDWINDOW: WS_TILEDWINDOW,
WS_EX_ACCEPTFILES: WS_EX_ACCEPTFILES,
WS_EX_APPWINDOW: WS_EX_APPWINDOW,
WS_EX_CLIENTEDGE: WS_EX_CLIENTEDGE,
WS_EX_COMPOSITED: WS_EX_COMPOSITED,
WS_EX_CONTEXTHELP: WS_EX_CONTEXTHELP,
WS_EX_CONTROLPARENT: WS_EX_CONTROLPARENT,
WS_EX_DLGMODALFRAME: WS_EX_DLGMODALFRAME,
WS_EX_LAYERED: WS_EX_LAYERED,
WS_EX_LAYOUTRTL: WS_EX_LAYOUTRTL,
WS_EX_LEFT: WS_EX_LEFT,
WS_EX_LEFTSCROLLBAR: WS_EX_LEFTSCROLLBAR,
WS_EX_LTRREADING: WS_EX_LTRREADING,
WS_EX_MDICHILD: WS_EX_MDICHILD,
WS_EX_NOACTIVATE: WS_EX_NOACTIVATE,
WS_EX_NOINHERITLAYOUT: WS_EX_NOINHERITLAYOUT,
WS_EX_NOPARENTNOTIFY: WS_EX_NOPARENTNOTIFY,
WS_EX_NOREDIRECTIONBITMAP: WS_EX_NOREDIRECTIONBITMAP,
WS_EX_RIGHT: WS_EX_RIGHT,
WS_EX_RIGHTSCROLLBAR: WS_EX_RIGHTSCROLLBAR,
WS_EX_RTLREADING: WS_EX_RTLREADING,
WS_EX_STATICEDGE: WS_EX_STATICEDGE,
WS_EX_TOOLWINDOW: WS_EX_TOOLWINDOW,
WS_EX_TOPMOST: WS_EX_TOPMOST,
WS_EX_TRANSPARENT: WS_EX_TRANSPARENT,
WS_EX_WINDOWEDGE: WS_EX_WINDOWEDGE,
WS_EX_OVERLAPPEDWINDOW: WS_EX_OVERLAPPEDWINDOW,
WS_EX_PALETTEWINDOW: WS_EX_PALETTEWINDOW,
PM_NOREMOVE: PM_NOREMOVE,
PM_REMOVE: PM_REMOVE,
PM_NOYIELD: PM_NOYIELD
});
const dllName$3 = 'user32'; /* user32 */
const load$4 = (fns, settings) => load(dllName$3, apiDef$3, fns, settings);
var index$3 = /*#__PURE__*/Object.freeze({
__proto__: null,
apiDef: apiDef$3,
constants: constants,
dllName: dllName$3,
load: load$4
});
Object.defineProperty(exports, 'Config', {
enumerable: true,
get: function () {
return win32Def.Config;
}
});
Object.defineProperty(exports, 'DModel', {
enumerable: true,
get: function () {
return win32Def.DModel;
}
});
Object.defineProperty(exports, 'DStruct', {
enumerable: true,
get: function () {
return win32Def.DStruct;
}
});
Object.defineProperty(exports, 'DTypes', {
enumerable: true,
get: function () {
return win32Def.DTypes;
}
});
Object.defineProperty(exports, 'FModel', {
enumerable: true,
get: function () {
return win32Def.FModel;
}
});
exports.C = index;
exports.Comctl32 = index;
exports.K = index$1;
exports.Kernel32 = index$1;
exports.Ntdll = index$2;
exports.U = index$3;
exports.User32 = index$3;