Skip to main content

Collection of functions to control a Windows or Linux pc.

Project description

ControlHub python package

Read this page in Russian / Читать на русском

This is a Python automation library for Windows that provides simple APIs to control the desktop, simulate keyboard and mouse actions, and perform web-related tasks.

Installation

Install the library via pip:

pip install controlhub

Features

  • Open files and run programs
  • Simulate mouse clicks, movements, and drags
  • Simulate keyboard input and key combinations
  • Download files from the web
  • Open URLs in the default browser
  • Auto delay added to functions to prevent some errors
  • Run shell commands
  • Use context managers for holding keys
  • Changing basic delay value by changing the environment variable CH_DELAY
  • Interact with controlhub's data right from script

[!NOTE] The basic delay is 0.2 seconds by default, but it can be changed by changing the environment variable CH_DELAY. In controlhub core scripts CH_DELAY is 0.8 by default.

API Reference & Usage Examples

controlhub.desktop

Module to interact with windows pc via functions

open_file(path: str) -> None

Open a file with the default application.

from controlhub import open_file

open_file("C:\\Users\\User\\Documents\\file.txt")
open_file("example.pdf")
open_file("image.png")

cmd(command: str) -> None

Execute a shell command asynchronously.

from controlhub import cmd

cmd("notepad.exe")
cmd("dir")
cmd("echo Hello World")

run_program(program_name: str) -> None

Search for a program by name and run it. Returns path to the program's link (on Windows otherwise None).

from controlhub import run_program

run_program("notepad")
run_program("chrome")
run_program("word")
run_program("cmd")
run_program("vscode")

kill_process(fragment: str, kill: bool = True) -> List[ProcessInfo]:

Find's and kills process by its fragment

from controlhub import kill_process

print(kill_process("notepad", kill=False))
print(kill_process("chrome"))
print(kill_process("roblox"))

fullscreen(absolute: bool = False) -> None

Maximize the current window. If absolute=True, toggle fullscreen mode (F11).

from controlhub import fullscreen

fullscreen()
fullscreen(absolute=True)
fullscreen(absolute=False)

switch_to_next_window

Switches to next window (only Windows): Alt + Tab

switch_to_last_window

Switches to last window (only Windows): Alt + Shift + Tab

reload_window

Makes switch_to_next_window 2 times to make current window active

controlhub.keyboard

Module to interact with keyboard and mouse via functions

click(x: int = None, y: int = None, button: str = "left") -> None

Simulate a mouse click at the given coordinates or current position.

from controlhub import click

click()  # Click at current position
click(100, 200)  # Click at (100, 200)
click(300, 400, button="right")  # Right-click at (300, 400)

move(x: int = None, y: int = None) -> None

Move the mouse to the given coordinates.

from controlhub import move

move(500, 500)
move(0, 0)
move(1920, 1080)

drag(x: int = None, y: int = None, x1: int = None, y1: int = None, button: str = "left", duration: float = 0) -> None

Drag the mouse from start to end coordinates.

from controlhub import drag

drag(100, 100, 200, 200)
drag(300, 300, 400, 400, button="right")
drag(500, 500, 600, 600, duration=1.5)

get_position() -> tuple[int, int]

Get the current mouse position.

from controlhub import get_position

pos = get_position()
print(pos)

x, y = get_position()
print(f"Mouse is at ({x}, {y})")

press(*keys: Union[AnyKey, Iterable[AnyKey]]) -> None

Simulate pressing and releasing keys.

from controlhub import press

press(["ctrl", "c"])  # Copy
press(["ctrl", "v"])  # Paste

press(["ctrl", "c"], ["ctrl", "v"], "left") # Copy and paste in 1 line and press left arrow

hold(*keys: Union[str, Key])

Context manager to hold keys during a block.

from controlhub import hold, press

with hold("ctrl"):
    press("c")  # Ctrl+C

with hold("shift"):
    press("left")  # Select text

with hold(["ctrl", "alt"]):
    press("tab") # Ctrl+Alt+Tab, I

with hold("ctrl", "shift"):
    press("esc") # Ctrl+Shift+Escape

write(text: str) -> None

Type the given text. Also supports \n.

