@ahmic/autoit-js
Version:
Node.js bindings for AutoItX3.dll
36 lines (33 loc) • 1.68 kB
JavaScript
import koffi from 'koffi';
import { WinSleep } from './@types/kernel32.js';
import { TOOLINFOW, ToolInfoW } from './@types/tool-info.js';
import { CreateWindowExW, SendMessageW, MAKELPARAM, DestroyWindow } from './lib/user32.js';
const CW_USEDEFAULT = 0x80000000;
const WM_USER = 0x0400;
const WS_POPUP = 0x80000000;
const WS_EX_TOPMOST = 0x00000008;
const TTS_NOPREFIX = 0x02;
const TTS_ALWAYSTIP = 0x01;
const TTS_BALLOON = 0x40;
const TTF_TRACK = 0x0020;
const TTF_ABSOLUTE = 0x0080;
const TTM_ADDTOOLW = WM_USER + 50;
const TTM_TRACKACTIVATE = WM_USER + 17;
const TTM_TRACKPOSITION = WM_USER + 18;
const TTM_SETMAXTIPWIDTH = WM_USER + 24;
function Tooltip(value, x = 0, y = 0, characterWidth = 200, timeout = 2000) {
const tooltipHandle = CreateWindowExW(WS_EX_TOPMOST, 'tooltips_class32', null, WS_POPUP | TTS_NOPREFIX | TTS_ALWAYSTIP | TTS_BALLOON, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, null, null, null, null);
const toolInfo = koffi.alloc(TOOLINFOW, koffi.sizeof(TOOLINFOW));
koffi.encode(toolInfo, 0, TOOLINFOW, new ToolInfoW({ uFlags: TTF_TRACK | TTF_ABSOLUTE, lpszText: value }));
const toolInfoPointer = koffi.address(toolInfo);
SendMessageW(tooltipHandle, TTM_ADDTOOLW, 0, toolInfoPointer);
SendMessageW(tooltipHandle, TTM_SETMAXTIPWIDTH, 0, characterWidth);
SendMessageW(tooltipHandle, TTM_TRACKPOSITION, 0, MAKELPARAM(x, y));
SendMessageW(tooltipHandle, TTM_TRACKACTIVATE, 1, toolInfoPointer);
WinSleep(timeout);
SendMessageW(tooltipHandle, TTM_TRACKACTIVATE, 0, toolInfoPointer);
DestroyWindow(tooltipHandle);
koffi.free(toolInfo);
}
export { Tooltip };
//# sourceMappingURL=tooltip.js.map