// ES6 语法:import koffi from 'koffi';
const koffi = require("koffi");
// Win32 类型和函数
const user32 = koffi.load("user32.dll");
const INPUT_MOUSE = 0;
const INPUT_KEYBOARD = 1;
const INPUT_HARDWARE = 2;
const KEYEVENTF_KEYUP = 0x2;
const KEYEVENTF_SCANCODE = 0x8;
const VK_LWIN = 0x5b;
const VK_D = 0x44;
const MOUSEINPUT = koffi.struct("MOUSEINPUT", {
dx: "long",
dy: "long",
mouseData: "uint32_t",
dwFlags: "uint32_t",
time: "uint32_t",
dwExtraInfo: "uintptr_t",
});
const KEYBDINPUT = koffi.struct("KEYBDINPUT", {
wVk: "uint16_t",
wScan: "uint16_t",
dwFlags: "uint32_t",
time: "uint32_t",
dwExtraInfo: "uintptr_t",
});
const HARDWAREINPUT = koffi.struct("HARDWAREINPUT", {
uMsg: "uint32_t",
wParamL: "uint16_t",
wParamH: "uint16_t",
});
const INPUT = koffi.struct("INPUT", {
type: "uint32_t",
u: koffi.union({
mi: MOUSEINPUT,
ki: KEYBDINPUT,
hi: HARDWAREINPUT,
}),
});
const SendInput = user32.func("unsigned int __stdcall SendInput(unsigned int cInputs, INPUT *pInputs, int cbSize)");
// 使用 Win+D 快捷键显示/隐藏桌面
let events = [
make_keyboard_event(VK_LWIN, true),
make_keyboard_event(VK_D, true),
make_keyboard_event(VK_D, false),
make_keyboard_event(VK_LWIN, false),
];
SendInput(events.length, events, koffi.sizeof(INPUT));
// 辅助函数
function make_keyboard_event(vk, down) {
let event = {
type: INPUT_KEYBOARD,
u: {
ki: {
wVk: vk,
wScan: 0,
dwFlags: down ? 0 : KEYEVENTF_KEYUP,
time: 0,
dwExtraInfo: 0,
},
},
};
return event;
}