已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C 调用调用 API 实现定时关机实现定时关机 这两天用 C 写了个用于定时关机的小程序 该简单程序由两个层次构成 即底层逻辑和用 户界面两部分 怕忘了当中一些细节 于是把它记录下来 一 程序逻辑设计 API 调用 事实上 可以直接调用系统的 shutdown exe 来实现计算机的关闭 重启和用户注销 常见 的用法如下 using System Dinogistics 引用该空间 按钮 click 事件 System Dinogistics Process p new Process p StartInfo FileName cmd exe p StartInfo UseShellExecute false p StartInfo RedirectStandardInput true p StartInfo RedirectStandardOutput true p StartInfo CreateNoWindow true p Start p StandardInput WriteLine shutdown s t 0 p StandardInput WriteLine exit p close 但这里 我用了调用 API 的方法 用于系统的关闭与重启 并将参考网络的一些 API 调用 封装成一个类库 SystemControl dll 下面 调用 user32 dll 中的关机方法 该方法是本程序的关键 DllImport user32 dll EntryPoint ExitWindowsEx CharSet CharSet Ansi private static extern int ExitWindowsEx int uFlags int dwReserved 对上述函数进行封装 使其更易懂 可得 protected static void ExitWindows int how bool force EnableToken SeShutdownPrivilege if force how how EWX FORCE if ExitWindowsEx how 0 0 throw new PrivilegeException FormatError Marshal GetLastWin32Error 其中 EnableToken 用于使能优先级令牌 PrivilegeException 是定义的优先级异常 以上述 方法为基础 可以得到这样一个公共方法 public static void ExitWindows RestartOptions how bool force switch how case RestartOptions Suspend SuspendSystem false force break case RestartOptions Hibernate SuspendSystem true force break default ExitWindows int how force break 该方法除定义了关机功能外 还包括了挂起 休眠等选项 当然 如果对上述设计进行精简 也就是忽略异常抛出等一系列功能 我们可以将整个过 程简化 public static void ExitWindows ExitWindowsEx 0 0 其中 ExitWindowsEx 就是前面的 API 引用 二 界面设计 程序运行界面如图 1 所示 图 1 程序运行界面 2 1 Timer 的应用 该程序有三个地方用到计时器 第一个是状态栏的时钟显示 一个是关机剩余时间显示 还有一个就是定时关机的倒计时 状态栏的时钟每秒刷新一次 刷新方法如下 private void TimeStatusRefresh object sender EventArgs e timeStatusLabel Text DateTime Now ToString 计时器的 Interval 属性是计时的周期 即执行完 Interval 指定的时间后 触发所指向的方法 该方法触发后 计时器重新计时 经过指定时间后再次触发 如此循环 当然 如果是 关机的话 就不循环了 黄鹤一去不复返 啊 其设定如下 statusTimer this statusTimer Enabled true this statusTimer Interval 1000 this statusTimer Tick new System EventHandler this TimeStatusRefresh 其余计时器也是类似的 2 2 DateTimePicker 的用户自定义格式 DateTimePicker 控件的格式可以由用户自己进行定义 比如图 1 所示的格式 可以这样进 行定义 其中 HH 是 24 小时的小时显示 12 小时为 hh this dateTimePicker1 CustomFormat yyyy 年 MM 月 dd 日 HH mm ss 一开始 我们禁能了该控件 当选中其前面的 RadioButton 时 该控件使能 2 3 NotifyIcon 将窗口隐藏到系统托盘中去 首先 我们定义隐藏的方法 这里 我们把窗口及其任务栏显示一并隐藏 该方法与窗体 的 resize 事件关联 由于在最小化时隐藏 而其它改变大小的情况并不隐藏 所以 一开 始就判断是否点击了最小化按钮 private void HideForm object sender EventArgs e if this WindowState FormWindowState Minimized 不在任务栏中显示 this ShowInTaskbar false 设定为不可见 这两项也可以用 this hide 实现 this Visible false 其复原的方法定义如下 显示窗口 双击托盘图标或选中打开程序时发生 显示该程序 private void ShowForm object sender EventArgs e this Visible true this ShowInTaskbar true 把窗口设定为常规大小 this WindowState FormWindowState Normal 程序隐藏效果见图 2 沙漏图标表示该程序 双击该图标 可以重新显示程序运行窗口 图 2 系统托盘显示 2 4 托盘图标上的 ContextMenuStrip 要做到右击托盘图标就可以打开或者关闭该软件 需要增加一个 ContextMenuStrip 该控 件的使用不难 关键是别忘了与 NotifyIcon 关联起来 contextMenuStrip1 this contextMenuStrip1 Items AddRange new System Windows Forms ToolStripItem this openToolStripMenuItem this EndToolStripMenuItem this contextMenuStrip1 Name contextMenuStrip1 this contextMenuStrip1 Size new System Drawing Size 137 48 openToolStripMenuItem this openToolStripMenuItem Name openToolStripMenuItem this openToolStripMenuItem Size new System Drawing Size 136 22 this openToolStripMenuItem Text 打开控制器 this openToolStripMenuItem Click new System EventHandler this openToolStripMenuItem Click EndToolStripMenuItem this EndToolStripMenuItem Name EndToolStripMenuItem this EndToolStripMenuItem Size new System Drawing Size 136 22 this EndToolStripMenuItem Text 结束程序 this EndToolStripMenuItem Click new System EventHandler this EndToolStripMenuItem Click 2 5 ToolTips 提供悬停帮助 ToolTips 可以给组件提供帮助信息 如关机按钮 可以通过 ToolTips 显示该按钮的功能 将 ToolTips 拖放到窗口上 即在各个控件中插入了设置提示的功能 2 6 Buttons 功能分配 按钮的事件设计大体相同 以重启按钮为例 其效果如图 3 所示 图 3 重启对话框 按下重启按钮 则出现如图 3 所示的对话框 重启代码如下 private void btnRestart Click object sender EventArgs e if MessageBox Show 确实要重启计算机 重启系统 MessageBoxButtons YesNo MessageBoxIcon Question DialogResult Yes WindowsController ExitWindows RestartOptions Reboot false 一开始 程序禁能了一些按钮 如定时关机按钮和停止按钮 当设定了关机时间后 定时 关机按钮被激活 定时关机代码如下 private void btnWaitShut Click object sender EventArgs e DisableBtns btnStop Enabled true btnWaitShut Enabled false if radioButtonSetTime Checked numOfSec int dateTimePicker1 Value DateTime Now TotalSeconds else numOfSec int numericUpDownMin Value 60 numericUpDownSec Value lblTips Text 开始倒计时 lblTips Text 离关机还剩 numOfSec 秒 lblTips Visible true 剩余时间提示计时器开始计时 showTimer Enabled true 设定关机时间 waitTimer Interval 1000 numOfSec 关机计时 waitTimer Enabled true 按下定时关机按钮 则立即关机 重启 注销以及定时关机等 4 个按钮被禁止 停止按钮 被激活 按下停止按钮 则关机倒计时被停止 private void btnStop Click object sender EventArgs e EnableBtns btnStop Enabled false btnWaitShut Enabled true sho
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年江西省和平医院医护人员招聘笔试模拟试题及答案详解
- 2026年衡水市中医医院医护人员招聘考试参考试题及答案详解
- 2026年环保合规托管运营协议
- 2026年武汉市第七医院医护人员招聘笔试备考题库及答案详解
- 塑料着色工岗位发展趋势考核试卷含答案
- 玻璃钢制品手糊工岗位技术传承考核试卷含答案
- 机械产品试验员安全综合强化考核试卷含答案
- 矿井通风操作工安全文明知识考核试卷含答案
- 2026年南京市下关妇幼保健所医护人员招聘笔试备考题库及答案详解
- 电化学精制装置操作工工作水平竞赛考核试卷含答案
- 2024年北京市高考物理试卷(含答案逐题解析)
- CHT 4020-2018 管线制图技术规范
- (2024年)《工伤保险培训》ppt课件完整版
- 2024-2025年上海中考英语真题及答案解析
- 办公家具生产设备清单
- 赋能:打造应对不确定性的敏捷团队
- 学前儿童行为观察的方法(课堂PPT)
- 工业机器人技术与应用PPT完整全套教学课件
- dd5e人物卡可填充格式角色卡夜版
- 第五章 马尔可夫过程
- GB/T 19247.4-2003印制板组装第4部分:分规范引出端焊接组装的要求
评论
0/150
提交评论