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.
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
Authors
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a8b08a1575b392f5761384fac31da6fd8466a0002acfa1357c564b70cf4e0c38
|
|
| MD5 |
1c47366aeba6510e9d67be63b3ca61ba
|
|
| BLAKE2b-256 |
c860cde85e843dc1e9a7150a6d73f17c748dab203bc69cb59cd5f6eed78c868e
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
76e9fe0b5fb012cd74d7ef2d407cb21e8a51ebb3e51e3b9efb2893d3ae921bb9
|
|
| MD5 |
dd41ec1c2a5dc4729e3814c0dcb6b2b6
|
|
| BLAKE2b-256 |
b81a301199631616ec51d6774df2bea45ac4ec9e8e8d1eddf3cf554e28c37cd6
|