wpf实现一个windows定时关机的工具
基本界面


起源
在家睡前喜欢用电脑放情景喜剧看,电脑需要定时关机,一开始直接命令行定时关机,感觉有点小麻烦, 于是最近弄了个有界面的
主要功能
在指定的时间之后执行 关机|休眠|重启 的操作, 支持取消.
实现思路
使用了 Prism 来辅助实现mvvm模式, 主要用到了其中的 BindableBase 和 DelegateCommand 这两个类.
关机|睡眠|重启 使用 Shutdown.exe 实现. 代码里提取了 IPowerManager 这个接口, 然后 WinPowerManager 这个类实现功能.
namespace WinPowerHelper.Core.Interfaces
{
using System;
public interface IPowerManager
{
/// <summary>
/// 立刻关机
/// </summary>
void Shutdown();
/// <summary>
/// 等待<param name="interval"></param>时间后关机
/// </summary>
/// <param name="interval"></param>
void Shutdown(TimeSpan interval);
/// <summary>
/// 让电脑立即休眠
/// </summary>
void Sleep();
/// <summary>
/// 在等待<param name="interval"></param>时间后, 立即休眠
/// </summary>
/// <param name="interval"></param>
void Sleep(TimeSpan interval);
/// <summary>
/// 立即重启
/// </summary>
void Restart();
/// <summary>
/// 在等待<param name="interval"></param>时间后, 立即重启
/// </summary>
/// <param name="interval"></param>
void Restart(TimeSpan interval);
}
}
namespace WinPowerHelper.Core.Services
{
using System;
using System.Diagnostics;
using WinPowerHelper.Core.Interfaces;
public class WinPowerManager: IPowerManager
{
private const string ShutdownCmd = "shutdown.exe";
private WinPowerManager() { }
private static readonly object _lock = new object();
private static WinPowerManager _instance;
public static WinPowerManager Instance
{
get
{
if (_instance == null)
{
lock (_lock)
{
if (_instance == null)
_instance = new WinPowerManager();
}
}
return _instance;
}
}
public void Shutdown()
{
Process.Start(ShutdownCmd, "-s");
}
public void Shutdown(TimeSpan interval)
{
Process.Start(ShutdownCmd, $"-s -t {interval.TotalSeconds}");
}
public void Sleep()
{
Process.Start(ShutdownCmd, "-h");
}
public void Sleep(TimeSpan interval)
{
Process.Start(ShutdownCmd, $"-h -t {interval.TotalSeconds}");
}
public void Restart()
{
Process.Start(ShutdownCmd, "-r");
}
public void Restart(TimeSpan interval)
{
Process.Start(ShutdownCmd, $"-r -t {interval.TotalSeconds}");
}
}
}
一些问题
- 数据绑定时, 如果用到值转换器(IValueConverter), 需要传递
ConverterParameter时, 如何传递字符串?
xaml中绑定代码如下:
"{Binding ElementName=timer, Path=IsTiming, Converter={StaticResource BoolToStringConverter}, ConverterParameter='取消;开始'}"
C#值转换器代码如下:
namespace WinPowerHelper.Wpf.Extensions
{
using System;
using System.Globalization;
using System.Windows.Data;
public class BoolToStringConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value.GetType() != typeof(bool)) return new InvalidCastException();
var splitText = (parameter as string).Split(';');
if (splitText == null || splitText.Length != 2)
return value; // 转换失败
return ((bool) value) ? splitText[0] : splitText[1];
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
}
- 主题的问题
模仿了 Mahapp.Metro 这个项目, 配色使用的都是这个项目里面的
wpf实现一个windows定时关机的工具的更多相关文章
- 【Windows定时关机】windows实现定时关机与取消
背景:本人昨晚本来打算将电脑设置为晚上12点 30定时关机,结果写成了:12:30,所以就在刚才,我正玩游戏的时候, 电脑弹出提示:“windows将在一分钟内关闭”,我刚开始一脸懵逼,后来打开昨天敲 ...
- 使用 WPF 开发一个 Windows 屏幕保护程序
最近有小伙伴问我如何可以让 Windows 静置一段时间不操作之后,显示一个特殊的界面.我想了想,屏幕保护程序可以做到这一点,而且,屏幕保护程序的开发也是非常简单的. 本文将介绍如何为 Windows ...
- Python实现Windows定时关机
是最初的几个爬虫,让我认识了Python这个新朋友,虽然才刚认识了几天,但感觉有种莫名的默契感.每当在别的地方找不到思路,总能在Python找到解决的办法.自动关机,在平时下载大文件,以及跑程序的时候 ...
- Windows定时关机
用shutdown命令.开始菜单>运行,输入shutdown -s -t 7200 (两个小时之后关机)at 12:00 shutdown -s (12:00关机) 其他设置:shutdown ...
- Python 代码控制Windows定时关机
为了在规定时间内实现电脑关机,我使用python编写了几行代码,最简单的实现了关机操作,后续再进行其它功能的添加(操作页面,取消等) import os,time #获取命令行输入的关机时间 inpu ...
- windows定时关机命令
at 11:00 shutdown.exe -s -t 120 https://jingyan.baidu.com/article/574c52191ea9996c8c9dc17a.html?st=2 ...
- 开源自己用python封装的一个Windows GUI(UI Automation)自动化工具,支持MFC,Windows Forms,WPF,Metro,Qt
首先,大家可以看下这个链接 Windows GUI自动化测试技术的比较和展望 . 这篇文章介绍了Windows中GUI自动化的三种技术:Windows API, MSAA - Microsoft Ac ...
- 分享一个WPF 实现 Windows 软件快捷小工具
分享一个WPF 实现 Windows 软件快捷小工具 Windows 软件快捷小工具 作者:WPFDevelopersOrg 原文链接:https://github.com/WPFDevelopers ...
- Windows: 在系统启动时运行程序、定时计划任务、定时关机
lesca今天介绍一些让系统在启动时,而非登录时,加载用户自定义的应用程序或脚本的方法,推荐度从前到后依次递减. 1. Windows任务计划(task scheduler) 用户可以按以下步骤进行操 ...
随机推荐
- 使用 setTimeout 来模拟一个 setInterval
setTimeout 超时调用:在多少时间 在执行: setinterval 每隔多少时间 就调用 例如: setTimeout这个的值是1000,也就是说在页面刷新后,1000毫秒之后才调用这个函数 ...
- C语言关键词——register
register修饰符暗示编译程序相应的变量将被频繁使用,如果可能的话,应将其保存在CPU的寄存器中,以加快其存储速度 例如:memcpy(des,src,i) { register char * d ...
- 一个C语言程序是由( )组成?
A) 一个主程序和若干子程序组成 B)一个或多个函数组成 C) 若干过程组成 D) 若干子程序组成 正确答案 B 解析 [解析] 一个C源程序是由一个main函数和若干个其他函数组成的.函数是C程序的 ...
- 修改 div 的滚动条的样式
修改 div 的滚动条的样式 需要用到浏览器专属的伪元素,没有万能的办法,支持的浏览器不是很多. 假设有一个(你已经)设好宽高.定好位的 div, <div class="group- ...
- Linux /etc/network/interfaces
Linux下/etc/network/interfaces文件用来配置网络接口. 1. 使用动态IP地址 auto eth0 iface eth0 inet dhcp 2. 使用静态IP地址 auto ...
- RPC远程过程调用(Remote Procedure Call)
RPC,就是Remote Procedure Call,远程过程调用 远程过程调用,自然是相对于本地过程调用 本地过程调用,就好比你现在在家里,你要想洗碗,那你直接把碗放进洗碗机,打开洗碗机开关就可以 ...
- cf1131D
题意:总共有n+m个点,每一个点都有一个val,给出一个n*m的矩阵,矩阵中第i行第j列的为=,表示 i 点 和 j+n个点的值相等,<表示i 点比j+n个点的值小,> 刚好相反 要求用最 ...
- 【笔记】机器学习 - 李宏毅 - 11 - Keras Demo2 & Fizz Buzz
1. Keras Demo2 前节的Keras Demo代码: import numpy as np from keras.models import Sequential from keras.la ...
- k8s 在Centos上 安装
k8s安装步骤: 1.所有机器上执行以下命令,准备安装环境:(注意是所有机器,主机master,从机node都要安装) 1.1.安装epel-release源(EPEL (Extra Packages ...
- 字符串相等 impossible 1480
题目描述 两个长度不超过80的字符串,串中包括大写.小写和空格字符,去掉空格并忽略大小写后,判断两个字符串是否相等. 输入描述 第1行输入是测试数据的组数n,每组测试数据占两行,第1行是第一个字符串s ...