A Rust library for managing Windows system power states, including sleep, hibernation, and wake prevention.
- 🔒 Prevent system sleep and display timeout
- ⏰ Schedule system sleep with countdown
- 💤 Force system sleep or hibernation
- 🔄 Restore default power settings
- ⚡ Low-level Windows power management API integration
Add this to your Cargo.toml
:
[dependencies]
windows-awake = {git="https://github.com/akirco/windows-awake.git",branch = "master"}
use windows_awake::PowerManager;
use std::thread;
use std::time::Duration;
fn main() -> Result<(), Box<dyn std::error::Error>> {
let power_manager = PowerManager::new();
// Keep system awake for 30 minutes
power_manager.keep_awake_for_minutes(30)?;
// Or keep system awake indefinitely
power_manager.keep_awake_indefinite()?;
// Put system to sleep immediately
power_manager.force_sleep(false, false, false)?;
Ok(())
}
use windows_awake::PowerManager;
let power_manager = PowerManager::new();
// Prevent system sleep indefinitely
power_manager.keep_awake_indefinite()?;
// Keep system awake for specific duration (in minutes)
power_manager.keep_awake_for_minutes(60)?; // Keep awake for 1 hour
use windows_awake::PowerManager;
let power_manager = PowerManager::new();
// Normal sleep mode
power_manager.force_sleep(false, false, false)?;
// Hibernation mode
power_manager.force_sleep(true, false, false)?;
// Force sleep (bypass application blocks)
power_manager.force_sleep(false, true, true)?;
use windows_awake::PowerManager;
let power_manager = PowerManager::new();
// Restore system default power settings
power_manager.restore_default()?;
The library includes an interactive demo application that showcases all features. Run it using:
cargo run --example power_management_demo
new()
- Create a new PowerManager instancekeep_awake_indefinite()
- Prevent system sleep indefinitelykeep_awake_for_minutes(minutes: u32)
- Prevent sleep for specified durationforce_sleep(hibernate: bool, force: bool, disable_wake_events: bool)
- Control system sleep staterestore_default()
- Restore default power settings
The library uses a custom PowerError
enum for error handling:
pub enum PowerError {
WindowsError(windows::core::Error),
InvalidDuration(String),
SleepError(String),
}
- Windows operating system
- Rust 1.56 or later
- Administrator privileges may be required for some operations
-
Sleep/Hibernate Not Working
- Ensure your system has hibernation enabled
- Run the application with administrator privileges
- Check if other applications are blocking sleep state
-
Permission Errors
- Run the application as administrator
- Check Windows power settings
-
Wake Prevention Not Working
- Verify no other applications are modifying power settings
- Check system power policy settings
Contributions are welcome! Please feel free to submit a Pull Request. For major changes, please open an issue first to discuss what you would like to change.
This project is licensed under the MIT License - see the LICENSE file for details.
- 0.1.0 (2025-02-21)
- Initial release
- Basic power management features
- Interactive demo application
Created by akirco on 2025-02-21
If you encounter any issues or need help, please:
- Check the Issues page
- Create a new issue if your problem isn't already listed
- Include your Windows version and Rust version when reporting issues
- Always save your work before forcing sleep or hibernation
- Be cautious with
force_sleep
when usingforce = true
- Consider system-wide impacts when preventing sleep for long periods