npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

ahknodejs

v2.0.0

Published

Communication between AutoHotKey and NodeJS.

Downloads

14

Readme

AHK NodeJS

AHK NodeJS allows users to communicate with AutoHotKey using NodeJS. Updated for AutoHotkey v2.0.3

Contents

Installation

Use npm to install AHK NodeJS. If AutoHotKey.exe is not installed on your computer, please install it or refer to another npm module, ahk.exe, AHK Releases.

npm i ahknodejs

Important Notes

  • When a parameter is followed by a question mark, it means it is optional
  • If curly brackets are to be used in strings, the must be escaped as such: "\\{"
  • Special characters in strings can be typed the same way as in AutoHotKey, as shown here
  • AHKNodeJS executes AHK commands in a set order asynchronously, so await is pretty much required as AHK commands attempting to run synchronously will likely crash the script.
  • When RGB hex strings are mentioned, it is talking about a color focused as RRGGBB without a 0x or # prefix

Initiation

const ahk = await require("ahknodejs")(Path, Hotkeys?, Options?);

Path - A string representing the location of AutoHotKey.exe. You can use this with package ahk.exe or ahk2.exe if you don't have an installation.

  • v1: const ahk = await require('akhnodejs')(require('ahk.exe'))
  • v2: const ahk = await require('ahknodejs')(require('ahk2.exe'))

Hotkeys - A list of either strings and/or objects representing the hotkeys that will be used. The hotkeys will need to be set in order to be used.

  • If a string is used, it will be formatted the same way AutoHotKey hotkeys are formatted. This is further explained here.
  • If an object is used, it be in one of two forms depending on if multiple keys are used in the hotkey

Note: if noInterrupt is set to true, the keys will still be sent when the hotkey is triggered. This option defaults to false.

One Key:

{
  key: "KEY TO LISTEN",
  modifiers: [
    "list of modifiers"
  ],
  noInterrupt: true or false
}

Modifiers that can be used are win, alt, control, shift, and any (any modifier will trigger the hotkey). This defaults to an empty array if not provided.

Multiple Keys:

{
  keys: [
    "KEY TO LISTEN",
   ],
  noInterrupt: true or false
}

Note: If a multi-key hotkey is used, it will trigger no matter what modifers are present in accordance with AutoHotKey

Options:

An object with the options to set for AHKNodeJS. The properties are listed below:

  • defaultColorVariation - If the color variation is not set for imageSearch and pixelSearch, this number is automatically used. (Defaults to 1)
  • ahkV1 - If this is set to true, AHKNodeJS will use the AHK v1 runner. If this is set to false, AHKNodeJS will use the AHK v2 runner. Note: this does not affect the AHK path. (Defaults to false)

Returns - The AHK object

The AHK Object

The AHK object holds all the functions that are used to communicate with AutoHotKey as well as other properties that may be useful. Such properties and functions will be listed below.

Note: In the following bits of code, AHK is the AHK object.

Properties

  • Options - The AHK object contains the options that were used to initiate it as different properties of the AHK object. If an option was not set, the property in the AHK object will be the default value. If this value is changed, it will be as if AHKNodeJS had initialized with that option changed.
  • width - The width of the screen (Do not change)
  • height - The height of the screen (Do not change)
  • hotkeys - An object containing each hotkey and the function that it runs once pressed. (Do not change)
  • hotkeysPending - An array containing the functions that are pending to be run in a waitForInterrupt

toPercent

Converts a pair of coordinates to percentages of the screen's width and height

var percentages = ahk.toPercent([x, y]);

x - The x coordinate

y - The y coordinate

Returns - [Percent of screen's width, Percent of screen's height]


toPx

Converts a pair of coordinates to percentages of the screen's width and height

var percentages = ahk.toPx([x, y]);

x - The percent of the screen's width

y - The percent of the screen's height

Returns - [x-coordinate, y-coordinate]


setHotkey

Binds a hotkey to a function

ahk.setHotkey(hotkey, toRun, instant?);

hotkey - The object or string hotkey used in the intitialization of AHKNodeJS

toRun - An async or normal function that will be run when the hotkey is triggered and run in waitForInterrupt

instant - A boolean that determines whether or not the function will be run instantly. If this is set to true, toRun should not contain any AHK communication as it could result in two AHK functions running synchronously which would likely crash the script.


sleep

Sleeps for a certain amount of time

await ahk.sleep(ms);

ms - The amount of time to wait for in milliseconds


waitForInterrupt