from controlhub import write

write("Hello, world!")
write("This is automated typing.")
write("ControlHub is awesome!")
write("from controlhub import write\nwrite(\"Hello, world\")")

controlhub.web

Module to interact with internet via functions

download(url: str, directory: str = "download") -> None

Download a file from a URL into a directory.

from controlhub import download

download("https://example.com/file.zip")
download("https://example.com/image.png", directory="images")
download("https://example.com/doc.pdf", directory="docs")

open_url(url: str) -> None

Open a URL in the default web browser.

from controlhub import open_url

open_url("https://www.google.com")
open_url("github.com")  # Will prepend http://
open_url("https://stackoverflow.com")

controlhub.pocketbase

Module to interact with pocketbase computer and execution records via functions

[!IMPORTANT] Functions from this module can be executed only in controlhub scripts

get_execution() -> ExecutionResponse

Returns execution from database

from controlhub import get_execution

print(get_execution())

update_execution(data: ExecutionRecord) -> ExecutionResponse

Updates execution in database and returns it

from controlhub import update_execution

new_execution = {
    "status": "3",
    "duration": 20
}

print(update_execution(new_execution))

get_computer() -> ComputerResponse

Returns computer from database

from controlhub import get_computer

print(get_computer())

get_offline_computer() -> ComputerResponse

Returns computer from local env variable COMPUTER_JSON

from controlhub import get_offline_computer

print(get_offline_computer())

update_computer(data: ExecutionRecord) -> ExecutionResponse

Updates computer in database and returns it

from controlhub import update_computer

new_computer = {
    "data": {
        "weather": "clear",
        "mood": "good",
        "vscode installed": True
    }
}

print(update_computer(new_computer))

controlhub.json_storage

JSONFile(file_path: str)

Create a JSON-backed storage object to store and retrieve data, like a dictionary. All data is saved to a JSON file file_path.

from controlhub.json_storage import JSONFile

storage = JSONFile("mydata.json")
storage.set({"key": "value"})
print(storage.get())  # {"key": "value"}

JSONFile.get() -> dict

Read and return all data from the file.

print(storage.get())
# Output: {"key": "value"}

JSONFile.set(data: dict) -> None

Completely replace the file contents.

storage.set({"new_key": "new_value"})
print(storage.get())

JSONFile.merge(data: dict) -> dict

Merge new data into the file without losing existing fields.

storage.merge({"another_key": {"nested": "value"}})
print(storage.get())

JSONFile magic methods

You can also use JSONFile like a dictionary:

storage["name"] = "ControlHub"
print(storage["name"])  # Output: ControlHub

del storage["name"]

print("name" in storage)  # Output: False

for key in storage:
    print(key)

License

This project is licensed under the MIT License.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

controlhub-0.6.1.tar.gz (15.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

controlhub-0.6.1-py3-none-any.whl (13.8 kB view details)

Uploaded Python 3

File details

Details for the file controlhub-0.6.1.tar.gz.

File metadata

  • Download URL: controlhub-0.6.1.tar.gz
  • Upload date:
  • Size: 15.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.11.12

File hashes

Hashes for controlhub-0.6.1.tar.gz
Algorithm Hash digest
SHA256 925e3c0e0840c9c5d97e38cface3d62aa382f435a4d4a884ad96fe6e0a0ff9f2
MD5 07b576b804bc4f08fe8fc260b89425eb
BLAKE2b-256 2436cc8871416f5d01fe466268a191d1c79435cc6a8167ad4d698f3afb75c7af

See more details on using hashes here.

File details

Details for the file controlhub-0.6.1-py3-none-any.whl.

File metadata

  • Download URL: controlhub-0.6.1-py3-none-any.whl
  • Upload date:
  • Size: 13.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.11.12

File hashes

Hashes for controlhub-0.6.1-py3-none-any.whl
Algorithm Hash digest
SHA256 6f0a9364f1356127420e70db54a0c7a2d70b3a020a834c341c295f09448afa5d
MD5 cab32ca24ce0598b86ce200f9416dde5
BLAKE2b-256 f5df2ff102973205a80290c657910fec610bf5250da86773f9ef184dfd29797a

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page