Track. Limit. Protect.
Set daily screen time limits per app, enforce schedules,
and monitor usage — all from a beautiful web dashboard.
| Problem | Our Solution |
|---|---|
| 😤 Kids play games all night | ⏰ Auto-close apps when time limit is reached |
| 🎮 Hard to track which games they play | 📊 Real-time dashboard with usage charts |
| 😴 Gaming during school hours | 📅 Schedule rules (e.g. only 15:00–21:00) |
| 🏃 Kids close the app | 🛡️ Watchdog service auto-restarts it |
| 📧 Not home to check | 📨 Email alerts & remote commands via Gmail |
| 🌍 Language barrier | 🗣️ English, German, Spanish, French, Russian |
👨👩👧 For parents who want to manage their children's gaming time
without intrusive restrictions — runs silently in the background.
- Real‑time usage tracking — polls the foreground window and accumulates time per app
- Daily time limits — set per‑app limits (e.g. Fortnite 120 min/day); apps are auto‑closed when exceeded
- Graceful countdown — full‑screen warning popup with countdown before an app is killed
- Bonus time — grant extra minutes from the dashboard without changing limits
- Schedule rules — define allowed hours per app (e.g. weekdays 15:00–21:00)
- Auto‑detection — scan the system for installed games/apps and add them with one click
- Web dashboard — responsive SPA with live status, usage charts, history, logs, and settings
- Multi‑language — English, German, Spanish, French, Russian (auto‑translates the dashboard UI)
- Email control — receive alerts and send commands via Gmail (optional)
- Webhook alerts — POST JSON to a custom endpoint on limit breach
- Watchdog service — optional Windows service that restarts the monitor if it crashes
- Admin password — protect dashboard changes and shutdown
- Config export/import — backup and restore limits, schedules, and app mappings
- Hotkey —
Ctrl+Alt+Hopens the dashboard
Monitor & Control consists of three executables:
| Component | File | Description |
|---|---|---|
| Monitor | DeviceMon.exe |
Main application — tracks usage, enforces limits, hosts the web dashboard |
| Watchdog | GameHost.exe |
Windows service that restarts the monitor if it crashes. Auto-installs when you run DeviceMon.exe — it prompts for admin elevation once, then runs silently in the background |
| PopupHost | PopupHost.exe |
Child process launched by the monitor to show full‑screen warning popups with countdown |
Note on executable names:
DeviceMon.exeis the Monitor & Control app andGameHost.exeis the watchdog. The names are intentionally generic to avoid drawing attention on a child's PC — keeping them as-is is recommended.
If you must rename them, you'll need to edit the corresponding constants inProgram.cs(e.g.,AppName,WatchdogServiceName,WatchdogExeName) andWatchdog/Program.cs(e.g.,ServiceName,MonitorExeName,WatchdogExeName), then rebuild. There's no configuration file for this — the names are baked into the code.
When you run DeviceMon.exe, it automatically looks for GameHost.exe in the same folder. If the watchdog service is not installed (or needs updating), DeviceMon silently asks for administrator privileges via a UAC prompt and installs/updates it. After that:
- The watchdog runs as a Windows service named
GameHost - It checks every 15 seconds whether
DeviceMon.exeis still running - If the monitor process is missing, the watchdog relaunches it in the active user session
- No further UAC prompts — the service runs under the SYSTEM account
- If you ever want to remove it, see the Watchdog uninstall section
- SQLite database at
%LOCALAPPDATA%\SystemHelper\monitor.db— usage records, limits, schedules, settings - Log file at
%LOCALAPPDATA%\SystemHelper\monitor.log - Watchdog log at
C:\ProgramData\SystemHelper\watchdog.log - Configuration at
appsettings.json(alongside the exe)
- .NET 8 SDK (any platform that supports
net8.0-windows)
# Publish all components (framework‑dependent, ~2 MB each)
.\publish.ps1
# Output goes to: bin\Release\net8.0-windows\win-x64\publish\The script publishes three projects:
MonitorAndControl.csproj→DeviceMon.exeWatchdog\SystemHelperWatchdog.csproj→GameHost.exePopupHost\PopupHost.csproj→PopupHost.exe
It also copies appsettings.json, the wwwroot/ folder, and PowerShell helper scripts.
# Self‑contained (includes .NET runtime, ~50 MB, no runtime needed on target)
dotnet publish .\MonitorAndControl.csproj -c Release -r win-x64 --self-contained true -p:PublishSingleFile=true
# Framework‑dependent (requires .NET 8 Runtime on target)
dotnet publish .\MonitorAndControl.csproj -c Release -r win-x64 --self-contained false -p:PublishSingleFile=trueMonitorAndControl/
├── Program.cs # Entry point, DI, startup
├── appsettings.json # Default configuration
├── Data/
│ └── UsageDatabase.cs # SQLite data layer
├── Models/ # Data models (AppConfig, AppLimitRule, ScheduleRule, etc.)
├── Services/
│ ├── Logger.cs # File‑based logger
│ ├── Localization.cs # .resx string localization
│ ├── WindowTracker.cs # Foreground window polling
│ ├── UsageTracker.cs # Usage accumulation
│ ├── LimitEnforcer.cs # Limit checking + kill logic
│ ├── SchedulerService.cs # Time‑based schedule enforcement
│ ├── NotificationService.cs # Webhook notifications
│ ├── EmailService.cs # Gmail SMTP/IMAP integration
│ ├── HotKeyService.cs # Global hotkey (Ctrl+Alt+H)
│ ├── PasswordHasher.cs # PBKDF2 password hashing
│ ├── SecretProtector.cs # DPAPI credential protection
│ └── DiscoveryService.cs # Scans for installed games/apps
├── UI/
│ └── HiddenForm.cs # System tray icon + hotkey form
├── Web/
│ ├── DashboardServer.cs # ASP.NET Minimal API (REST + SSE)
│ └── wwwroot/ # SPA dashboard (HTML, JS, CSS, i18n JSON)
├── Resources/ # .resx localization files
├── PopupHost/ # Warning popup child process
├── Watchdog/ # Windows service watchdog
└── Tests/ # Unit tests
dotnet run --project .\MonitorAndControl.csprojOpens the dashboard at http://localhost:5000 and runs in the system tray.
- Download the latest release from the Releases page (all three
.exefiles must be kept together in the same folder) - Extract the zip to a folder (e.g.
C:\MonitorAndControl) - Run
DeviceMon.exe(no admin required for basic usage)- On first run, it will detect
GameHost.exeand ask for administrator elevation via a UAC prompt to install the watchdog service. This is optional — click Yes to enable auto-restart on crash, or No to skip (the app will still run normally)
- On first run, it will detect
- Open the dashboard — press
Ctrl+Alt+Hor openhttp://localhost:5000in a browser - Set limits — navigate to Limits tab, add apps and set daily max minutes
- Configure schedule (optional) — navigate to Schedule tab, set allowed hours
For remote access from another PC on the same network, see appsettings.json configuration below.
Place this file alongside DeviceMon.exe. All settings are optional — defaults are used when a key is missing.
{
"DashboardPort": 5000,
"EnableRemoteDashboard": true,
"DashboardBindAddress": "0.0.0.0",
"KillDelaySeconds": 30,
"ShowWarningOnChildPc": true,
"PollIntervalMs": 1000,
"FlushIntervalSec": 30,
"HotKeyModifiers": "Control+Alt",
"HotKeyKey": "H",
"KnownApps": {
"FortniteClient-Win64-Shipping.exe": "Fortnite",
"RobloxPlayerBeta.exe": "Roblox",
"Minecraft.Windows.exe": "Minecraft",
"chrome.exe": "Chrome"
},
"DefaultLimits": [
{ "AppName": "Fortnite", "DailyMaxMinutes": 120 },
{ "AppName": "Roblox", "DailyMaxMinutes": 90 }
],
"Schedule": [
{ "DayOfWeek": "Weekday", "StartTime": "15:00", "EndTime": "21:00" },
{ "DayOfWeek": "Weekend", "StartTime": "09:00", "EndTime": "22:00" }
]
}| Key | Default | Description |
|---|---|---|
DashboardPort |
5000 |
Port for the web dashboard |
EnableRemoteDashboard |
false |
Allow access from other PCs on the network |
DashboardBindAddress |
127.0.0.1 |
Bind address (0.0.0.0 for all interfaces) |
KillDelaySeconds |
30 |
Seconds between limit breach warning and closing the app |
ShowWarningOnChildPc |
true |
Show full‑screen popup before killing an app |
PollIntervalMs |
1000 |
Foreground window check interval (ms) |
FlushIntervalSec |
30 |
How often usage data is written to the database |
HotKeyModifiers |
Control+Alt |
Modifier keys for the dashboard hotkey |
HotKeyKey |
H |
Key for the dashboard hotkey |
KnownApps |
{} |
Map of process names → friendly app names |
DefaultLimits |
[] |
Default daily limits for known apps |
Schedule |
[] |
Default allowed hours schedule |
Security note: When
EnableRemoteDashboardistrue, anyone on your local network can access the dashboard. Set an admin password in the dashboard Settings tab to protect changes.
Normally you don't need to do this manually — when you run DeviceMon.exe, it auto-detects GameHost.exe in the same folder and offers to install the watchdog service with a single UAC prompt.
Manual install is only needed if you want to install the watchdog separately (e.g., deploying to a different folder after the fact):
# Run PowerShell as Administrator, then:
.\install-watchdog.ps1
# Or specify a custom publish folder:
.\install-watchdog.ps1 -PublishDir "C:\MonitorAndControl"To remove the watchdog:
.\GameHost.exe --uninstall
# or
.\uninstall-watchdog.ps1Once installed, the GameHost service runs under the SYSTEM account and automatically restarts DeviceMon.exe if it crashes — no further UAC prompts needed.
Navigation:
| Tab | Description |
|---|---|
| Live | Currently active app, quick actions (pause, resume, block all, extend time) |
| Today | Bar chart and table of today's app usage |
| History | Historical usage with filters, charts, and stats (7/14/30/90 days or custom range) |
| Limits | Per‑app daily limits, bonus time, status, edit/add/remove/forget apps |
| Discover | Scan system for installed games/apps, add them with default limit |
| Schedule | Time‑based allowed hours rules per app |
| Logs | Real‑time event log with filtering |
| Settings | Kill delay, language, auto‑start, webhook, email, admin password, backup/restore, health |
Admin password: Set one in Settings to protect dashboard changes (pause, resume, reset, kill, settings edits) and shutdown.
Remote access: Settings show the computer name and IP addresses. From another PC, open http://CHILD_PC_NAME:5000 or http://192.168.x.x:5000.
- Enable 2‑Factor Authentication on your Gmail account
- Generate an App Password
- Configure in Settings → Email Notifications & Control
- Reply to any alert email with one of these commands (prefix with
mc:ormonitor:):
| Command | Example | Description |
|---|---|---|
help |
mc: help |
Shows all available commands |
status |
mc: status |
Current limits, schedule, and today's usage |
set [app] [min] min |
mc: set Fortnite 60 min |
Set daily limit for an app |
bonus [app] [min] min |
mc: bonus Fortnite 15 min |
Add bonus time today |
extend [app] until bedtime |
mc: extend Fortnite until bedtime |
Extend until end of allowed window |
set schedule [day] [start]-[end] |
mc: set schedule weekday 22:00-06:00 |
Add a schedule rule |
set kill-delay [sec] |
mc: set kill-delay 60 |
Change the kill delay |
add [process.exe] [name] |
mc: add aces.exe Aces |
Register a new app to track |
Examples:
mc: status
mc: set Fortnite 120 min
mc: bonus Roblox 30 min
mc: extend Minecraft until bedtime
mc: set schedule weekend 09:00-22:00
mc: set kill-delay 30
mc: add chrome.exe Chrome
- Remove the watchdog (if installed): run
GameHost.exe --uninstallas Administrator - Delete the application folder
- (Optional) Delete data:
%LOCALAPPDATA%\SystemHelper\
Supports English, German, Spanish, French, and Russian.
- Dashboard UI: Translated via JSON files in
Web/wwwroot/i18n/ - Warning popups: Translated via
.resxfiles inResources/ - The language can be changed in Settings → Language (reloads the page)
To add a new language:
- Copy
Web/wwwroot/i18n/en.json→Web/wwwroot/i18n/{code}.jsonand translate the values - Copy
Resources/Strings.resx→Resources/Strings.{code}.resxand translate the values - Add the option to the language
<select>inWeb/wwwroot/index.html
Q: The dashboard shows "?" instead of accented characters.
A: Your JSON translation files may have been saved with the wrong encoding. Ensure all files in Web/wwwroot/i18n/ are saved as UTF-8.
Q: The watchdog service won't install. A: Run PowerShell as Administrator. The service requires elevation to create a Windows service.
Q: I can't access the dashboard from another PC.
A: Set EnableRemoteDashboard to true and DashboardBindAddress to "0.0.0.0" in appsettings.json. Ensure the Windows Firewall allows port 5000.
Q: How do I reset all usage data?
A: Delete the SQLite database at %LOCALAPPDATA%\SystemHelper\monitor.db while the monitor is not running. It will be recreated on next launch.
Q: Where are logs stored?
A: %LOCALAPPDATA%\SystemHelper\monitor.log for the main app, and C:\ProgramData\SystemHelper\watchdog.log for the watchdog service.
Q: Can I run it without the web dashboard? A: No. The web dashboard is the primary UI.
Fair Use License — see the LICENSE file for details.
- ✅ Free for personal, educational, and non‑commercial use
- ✅ Modify and distribute with attribution
- ❌ No selling, commercial redistribution, or republishing on app stores/public repositories





