Automate Windows Hello PIN entry via USB HID keyboard (Raspberry Pi Pico)
Project description
pywinhello
Automate Windows Hello PIN entry via USB HID keyboard (Raspberry Pi Pico).
Windows Hello's Credential Dialog is protected by UIPI — no software input method
(SendInput, pyautogui, pywinauto) can type into it. pywinhello uses a Raspberry Pi
Pico as a USB HID keyboard to bypass this restriction and enter PINs automatically.
Features
- Process-aware: identifies which app triggered Windows Hello, enters the correct PIN
- Two-pass detection: handles both PIN mode and fingerprint mode automatically
- Progressive API: from raw HID keyboard to full daemon monitor
- Zero polling: uses WinEvent hooks for instant dialog detection
Install
pip install pywinhello
Quick Start
from pywinhello import enter_pin
# One-shot: enter PIN when dialog appears
event = enter_pin("1234")
print(event.dialog_dismissed) # True if PIN was accepted
# Daemon: monitor all apps
from pywinhello import HelloMonitor
from pywinhello.models import AppConfig, MonitorConfig
config = MonitorConfig(apps=[
AppConfig(exe="MarketSpeed2.exe", pin="1234"),
])
monitor = HelloMonitor(config)
monitor.serve()
Hardware Setup
Requires a Raspberry Pi Pico (W/2/2W) running CircuitPython with adafruit_hid.
See firmware/pico_hid/ for the firmware files.
License
MIT
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 pywinhello-0.1.0.tar.gz.
File metadata
- Download URL: pywinhello-0.1.0.tar.gz
- Upload date:
- Size: 76.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.2 {"installer":{"name":"uv","version":"0.10.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3564e28d18a4c477cce3824748d6f6c1d5d3dd5ae03d52a0d50246b5cb42f009
|
|
| MD5 |
28ce448f3a5592e758d39217269de62a
|
|
| BLAKE2b-256 |
119f407b45dc006ea2116be98e93cd1bbc5bd6426f2ec7971446ea33911333d9
|
File details
Details for the file pywinhello-0.1.0-py3-none-any.whl.
File metadata
- Download URL: pywinhello-0.1.0-py3-none-any.whl
- Upload date:
- Size: 14.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.2 {"installer":{"name":"uv","version":"0.10.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
de0facbc2e2d1eee39c228fd279ec35f1800c54f8106dbb5565505697129698f
|
|
| MD5 |
c93895431d0562033d44c53e394e1fdf
|
|
| BLAKE2b-256 |
6f5d34f1b2afb05fd6aec22f2666d097da1a67d66b4271121c36bd985929feb1
|