UNPKG

@ahmic/autoit-js

Version:
76 lines (73 loc) 3.41 kB
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