@ahmic/autoit-js
Version:
Node.js bindings for AutoItX3.dll
76 lines (73 loc) • 3.41 kB
JavaScript
import koffi from 'koffi';
import { TOOLINFOW, ToolInfoW } from './@types/tool-info.js';
import { WinSleepSync, WinSleep } from './lib/kernel32.js';
import { CreateWindowExWSync, GetDesktopWindowSync, SendMessageWSync, DestroyWindowSync, MAKELPARAM } 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 TooltipSync(value, x = 0, y = 0, width = 400, timeout = 2000) {
const tooltipHandle = CreateWindowExWSync(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({
uId: 1,
hwnd: GetDesktopWindowSync(),
uFlags: TTF_TRACK | TTF_ABSOLUTE,
lpszText: value,
}));
const toolInfoPointer = koffi.address(toolInfo);
const addTooltipSuccess = SendMessageWSync(tooltipHandle, TTM_ADDTOOLW, 0, toolInfoPointer);
if (!addTooltipSuccess) {
DestroyWindowSync(tooltipHandle);
koffi.free(toolInfo);
return false;
}
SendMessageWSync(tooltipHandle, TTM_SETMAXTIPWIDTH, 0, width);
SendMessageWSync(tooltipHandle, TTM_TRACKPOSITION, 0, MAKELPARAM(x, y));
SendMessageWSync(tooltipHandle, TTM_TRACKACTIVATE, 1, toolInfoPointer);
WinSleepSync(timeout);
SendMessageWSync(tooltipHandle, TTM_TRACKACTIVATE, 0, toolInfoPointer);
const destroyWindowSuccess = DestroyWindowSync(tooltipHandle);
if (!destroyWindowSuccess) {
koffi.free(toolInfo);
return false;
}
koffi.free(toolInfo);
return true;
}
async function Tooltip(value, x = 0, y = 0, width = 400, timeout = 2000) {
const tooltipHandle = CreateWindowExWSync(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({
uId: 1,
hwnd: GetDesktopWindowSync(),
uFlags: TTF_TRACK | TTF_ABSOLUTE,
lpszText: value,
}));
const toolInfoPointer = koffi.address(toolInfo);
const addToolResult = SendMessageWSync(tooltipHandle, TTM_ADDTOOLW, 0, toolInfoPointer);
if (!addToolResult) {
DestroyWindowSync(tooltipHandle);
koffi.free(toolInfo);
return false;
}
SendMessageWSync(tooltipHandle, TTM_SETMAXTIPWIDTH, 0, width);
SendMessageWSync(tooltipHandle, TTM_TRACKPOSITION, 0, MAKELPARAM(x, y));
SendMessageWSync(tooltipHandle, TTM_TRACKACTIVATE, 1, toolInfoPointer);
await WinSleep(timeout);
SendMessageWSync(tooltipHandle, TTM_TRACKACTIVATE, 0, toolInfoPointer);
const destryoWindowResult = DestroyWindowSync(tooltipHandle);
koffi.free(toolInfo);
return !!destryoWindowResult;
}
export { Tooltip, TooltipSync };
//# sourceMappingURL=tooltip.js.map