基本界面

起源

在家睡前喜欢用电脑放情景喜剧看,电脑需要定时关机,一开始直接命令行定时关机,感觉有点小麻烦, 于是最近弄了个有界面的

主要功能

在指定的时间之后执行 关机|休眠|重启 的操作, 支持取消.

实现思路

使用了 Prism 来辅助实现mvvm模式, 主要用到了其中的 BindableBaseDelegateCommand 这两个类.

关机|睡眠|重启 使用 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}");
}
}
}

具体见github

一些问题

  • 数据绑定时, 如果用到值转换器(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定时关机的工具的更多相关文章

  1. 【Windows定时关机】windows实现定时关机与取消

    背景:本人昨晚本来打算将电脑设置为晚上12点 30定时关机,结果写成了:12:30,所以就在刚才,我正玩游戏的时候, 电脑弹出提示:“windows将在一分钟内关闭”,我刚开始一脸懵逼,后来打开昨天敲 ...

  2. 使用 WPF 开发一个 Windows 屏幕保护程序

    最近有小伙伴问我如何可以让 Windows 静置一段时间不操作之后,显示一个特殊的界面.我想了想,屏幕保护程序可以做到这一点,而且,屏幕保护程序的开发也是非常简单的. 本文将介绍如何为 Windows ...

  3. Python实现Windows定时关机

    是最初的几个爬虫,让我认识了Python这个新朋友,虽然才刚认识了几天,但感觉有种莫名的默契感.每当在别的地方找不到思路,总能在Python找到解决的办法.自动关机,在平时下载大文件,以及跑程序的时候 ...

  4. Windows定时关机

    用shutdown命令.开始菜单>运行,输入shutdown -s -t 7200 (两个小时之后关机)at 12:00 shutdown -s (12:00关机) 其他设置:shutdown ...

  5. Python 代码控制Windows定时关机

    为了在规定时间内实现电脑关机,我使用python编写了几行代码,最简单的实现了关机操作,后续再进行其它功能的添加(操作页面,取消等) import os,time #获取命令行输入的关机时间 inpu ...

  6. windows定时关机命令

    at 11:00 shutdown.exe -s -t 120 https://jingyan.baidu.com/article/574c52191ea9996c8c9dc17a.html?st=2 ...

  7. 开源自己用python封装的一个Windows GUI(UI Automation)自动化工具,支持MFC,Windows Forms,WPF,Metro,Qt

    首先,大家可以看下这个链接 Windows GUI自动化测试技术的比较和展望 . 这篇文章介绍了Windows中GUI自动化的三种技术:Windows API, MSAA - Microsoft Ac ...

  8. 分享一个WPF 实现 Windows 软件快捷小工具

    分享一个WPF 实现 Windows 软件快捷小工具 Windows 软件快捷小工具 作者:WPFDevelopersOrg 原文链接:https://github.com/WPFDevelopers ...

  9. Windows: 在系统启动时运行程序、定时计划任务、定时关机

    lesca今天介绍一些让系统在启动时,而非登录时,加载用户自定义的应用程序或脚本的方法,推荐度从前到后依次递减. 1. Windows任务计划(task scheduler) 用户可以按以下步骤进行操 ...

随机推荐

  1. opencv —— minEnclosingCircle、fitEllipse 寻找包裹轮廓的最小圆、点集拟合椭圆

    寻找包裹轮廓的最小圆:minEnclosingCircle 函数 返回圆应满足:① 轮廓上的点均在圆形空间内.② 没有面积更小的满足条件的圆. void minEnclosingCircle(Inpu ...

  2. 记录 Spine骨骼动画导入unity 步骤[unity3d 4.6.6版本 2d动画]

    1:准备好unity使用Spine所需要的运行库,可到如下地址 https://github.com/EsotericSoftware/spine-runtimes/tree/master/spine ...

  3. 如何使用maven开启一个webapp项目

    1.使用maven创建好一个webapp项目 2.pom.xml: 第一步:修改版本 <properties> <project.build.sourceEncoding>UT ...

  4. input禁止输入的方法

    1: readonly规定输入字段为只读可复制,但是,用户可以使用Tab键切换到该字段,可选择,可以接收焦点,还可以选中或拷贝其文本. <input type="text" ...

  5. mysql必知必会--使用MySQL

    连接 在具有可供使用的MySQL DBMS和客户机软件之后,有必要简要讨 论一下如何连接到数据库. MySQL与所有客户机 - 服务器DBMS一样,要求在能执行命令之前登 录到DBMS.登录名可以与网 ...

  6. mysql官方源安装的一些问题

    今天测试Linux 各个软件源 ,发现mysql 配置官方源之后,yum install -y mysql   安装了 mysql lastst 最新版,  安装完之后,奇葩的是没有提示输入密码, 所 ...

  7. SSH-Secure-Shell 3.2.9 build283版本,创建直接打开文件传输的快捷方式的方法

    2019-12-31 16:21:23 版本信息: 在安装目录下新建快捷方式 目标填写:"D:\SSH-Secure-Shell\SshClient.exe" /f 图标选择,系统 ...

  8. JAVA全套资料含视频源码(持续更新~)

    本文旨在免费分享我所搜集到的Java学习资源,所有资源都是通过正规渠道获取,不存在侵权.现在整理分享给有所需要的人. 希望对你们有所帮助!有新增资源我会更新的~大家有好的资源也希望分享,大家互帮互助共 ...

  9. linux 网络接口,ip地址,路由设定

    本文是基于centos 配置DNS条目: 配置文件:/etc/resolv.conf 修改主机名称: 命令:hostname NAME.重启后失效 配置文件:/etc/sysconfig/networ ...

  10. 二维数组 A[m][n] 按行优先和按列优先的 下标地址转换公式

    设二维数组 A[m][n] 按行优先存储, 每个元素占 p 个字节, 则 Loc(i, j) 的地址为 (i * n + m) * p, 第 i 行前面有 i 行, 每行有 n 个元素, 加上 第 i ...