Checks if any hotkeys have been pressed and executes their functions asynchronously in order from oldest hotkey pressed to newest. Once all functions have been executed, this function is resolved.

await ahk.waitForInterrupt();

mouseMove

Moves the mouse to the specified position

await ahk.mouseMove({
  x: number,
  y: number,
  speed?: number,
  positioning?: string
});

x - The x coordinate or percent of the screen's width to move to

y - The y coordinate or percent of the screen's height to move to

speed - The speed of the mouse on a range of (0 - 100). A speed of 0 will move the mouse instantly to its position, and if not specified, the mouse speed will default to the speed set by setMouseSpeed

positioning - If positioning is set to %, then x and y will be interpreted as percentages of the screen's width and height rather than coordinates


click

Clicks the mouse. If x and y are specified, the mouse will move at the speed set by setMouseSpeed. If no parameters are provided, it will perform one left click at the mouse's current position.

await ahk.click({
  x?: number,
  y?: number,
  positioning?: string,
  button?: string,
  state?: string,
  count?: number
}?);

x - The x coordinate or percent of the screen's width to click the mouse at

y - The y coordinate or percent of the screen's height to click the mouse at

positioning - If positioning is set to %, then x and y will be interpreted as percentages of the screen's width and height rather than coordinates

button - Controls which mouse button will be clicked. If button is set to left, it will left click. If button is set to middle, it will middle click. If button is set to right, it will right click. This value defaults to left.

state - Controls the state of the mouse button. If state is set to down, it will hold the mouse button down. If state is set to up, it will release the mouse button. If no state is specified, it will send the mouse button down and back up.

count - The amount of clicks that it will perform. This value defaults to one.


clickPlay

Clicks the mouse using SendPlay. It is the same as click in every other way.

await ahk.click({
  x?: number,
  y?: number,
  positioning?: string,
  button?: string,
  state?: string,
  count?: number
}?);

x - The x coordinate or percent of the screen's width to click the mouse at

y - The y coordinate or percent of the screen's height to click the mouse at

positioning - If positioning is set to %, then x and y will be interpreted as percentages of the screen's width and height rather than coordinates

button - Controls which mouse button will be clicked. If button is set to left, it will left click. If button is set to middle, it will middle click. If button is set to right, it will right click. This value defaults to left.

state - Controls the state of the mouse button. If state is set to down, it will hold the mouse button down. If state is set to up, it will release the mouse button. If no state is specified, it will send the mouse button down and back up.

count - The amount of clicks that it will perform. This value defaults to one.


clipboard

Accesses the clipboard. If value is not specified, it returns the current clipboard. If value is specified, it will set the clipboard to value.

var clipboard = await ahk.clipboard(value?);

value - The string that the clipboard will be set to

Returns - The value of the clipboard if no parameter is passed in


imageSearch

Searches for a color in a specified area

var found = await ahk.imageSearch({
  x1: number,
  y1: number,
  x2: number,
  y2: number,
  imgPath: string,
  variation?: number,
  trans?: string,
  positioning?: string
});

x1 - The x coordinate or percent of the screen's width of the top left corner of the rectangle that the color will be searched for

y1 - The y coordinate or percent of the screen's height of the top left corner of the rectangle that the color will be searched for

x2 - The x coordinate or percent of the screen's width of the bottom right corner of the rectangle that the color will be searched for

y2 - The y coordinate or percent of the screen's height of the bottom right corner of the rectangle that the color will be searched for

imgPath - A string representing the path to the image to be searched. This path is either relative to the current working directory or an absolute file path.

variation - A number showing the amount of shades a pixel's red, green, and blue values can be off by ranging from (0 - 255). Defaults to the option, defaultColorVariation.

trans - An RGB hex string representing the color that should be treated as transparent and match any color.

positioning - If positioning is set to %, then x1, y1, x2, and y2 will be interpreted as percentages of the screen's width and height rather than coordinates

Returns - If the image is not found, it returns null. If normal positioning is used, it returns [x, y] where x and y are the coordinates of the top left corner of the found image. If percent positioning is used, it returns [x, y] where x and y are percentages of the screen.


pixelSearch

Searches for a color in a specified area

var found = await ahk.pixelSearch({
  x1: number,
  y1: number,
  x2: number,
  y2: number,
  color: string,
  variation?: number,
  positioning?: string
});

x1 - The x coordinate or percent of the screen's width of the top left corner of the rectangle that the color will be searched for

y1 - The y coordinate or percent of the screen's height of the top left corner of the rectangle that the color will be searched for

