{"id":19489459,"url":"https://github.com/1j01/node-ahk","last_synced_at":"2025-07-11T10:36:25.496Z","repository":{"id":26483179,"uuid":"29935157","full_name":"1j01/node-ahk","owner":"1j01","description":"Desktop scripting with Node.js based on IronAHK ⌨🖱🔥","archived":false,"fork":false,"pushed_at":"2022-07-27T00:04:59.000Z","size":497,"stargazers_count":33,"open_issues_count":0,"forks_count":1,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-04-25T19:34:32.734Z","etag":null,"topics":["ahk","autohotkey","automation","desktop-automation","edge","input","ironahk","keyboard","mouse","multiism","node","node-ahk","robotjs"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/1j01.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2015-01-27T21:12:45.000Z","updated_at":"2025-02-06T13:26:58.000Z","dependencies_parsed_at":"2022-08-30T00:01:55.024Z","dependency_job_id":null,"html_url":"https://github.com/1j01/node-ahk","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/1j01/node-ahk","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/1j01%2Fnode-ahk","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/1j01%2Fnode-ahk/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/1j01%2Fnode-ahk/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/1j01%2Fnode-ahk/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/1j01","download_url":"https://codeload.github.com/1j01/node-ahk/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/1j01%2Fnode-ahk/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":264786312,"owners_count":23663915,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ahk","autohotkey","automation","desktop-automation","edge","input","ironahk","keyboard","mouse","multiism","node","node-ahk","robotjs"],"created_at":"2024-11-10T21:08:38.664Z","updated_at":"2025-07-11T10:36:25.416Z","avatar_url":"https://github.com/1j01.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"\n# node-ahk\n\nThis project aims to use [IronAHK][] in [Node.js][] via [Edge.js][]\nwith the benefit of all the existing modules on [npm][].\n\nThere's a project that's further ahead in development called [RobotJS][].\n\nIt could have a playful API with clever usage of concatenation and optional globals.\n\nThe following example is in [CoffeeScript][], but you could use JavaScript,\n[TypeScript, DogeScript, Python, Ruby, etc.][List of languages that compile to JS]\n\n```coffee\non Ctrl+Alt+C, -\u003e\n    oldClipboard = getClipboard()\n    send Ctrl+C\n    newClipboard = getClipboard()\n    setClipboard oldClipboard\n    send Ctrl+V\n    setClipBoard newClipboard\n```\n\nAll the keyboard constants would be strings\nwith control characters at the start and end,\nto differenciate between e.g. `Ctrl+Esc` and `\"Ctrl+Esc\"``.\nThat would mean you wouldn't accidently\nsend commands when you wanted to send text\n(but sending arbitrary user input would still be dangerous).\n\nThere could also be \"AutoHotQuery\" (`ahq`)\nwith a jQuery-like API for selecting and operating on windows.\n\n```coffee\n$(/Google Chrome|Mozilla Firefox|Microsoft Edge/).focus()\n.then -\u003e Send Ctrl+T, \"google.com\", Enter\n```\n\nLook, no `SetTitleMatchMode`! Amazing.\n\nThat would open a new tab in one browser window.\nTo open new tabs in each matched window, you could do:\n\n```coffee\n$(/Google Chrome|Mozilla Firefox|Microsoft Edge/).send(Ctrl+T, \"google.com\", Enter)\n```\n\nWith Edge.js, everything can be [syncronous or asyncronous][sync vs async].\n\nThe creator of IronAHK did try to make it modular\n(and it could be much worse)\nbut they still let paradigms like `ErrorLevel` and other global state\nseep into the core.\nIronAHK would need to be refactored or more likely cannibalized in order to implement much of the functionality.\nI only got a few functions more or less working\nwithout modifying IronAHK.\n\nAt any rate, this project is not being actively worked on,\nso definitely check out [RobotJS][].\n\n\n[IronAHK]: https://github.com/polyethene/IronAHK\n[Node.js]: https://nodejs.org/\n[Edge.js]: http://tjanczuk.github.io/edge/\n[sync vs async]: http://tjanczuk.github.io/edge/#/27\n[npm]: https://www.npmjs.com/\n[CoffeeScript]: http://coffeescript.org/\n[List of languages that compile to JS]: https://github.com/jashkenas/coffeescript/wiki/list-of-languages-that-compile-to-js\n[RobotJS]: https://github.com/octalmage/robotjs\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F1j01%2Fnode-ahk","html_url":"https://awesome.ecosyste.ms/projects/github.com%2F1j01%2Fnode-ahk","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F1j01%2Fnode-ahk/lists"}