The HTTP route is probably the right way to go. You can easily set up a small Server using Node.js Node.js, and have it spawn your AHK script using one of the Child Process functions. I don't know how the Chrome Extension security model works, so you might have to mitigate cross-site scripting concerns. I think that's solvable, but haven't done so.

Answer from Wade Hatler on Stack Overflow
🌐
AutoHotkey
autohotkey.com › boards › viewtopic.php
Communication between Autohotkey and Nodejs - AutoHotkey Community
October 11, 2019 - "\TestNode.js" if !FileExist(jsPath) FileAppend, % script, % jsPath Run, % "node """ jsPath """",, Hide, PID Process, Wait, % PID OnExit( Func("CloseNode").Bind(PID) ) Gui, Add, ActiveX, w200 h100 vWB, Shell.Explorer WB.Navigate("http://127.0.0.1:3000/") Loop { Sleep, 100 coll := WB.document.getElementsByTagName("button") } until coll.length coll[0].addEventListener("click", Func("OnClick").Bind(WB)) Gui, Show Return OnClick(WB) { MsgBox, % WB.document.documentElement.outerHTML } GuiClose() { ExitApp } CloseNode(PID) { Process, Close, % PID }
🌐
AutoHotkey
autohotkey.com › boards › viewtopic.php
AHK and Node JS, communication possible? - AutoHotkey Community
April 4, 2024 - handle hotkeys from ahk and do something on nodejs (javascript). Example: when press "h" console.log("hoello world from ahk to node js")
Discussions

jquery - How can I activate an AutoHotkey script using JavaScript? - Stack Overflow
I am developing a Chrome extension to help automate tasks. I have reached the point where I need my extension to trigger some AutoHotkey scripts. Is there any way I can trigger an AutoHotkey using More on stackoverflow.com
🌐 stackoverflow.com
Need to run node.js through autohotkey. So far my way is too slow.

Add the directory to your computer's path, then a simple "Run, node main.js" should work.

More on reddit.com
🌐 r/AutoHotkey
6
0
September 4, 2019
Running AutoHotkey from JavaScript
I have even searched for Chrome and Firefox plugins that wrap AutoHotkey :) It's a bit silly, but I'd be happy with bodgy solutions. I hope I didn't offend anyone by saying AHK is weird. It just makes me oddly uncomfortable. (I can't describe it better) More on reddit.com
🌐 r/AutoHotkey
13
1
April 12, 2020
any currently updated library that can do something like autohotkey in on javascript?

thanks. actually, those are the 2 i am looking at right now. Robots seems to be the most used one, but it stopped being updated 2 years ago. and nuts look solid, but almost no people seem to be using it.

do you have any personal experience using any of those?

More on reddit.com
🌐 r/node
6
1
January 27, 2023
🌐
GitHub
github.com › RichardX366 › AHKNodeJS
GitHub - RichardX366/AHKNodeJS: Allows for communication between AutoHotKey.exe and NodeJS, giving access to AHK functions in NodeJS.
Allows for communication between AutoHotKey.exe and NodeJS, giving access to AHK functions in NodeJS. - RichardX366/AHKNodeJS
Starred by 26 users
Forked by 8 users
Languages   JavaScript 76.6% | AutoHotkey 23.4% | JavaScript 76.6% | AutoHotkey 23.4%
🌐
AutoHotkey
autohotkey.com › boards › viewtopic.php
Using Node.js for stdout, how to listen stdin in AHKv2? - AutoHotkey Community
March 22, 2023 - import { ChildProcessWithoutNullStreams, spawn } from "child_process"; const child = spawn("C:/Program Files/AutoHotkey/v2/AutoHotkey64.exe", ["C:/scripts/AutoHotkey/v2/myScript.ahk"]); and then I think I can do something like this: child.stdin.write("Up" + "\n"); setTimeout(() => { child.stdin.write("Left" + "\n"); }, 1000); setTimeout(() => { child.stdin.write("Stop" + "\n"); }, 2000); setTimeout(() => { child.kill(); }, 3000); From AHK side, how would I listen for these things so that the script stays open and listens?
Top answer
1 of 2
2

The HTTP route is probably the right way to go. You can easily set up a small Server using Node.js Node.js, and have it spawn your AHK script using one of the Child Process functions. I don't know how the Chrome Extension security model works, so you might have to mitigate cross-site scripting concerns. I think that's solvable, but haven't done so.

2 of 2
1

Generally, two ways come to mind:

1. Emulating a HTTP Server using AHK

Using an own local web server (ideally a firsthand AHK implementation), you can directly communicate via AJAX calls. The server can then receive and delegate any kind of commands. For AHK, there exists Sparrow, but the project seems to be dead, and the source code links in the post are down; you'd have to get them from somewhere else (e.g. some svn repository). You could also implement a command line tool like KF Web Server and use it in conjunction with your script.

2. Defining your own protocol

Another solution would be to simply specify your own protocol and assign it to an executable, e.g. your script or some kind of dispatcher, that starts other applications depending on the parameters you pass it. This answer describes how to define your own protocol in windows. You can also check out the respective windows documentation.
If you're able to call custom protocols from within your browser with JavaScript strongly depends on your browser, and maybe its security settings. You'll need to check that out for your environment.

Security
No matter what solution you go with, giving a webpage the ability to run applications or even execute code opens up serious vulnerabilities. If an attacker finds out about your protocol, webserver, etc., they could easily inject their own stuff when you visit a website controlled by them. That's why you should at least implement two things:
a) Use some kind of authentication mechanism (e.g. HMAC). This makes exploitation at least a bit harder.
b) Never directly execute arguments as code. Always parse them and check their integrity.

🌐
Reddit
reddit.com › r/autohotkey › need to run node.js through autohotkey. so far my way is too slow.
Need to run node.js through autohotkey. So far my way is too slow. : r/AutoHotkey
September 4, 2019 - You need to add the "C:\My Scripts\Convex Hull" folder to your system path. That way you can run "node main.js" from any location, then the first "Run, cmd /k C:\My Scripts\Convex Hull" command will no longer be necessary.
🌐
Reddit
reddit.com › r/autohotkey › running autohotkey from javascript
r/AutoHotkey on Reddit: Running AutoHotkey from JavaScript
April 12, 2020 -

Does anybody know a way in which I can write my code in JavaScript and still use basic AHK-Functionality like... hotkeys... Exo doesn't support it and ActiveScript seems to be the other way around.

Why? It seems so weird to me to set up a Hotkey and only then assigning a label to it without even referring to this specific Hotkey in any way:
Hotkey, IfWinActive, ahk_class Notepad

Hotkey, ^!e, MyLabel ; Creates a hotkey that works only in Notepad.

I can't really comprehend that. And writing everything in for example C# seems a bit too... dedicated?.

I have to apologize for my bad english, it's not my main language.

Find elsewhere
🌐
npm
npmjs.com › package › node-ahk › v › 1.0.0
node-ahk - npm
September 11, 2020 - const nodegui = require('node-ahk'); ... gui.import("string") ; // Imports this string as autohotkey. gui.write("event", "message"); // Send a buffer to autohotkey....
      » npm install node-ahk
    
Published   Sep 14, 2020
Version   1.0.0
Author   Niiko
🌐
Reddit
reddit.com › r/node › any currently updated library that can do something like autohotkey in on javascript?
r/node on Reddit: any currently updated library that can do something like autohotkey in on javascript?
January 27, 2023 - Comment deleted by user · thanks. actually, those are the 2 i am looking at right now. Robots seems to be the most used one, but it stopped being updated 2 years ago. and nuts look solid, but almost no people seem to be using it
🌐
AutoHotkey
autohotkey.com › boards › viewtopic.php
Javascript Wrapper (similar to Node.js) - AutoHotkey Community
September 2, 2014 - FixIE(true) Gui Add, ActiveX, w800 h600 vwb, Shell.Explorer wb.Navigate("about:blank") blob = ( <script> function manualTrigger(){ var evt = document.createEvent('MouseEvents'); evt.initEvent("click", true, true); document.getElementById('btn').dispatchEvent(evt); } </script> <input type='button' id='btn' onclick='alert("JS says Hi!")' value='BUTTON'> <input type='button' onclick='manualTrigger()' value='BUTTON'> ) wb.document.write(blob) btn := wb.document.All.btn ComObjConnect(btn, "btn_") btn_onclick() { MsgBox, AHK says Hi!
🌐
AutoHotkey
autohotkey.com › boards › viewtopic.php
What's the best way to send commands in a NODE JS console window? - AutoHotkey Community
September 10, 2017 - Hello. So I basically a NODE JS script and I want to pass variables to it WHILE it's running. Unfortunately, these variables exist in an Autohotkey script.
🌐
Stack Overflow
stackoverflow.com › questions › 44579210 › node-trigger-key-key-combination-on-server
node.js - Node - Trigger key/key combination on server - Stack Overflow
June 16, 2017 - Though I have not used it myself. ... Sign up to request clarification or add additional context in comments. ... If you really like AutoHotkey, then you could simply trigger an AutoHotkey script from NodeJS.
🌐
Reddit
reddit.com › r/autohotkey › would one of you give me a quick crash course in how to interact with javascript using ahk to manipulate webpages?
r/AutoHotkey on Reddit: Would one of you give me a quick crash course in how to interact with JavaScript using AHK to manipulate webpages?
May 20, 2016 -

So I've avoided trying to interact with webpages via JavaScript since I started learning AHK, but curiosity has gotten the best of me.

You guys know I have the basics of AHK down and JavaScript was my very first "learn on my own" programming language. I'm so-so with it and haven't done a lot of it in YEARS.

Would any of you be able to give me a quick crash course on how to actually pass javascript commands to a browser?
I've seen people just do direct JavaScript injection via the address bar which I find to be very neat.

Are there other ways to do it?

I understand the DOM and how to find specific elements I want to change and what not. I can write basic webpages from scratch and put script tags in there. Just needing help bridging the two worlds :)

Any takers?
u/korbo-
u/radiantcabbage
u/testerteeto
u/bitx0r

1...2...3...GO!

Top answer
1 of 3
4
Well, I don't know that I'm the best person to teach this topic, but I can certainly can point you to the references I used to learn. AHK Forums COM Object Reference - AutoHotkey Community ... Basic Webpage Controls With Javascript / Com - Tutorial - Tutorials ... Make Winhttp.waitforresponse() To Wait More Than 30 Seconds ... Urldownloadtofile - Look at the WinHttp Examples StackOverflow How to do logins using the WinHttpRequest COM - Stack Overflow autohotkey - WinHttpRequest timeouts - Stack Overflow Misc RESTful - Wikipedia The Component Object Model WinHttpRequest object HtmlFile Object - iHTMLDocument IE Com Object Practice Code Abbey - Interactive Problems Code Abbey - Social Web Scrapper I'll be happy to answer any questions you have.
2 of 3
3
Well there are two ways of doing this. Since you have not provided any details I am going to assume that you will be using Firefox/Chrome and that you don't mind that you are basically not allowed do to anything while the script does its thing. Please also bear in my that this is my way of doing things, other people might do things differently. If you want any other type of getting information it is best done with direct webscraping (via Node.js, Python's BS4 ...) The problem for me was always that you cannot work with the DOM directly always as if the AHK script was a human passing in commands. So this is why all my commands are sequential. First way: Send {F6} Send javascript: //very important not to use sendinput as most browsers will just ignore/delete the input Send (function(){document.getElementsByClassName('title may-blank loggedin')[0].style.color="red"})(); //I wrapped the command in a IIFE (a function that is invoked immediately). Send {Enter} Second way: Use the built-in console to enter and run scripts. Send ^+j Send Clipboard //clipboard contains your script without the script tags Send {Enter} Of course if you navigate to different pages you have to redo the steps. You can run the first script and it will color the title of the thread red. Edited my answer because I realized the first one didn't work anymore so I had to check how to do it properly.
🌐
GitHub
github.com › relipse › JsRoboKey
GitHub - relipse/JsRoboKey: Cross-Platform Desktop Automation and Script utility inspired by AutoHotKey
rk.trayMsg('Hi','Check if JsRoboKey executable file exists...', function(){ alert(__APPFILEPATH__ + ' exists: ' + rk.fileExists(__APPFILEPATH__)); }); rk.trayMsg('About','Click to open the JsRoboKey website', function(){ rk.openUrl('http://github.com/relipse/JsRoboKey'); }); In order to make this a reality, I am going to need some passionate helpers to get this working, we need most all of the features which AutoHotkey has, and cross-platform.
Starred by 95 users
Forked by 4 users
Languages   C++ 98.7% | QMake 1.3% | C++ 98.7% | QMake 1.3%
🌐
npms
npms.io › search
autohotkey.js
npms was built to empower the javascript community by providing a better and open sourced search for node modules.
🌐
Npm
npm.io › search › keyword:autohotkey
Autohotkey | npm.io
libnut is an N-API module for desktop automation with node · GUIAutomationmousekeyboardscreenshotimagedesktopscreenrecognitionautohotkey2.7.1 • Published 2 years ago · 🦅 cli syntax highlighting: any function - any object - 176 languages · syntaxhighlightclicolorconsoleterminallanguagehighlight.jschalkobject3.0.0 • Published 4 years ago
🌐
Npm
npm.io › package › node-ahk
Node-ahk NPM | npm.io
gui.run(); // Runs the autohotkey script. gui.on("message", (event, message) => {}) // Event Listener. Node_Write("event", "message") ;; Send a buffer to nodejs.