first commit
This commit is contained in:
@@ -0,0 +1,47 @@
|
||||
// OS input injection for Windows via user32 SendInput (koffi FFI).
|
||||
// On non-Windows platforms, exports a stub that logs instead of injecting,
|
||||
// so the agent can run in dev/test environments.
|
||||
|
||||
const { toVirtualKey } = require('./keymap');
|
||||
|
||||
const MOUSEEVENTF_MOVE = 0x0001;
|
||||
const MOUSEEVENTF_ABSOLUTE = 0x8000;
|
||||
const MOUSEEVENTF_LEFTDOWN = 0x0002;
|
||||
const MOUSEEVENTF_LEFTUP = 0x0004;
|
||||
const MOUSEEVENTF_RIGHTDOWN = 0x0008;
|
||||
const MOUSEEVENTF_RIGHTUP = 0x0010;
|
||||
const MOUSEEVENTF_MIDDLEDOWN = 0x0020;
|
||||
const MOUSEEVENTF_MIDDLEUP = 0x0040;
|
||||
const MOUSEEVENTF_WHEEL = 0x0800;
|
||||
const KEYEVENTF_KEYUP = 0x0002;
|
||||
const INPUT_MOUSE = 0;
|
||||
const INPUT_KEYBOARD = 1;
|
||||
|
||||
const BUTTON_DOWN = { 0: MOUSEEVENTF_LEFTDOWN, 1: MOUSEEVENTF_MIDDLEDOWN, 2: MOUSEEVENTF_RIGHTDOWN };
|
||||
const BUTTON_UP = { 0: MOUSEEVENTF_LEFTUP, 1: MOUSEEVENTF_MIDDLEUP, 2: MOUSEEVENTF_RIGHTUP };
|
||||
|
||||
function createWindowsInjector() {
|
||||
const koffi = require('koffi');
|
||||
const user32 = koffi.load('user32.dll');
|
||||
|
||||
const MOUSEINPUT = koffi.struct('MOUSEINPUT', {
|
||||
dx: 'long', dy: 'long', mouseData: 'int32',
|
||||
dwFlags: 'uint32', time: 'uint32', dwExtraInfo: 'uintptr_t',
|
||||
});
|
||||
const KEYBDINPUT = koffi.struct('KEYBDINPUT', {
|
||||
wVk: 'uint16', wScan: 'uint16',
|
||||
dwFlags: 'uint32', time: 'uint32', dwExtraInfo: 'uintptr_t',
|
||||
});
|
||||
const HARDWAREINPUT = koffi.struct('HARDWAREINPUT', {
|
||||
uMsg: 'uint32', wParamL: 'uint16', wParamH: 'uint16',
|
||||
});
|
||||
const INPUT_UNION = koffi.union('INPUT_UNION', {
|
||||
mi: MOUSEINPUT, ki: KEYBDINPUT, hi: HARDWAREINPUT,
|
||||
});
|
||||
const INPUT = koffi.struct('INPUT', { type: 'uint32', u: INPUT_UNION });
|
||||
|
||||
const SendInput = user32.func('uint32 SendInput(uint32 cInputs, INPUT *pInputs, int cbSize)');
|
||||
const INPUT_SIZE = koffi.sizeof(INPUT);
|
||||
|
||||
function sendMouse(mi) {
|
||||
SendInput(1, [{ type: INPUT_MOUSE, u: { mi:
|
||||
Reference in New Issue
Block a user