x2 - The x coordinate or percent of the screen's width of the bottom right corner of the rectangle that the color will be searched for

y2 - The y coordinate or percent of the screen's height of the bottom right corner of the rectangle that the color will be searched for

color - An RGB hex string representing the color that should be searched for in.

variation - A number showing the amount of shades a pixel's red, green, and blue values can be off by ranging from (0 - 255). Defaults to the option, defaultColorVariation.

positioning - If positioning is set to %, then x1, y1, x2, and y2 will be interpreted as percentages of the screen's width and height rather than coordinates

Returns - If no pixel with the specified color is found, it returns null. If normal positioning is used, it returns [x, y] where x and y are the coordinates of the first pixel with the specified color. If percent positioning is used, it returns [x, y] where x and y are percentages of the screen.


getPixelColor

Gets the specified pixel's color

var color = await ahk.getPixelColor({
  x: number,
  y: number,
  positioning?: string,
  mode?: string
});

x - The x coordinate or percent of the screen's width to click the mouse at

y - The y coordinate or percent of the screen's height to click the mouse at

positioning - If positioning is set to %, then x and y will be interpreted as percentages of the screen's width and height rather than coordinates

mode - The mode documented by AutoHotKey. This string can either be slow or alt.

Returns - The color of the pixel formatted as an RGB hex string.


getMousePos

Gets the position of the mouse.

var position = await ahk.getMousePos(positioning?);

positioning - The string that the clipboard will be set to

Returns - If normal positioning is used, it returns [x, y] where x and y are the coordinates of the mouse. If percent positioning is used, it returns [x, y] where x and y are percentages of the screen.


send

Sends the provided string possibly wrapped in an object.

await ahk.send({
  msg: string,
  blind?: boolean
} | msg);

msg - The message to send

blind - Whether or not blind mode will be used


sendInput

Sends the provided string using sendInput possibly wrapped in an object.

await ahk.sendInput({
  msg: string,
  blind?: boolean
} | msg);

msg - The message to send

blind - Whether or not blind mode will be used


sendPlay

Sends the provided string using sendPlay possibly wrapped in an object.

await ahk.sendPlay({
  msg: string,
  blind?: boolean
} | msg);

msg - The message to send

blind - Whether or not blind mode will be used


setKeyDelay

Sets the key delay and duration for play or normal send. Either duration or delay should be present.

await ahk.setKeyDelay({
  delay?: number,
  duration?: number,
  play?: boolean
});

delay - The milliseconds between each key press

duration - The duration of how long the keys will stay down for

play - Determines whether the provided parameters will be applied to sendPlay. This defaults to false.


setMouseSpeed

Sets the default mouse speed to the provided number.

await ahk.setMouseSpeed(speed);

speed - A number from (0 - 100) of how fast the mouse will move by default. A speed of 0 will instantly move the mouse.


shutdown

Shuts down the entire computer. Because it shuts down the computer, this will return nothing nor wait for AHK to return anything.

ahk.shutdown();

Examples

A script that exits on \, clicks on ], and clicks every 5 seconds.

  • v1:
async function allCode() {
  const ahk = await require('./AHKNodeJS')(require('ahk.exe'), [
    { key: '\\', noInterrupt: true },
    { key: ']', noInterrupt: true },
  ]);
  ahk.setHotkey(
    { key: '\\', noInterrupt: true },
    function () {
      process.exit();
    },
    true,
  );
  ahk.setHotkey({ key: ']', noInterrupt: true }, async function () {
    await ahk.click();
  });
  while (true) {
    await ahk.waitForInterrupt();
    await ahk.click();
    await ahk.sleep(5000);
  }
}
allCode().catch(function (error) {
  console.log(error);
});
  • v2:
const ahkexepath = 'C:/Program Files/AutoHotkey/v2/AutoHotkey.exe';

async function allCode() {
  const ahk = await require('ahknodejs')(ahkexepath, [
    { key: '\\', noInterrupt: true },
    { key: ']', noInterrupt: true },
  ]);

  ahk.setHotkey(
    { key: '\\', noInterrupt: true },
    function () {
      process.exit();
    },
    true,
  );

  ahk.setHotkey({ key: ']', noInterrupt: true }, async function () {
    await ahk.click();
  });

  while (true) {
    await ahk.waitForInterrupt();
    await ahk.click();
    await ahk.sleep(5000);
  }
}

try {
  allCode();
} catch (e) {
  console.log(e);
}

License

MIT