- Keyboard
- Mouse
- Screen
- Window
- Memory
npm install @deeean/sophia
Typing a string
import { Keyboard } from '@deeean/sophia';
async function main() {
await Keyboard.typing('Hello, World!');
}
main();
Registering a hotkey for specific key combinations and handling events.
import { Keyboard, Modifiers, Key } from '@deeean/sophia';
Keyboard.registerHotkey([Modifiers.Control], Key.A, () => {
console.log('Ctrl + A is pressed');
});
Finding the location of one image within another
import { readImageData, imageSearch } from '@deeean/sophia';
async function main() {
const [
baboon,
partsOfBaboon,
] = await Promise.all([
readImageData('./examples/images/baboon.png'),
readImageData('./examples/images/parts_of_baboon.png'),
]);
const position = await imageSearch(baboon, partsOfBaboon);
if (position) {
console.log('Found at', position);
} else {
console.log('Not found');
}
}
main();
Finding the location of one image within the screenshot
import * as sophia from '@deeean/sophia';
async function main() {
const [
baboon,
] = await Promise.all([
sophia.readImageData('./examples/images/baboon.png'),
]);
const screenSize = await sophia.getScreenSize();
const screenshot = await sophia.takeScreenshot(0, 0, screenSize.x, screenSize.y);
const position = await sophia.imageSearch(screenshot, baboon);
if (position) {
console.log('Found at', position);
} else {
console.log('Not found');
}
}
main();
Getting the list of processes and reading/writing memory
import { getProcesses, openProcess, ProcessAccess } from '@deeean/sophia';
const BASE_ADDRESS = BigInt(0x003264D0);
const OFFSETS = [
BigInt(0x48),
BigInt(0x0),
BigInt(0xF8),
BigInt(0x18),
BigInt(0x408),
BigInt(0x50),
BigInt(0x7F8),
];
async function main() {
const processes = await getProcesses();
const tutorial = processes.find(p => p.name === 'Tutorial-x86_64.exe');
if (!tutorial) {
console.log('Tutorial-x86_64.exe not found');
return;
}
const openedProcess = await openProcess(ProcessAccess.AllAccess, tutorial.pid);
const health = await openedProcess.readMemoryChainUint32(BASE_ADDRESS, OFFSETS);
if (health < 1000n) {
await openedProcess.writeMemoryChainUint32(BASE_ADDRESS, OFFSETS, 1000n);
}
}
main();
Only support Windows x64 for now.
I'm a big fan of AutoHotkey, but I want to use it in Node.js. So I decided to create a library that can automate Windows applications.
Sophia is licensed under the MIT License. Feel free to use it in your projects, adhering to the license terms.