Skip to main content

Event-driven automation library for keyboard, mouse, system, and network events.

Project description

KeyNet

KeyNet is a simple and powerful Python library for detecting keyboard events (key press, key release) and binding them to custom callbacks.

With KeyNet, you can easily build keyboard-based automation, hotkey triggers, or even interactive applications that react instantly when a key is pressed.

Logo

Features

  • Detect key press and key release events
  • Simple .on(event, callback) API
  • Runs in a background thread, so your main app keeps working
  • Works out-of-the-box on Windows
  • Useful for automation, scripting, and productivity apps

Installation

You can install keynet by:

pip install keynet

Usage/Examples

Example 1 – Detect a single key

from keynet import KeyNet

kn = KeyNet()

def log_key(key):
    print(f"[KeyLog] {key}")

kn.on("key_press", log_key)
kn.start()

input("Logging keys... Press Enter to quit\n")

Example 2 hotkey actions

from keynet import KeyNet

kn = KeyNet()

def key_action(key):
    if key == "a":
        print("You pressed A → Triggering Action 1")
    elif key == "b":
        print("You pressed B → Triggering Action 2")
    elif key == "q":
        print("Quit hotkeys (press Enter to exit)")
        kn.stop()

kn.on("key_press", key_action)
kn.start()

input("Try pressing A, B, or Q\n")

Example 3 volume control

from keynet import KeyNet
from ctypes import cast, POINTER
from comtypes import CLSCTX_ALL
from pycaw.pycaw import AudioUtilities, IAudioEndpointVolume

devices = AudioUtilities.GetSpeakers()
interface = devices.Activate(IAudioEndpointVolume._iid_, CLSCTX_ALL, None)
volume = cast(interface, POINTER(IAudioEndpointVolume))

kn = KeyNet()

def volume_control(key):
    if key == "up":
        current = volume.GetMasterVolumeLevelScalar()
        volume.SetMasterVolumeLevelScalar(min(1.0, current + 0.1), None)
        print(f"Volume UP → {int(volume.GetMasterVolumeLevelScalar() * 100)}%")
    elif key == "down":
        current = volume.GetMasterVolumeLevelScalar()
        volume.SetMasterVolumeLevelScalar(max(0.0, current - 0.1), None)
        print(f"Volume DOWN → {int(volume.GetMasterVolumeLevelScalar() * 100)}%")

kn.on("key_press", volume_control)
kn.start()

input("Press UP/DOWN arrow keys to control volume (Enter to quit)\n")

Example 4 - mouse position

from keynet import KeyNet
from pynput import mouse

kn = KeyNet()
mouse_controller = mouse.Controller()

def key_mouse_combo(key):
    if key == "c":
        pos = mouse_controller.position
        print(f"Captured mouse position: {pos}")
    elif key == "r":
        mouse_controller.position = (100, 100)
        print("Moved mouse to (100, 100)")

kn.on("key_press", key_mouse_combo)
kn.start()

input("Press C to capture mouse pos, R to move mouse (Enter to quit)\n")

API Reference

KeyNet Class

KeyNet()

Create a new event detector instance.


Keyboard Event Handlers

@detector.on_key(callback)

Registers a callback that triggers on every key press.

@detector.on_key
def log_key(event):
    print(f"Key pressed: {event}")

@detector.on_hotkey(hotkeys: List[Set[str]])

Registers a callback that triggers when a hotkey combination is pressed.

@detector.on_hotkey([{"ctrl", "shift", "x"}])
def hotkey_action(event):
    print("CTRL + SHIFT + X detected!")

Mouse Event Handlers

@detector.on_click(callback)
Registers a callback for mouse clicks.

@detector.on_click
def on_click(event):
    print(f"Mouse clicked: {event}")

@detector.on_scroll(callback)
Registers a callback for mouse scroll events.

@detector.on_scroll
def on_scroll(event):
    print(f"Scrolled: {event}")

System Event Handlers

@detector.on_volume_change(callback)
Registers a callback for system volume changes.

@detector.on_volume_change
def on_volume_change(volume_level):
    print(f"Volume changed: {volume_level}")

Running the Detector

detector.start()
Starts listening for all registered events.

detector.start()

detector.stop()
Stops event detection.

detector.stop()

License

MIT

Authors

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

keynet-0.1.1.tar.gz (6.0 kB view details)

Uploaded Source

Built Distribution

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

keynet-0.1.1-py3-none-any.whl (6.3 kB view details)

Uploaded Python 3

File details

Details for the file keynet-0.1.1.tar.gz.

File metadata

  • Download URL: keynet-0.1.1.tar.gz
  • Upload date:
  • Size: 6.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.5

File hashes

Hashes for keynet-0.1.1.tar.gz
Algorithm Hash digest
SHA256 a8b08a1575b392f5761384fac31da6fd8466a0002acfa1357c564b70cf4e0c38
MD5 1c47366aeba6510e9d67be63b3ca61ba
BLAKE2b-256 c860cde85e843dc1e9a7150a6d73f17c748dab203bc69cb59cd5f6eed78c868e

See more details on using hashes here.

File details

Details for the file keynet-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: keynet-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 6.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.5

File hashes

Hashes for keynet-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 76e9fe0b5fb012cd74d7ef2d407cb21e8a51ebb3e51e3b9efb2893d3ae921bb9
MD5 dd41ec1c2a5dc4729e3814c0dcb6b2b6
BLAKE2b-256 b81a301199631616ec51d6774df2bea45ac4ec9e8e8d1eddf3cf554e28c37cd6

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