visual c#设计的多功能关机程序

Visual C#
设计多功能关机程序

许多软件都有自动关机功能,
特别是在长时间
下载
的时候,
这个功能可是使你不用以守候在计算机前面,
而电脑却能按照
您事先的设定自动关闭。现在我们用
visual
C#
来编写一个多功能的关机程序。该程序具有:定时关机、倒计时关机、关机
提醒、系统信息获取等四项功能
,
可设定关机时间精确到秒。并且让你很快掌握
Visual
C#
中对
API
的操作程序。


.
设计关闭
Windows
窗体

  1. 界面的设计

新建一个标准工程,向工程中增加一个
Windows
窗体并向窗体中添加如下控件,并分别设置其属性:

控件名

类别

Text
控件名

类别

Text
CheckBox1
CheckBox
自动关机

GrouPBox1
GroupBox
当前系统时间

CheckBox1
CheckBox
倒计时执行操作

GroupBox2
GroupBox
设定时间

CheckBox1
CheckBox
定时报警

TxtTime
TextBox

ButCancle
Button
取消

SetupTime
DateTimePicker

ButReOpen
Button
重新启动

SetupDate
DateTimePicker

ButClose
Button
关机

Timer1
Timer
100
ButSysInto
Button
系统信息

ButReLogin
Button
注消

Windows
窗体界面:
将窗体属性中的
caption
设置为

关闭
windows”
,名称设置为
“frmmain”

  1. 在窗体类中引用
    API
    函数

API
函数是构筑
Windows
应用程序的基石,是
Windows
编程的必备利器。每一种
Windows
应用程序开发工具都提供了间 接或直接调用了
Windows
API
函数的方法,
或者是调用
Windows
API
函数的接口,
也就是说具备调用动态连接库的能力。
Visual
C#
和其它开发工具一样也能够调用动态链接库的
API
函数。


Visual C#
中调用
API
的基本过程:

首先,在调用
API
之前,你必须先导入
System.Runtime.InteropServices
这个名称空间。该名称空间包含了在
Visual
C#
中调用
API
的一些必要集合,具体的方法如下:

using System.Runtime.InteropServices

using System.Text

在导入了名称空间后,
我们要声明在程序中所要用到的
API
函数。
我们的程序主要是获取系统的相关信息,
所以用到的
API
函数都是返回系统信息的。先给出在
Visual C#
中声明
API
的方法:

[ DllImport(“user32”) ]
public static extern long SetWindowPos(long hwnd , long hWndInsertAfter, long X , long y , long cx, long cy,
long wFlagslong)

其中,
“DllImport”
属性用来从不可控代码中调用一个方法,
它指定了
DLL
的位置,

DLL
中包含调用的外部方法;
“kernel32”
设定了类库名;
“public”
指明函数的访问类型为公有的;
“static”
修饰符声明一个静态元素,
而该元素属于类型本身而不是
指定的对象;
“extern”
表示该方法将在工程外部执行,同时使用
DllImport
导入的方法必须使用
“extern”
修饰符;最后
GetWindowsDirectory
函数包含了两个参数,一个为
StringBuilder
类型的,另一个为
int
类型的,该方法返回的内容存在

StringBuilder
类型的参数中。
同时,
因为我们在这里使用到了
StringBuilder
类,
所以在程序的开始处,
我们还得添加
System.Text
这个名称空间,方法同上。

声明其它的在程序中所要用到的
API
函数:

[ DllImport(“user32”) ]
public static extern long ExitWindowsEx(long uFlags, long dwReserved )
[ DllImport(“shell32”) ]
public static extern long ShellAbout(long uFlags, long dwReserved )

  1. 增加窗体类的变量

long dwReserved
const int SHUTDOWN = 1
const int REBOOT = 2
const int LOGOFF = 0
long sh
int counter , n

  1. 编写窗体类的方法

在窗体的
Load(
事件过程中编写如下代码:

private void frmmain1_Load(object sender, System.EventArgs e )
{
file://
用系统时间初始化组件

Time.Text = System.DateTime.Today.ToShortDateString( ) + " “+ System.DateTime.Today.ToLongTimeString( )
}

在组件
Timer1

OnTimer
事件过程中编写如下代码:

/ /
在组件
Timer1

OnTimer
事件过程中编写如下代码:

private void Timer1_Timer(object sender, System.EventArgs e )
{
file://
接收当前日期和时间,用于即时显示

string CurrDate=System.DateTime.Today.ToShortDateString( )
string CurrTime=System.DateTime.Today.ToShortTimeString( )
file://
随时检测设定的关机日期和时间是否有效

if( this.CheckBox1.Checked == true )
{
if(CurrDate== SetupDate.ToString( ) && CurrTime==SetupTime.ToString( ) )
ColseComputer( )
}
}
private void ColseComputer( )
{ sh = ExitWindowsEx(SHUTDOWN, dwReserved) }
private void button1_Click(object sender, System.EventArgs e )
{
Form2 frm=new Form2( )
frm.Show( )
}
private void ButReOpen_Click(object sender, System.EventArgs e )
{ sh = ExitWindowsEx(REBOOT, dwReserved) }
private void ButReLogin_Click(object sender, System.EventArgs e )
{ sh = ExitWindowsEx(LOGOFF, dwReserved) }
private void ButCancle_Click(object sender, System.EventArgs e )
{ this.Close( ) }
private void ButClose_Click_1(object sender, System.EventArgs e )
{ sh = ExitWindowsEx(REBOOT, dwReserved) }

.
设计获取系统信息的
Windows
窗体

  1. 界面的设计

向工程中增加一个
Windows
窗体并向窗体中添加如下控件:

  1. 在窗体类中引用
    API
    函数

using System.Runtime.InteropServices
using System.Text
[ DllImport(“kernel32”) ]
public static extern void GetWindowsDirectory(StringBuilder WinDir,int count)
[ DllImport(“kernel32”) ]
public static extern void GetSystemDirectory(StringBuilder SysDir,int count)
[ DllImport(“kernel32”) ]
public static extern void GetSystemInfo(ref CPU_INFO cpuinfo)
[ DllImport(“kernel32”) ]
public static extern void GlobalMemoryStatus(ref MEMORY_INFO meminfo)
[ DllImport(“kernel32”) ]
public static extern void GetSystemTime(ref SYSTEMTIME_INFO stinfo)

以上几个
API
的作用分别是获取系统路径,获得
CPU
相关信息,获得内存的相关信息,获得系统时间等。

  1. 定义以下各结构

在声明完所有的
API
函数后,我们发现后三个函数分别用到了
CPU_INFO

MEMORY_INFO

SYSTEMTIME_INFO
等结构,这
些结构并非是
.net
内部的,它们从何而来?其实,我们在用到以上
API
调用时均需用到以上结构,我们将函数调用获得的
信息存放在以上的结构体中,最后返回给程序输出。这些结构体比较复杂,但是如果开发者能够熟练运用,那么整个
API
世界将尽在开发者的掌握之中。以下就是上述结构体的声明:

//
定义
CPU
的信息结构

[StructLayout(LayoutKind.Sequential) ]
public struct CPU_INFO
{
public uint dwOemId
public uint dwPageSize
public uint lpMinimumApplicationAddress
public uint lpMaximumApplicationAddress
public uint dwActiveProcessorMask
public uint dwNumberOfProcessors
public uint dwProcessorType
public uint dwAllocationGranularity
public uint dwProcessorLevel
public uint dwProcessorRevision
}

file://
定义内存的信息结构

[StructLayout(LayoutKind.Sequential) ]
public struct MEMORY_INFO
{
public uint dwLength
public uint dwMemoryLoad
public uint dwTotalPhys
public uint dwAvailPhys
public uint dwTotalPageFile
public uint dwAvailPageFile
public uint dwTotalVirtual
public uint dwAvailVirtual
}

file://
定义系统时间的信息结构

[StructLayout(LayoutKind.Sequential) ]
public struct SYSTEMTIME_INFO
{
public ushort wYear
public ushort wMonth
public ushort wDayOfWeek
public ushort wDay
public ushort wHour
public ushort wMinute
public ushort wSecond
public ushort wMilliseconds
}

  1. 编写窗体类的方法

private void button1_Click(object sender, System.EventArgs e )
{
file://
调用
GetWindowsDirectory

GetSystemDirectory
函数分别取得
Windows
路径和系统路径

const int nChars = 128
StringBuilder Buff = new StringBuilder(nChars)
GetWindowsDirectory(Buff,nChars)
WindowsDirectory.Text = “Windows
路径:
“+Buff.ToString( )
GetSystemDirectory(Buff,nChars)
SystemDirectory.Text = "
系统路径:
“+Buff.ToString( )

file://
调用
GetSystemInfo
函数获取
CPU
的相关信息

CPU_INFO CpuInfo
CpuInfo = new CPU_INFO( )
GetSystemInfo(ref CpuInfo)
NumberOfProcessors.Text = "
本计算机中有
“+CpuInfo.dwNumberOfProcessors.ToString( ) +”

CPU”;
ProcessorType.Text = “CPU
的类型为
“+CpuInfo.dwProcessorType.ToString( )
ProcessorLevel.Text = “CPU
等级为
“+CpuInfo.dwProcessorLevel.ToString( )
OemId.Text = “CPU

OEM ID

“+CpuInfo.dwOemId.ToString( )
PageSize.Text = “CPU
中的页面大小为
“+CpuInfo.dwPageSize.ToString( )

file://
调用
GlobalMemoryStatus
函数获取内存的相关信息

MEMORY_INFO MemInfo
MemInfo = new MEMORY_INFO( )
GlobalMemoryStatus(ref MemInfo)
MemoryLoad.Text = MemInfo.dwMemoryLoad.ToString( ) +“%
的内存正在使用

TotalPhys.Text = "
物理内存共有
“+MemInfo.dwTotalPhys.ToString( ) +”
字节

AvailPhys.Text = "
可使用的物理内存有
“+MemInfo.dwAvailPhys.ToString( ) +”
字节

TotalPageFile.Text = "
交换
文件总大小为
“+MemInfo.dwTotalPageFile.ToString( ) +”
字节

AvailPageFile.Text = "
尚可
交换
文件大小为
“+MemInfo.dwAvailPageFile.ToString( ) +”
字节

TotalVirtual.Text = "
总虚拟内存有
“+MemInfo.dwTotalVirtual.ToString( ) +”
字节

AvailVirtual.Text = "
未用虚拟内存有
“+MemInfo.dwAvailVirtual.ToString( ) +”
字节

file://
调用
GetSystemTime
函数获取系统时间信息

SYSTEMTIME_INFO StInfo
StInfo = new SYSTEMTIME_INFO( )
GetSystemTime(ref StInfo)
Date.Text = StInfo.wYear.ToString( ) +”

“+StInfo.wMonth.ToString( ) +”

“+StInfo.wDay.ToString( ) +”


Time.Text = (StInfo.wHour+8).ToString( ) +”

“+StInfo.wMinute.ToString( ) +”

“+StInfo.wSecond.ToString( )
+”


}


.
结束语。

上面介绍了
Visual C#
开发多功能关机程序的整个过程,该程序有一定的实用价值。通过本文的学习,我相信稍有
API
使用基础的开发者可以马上触类旁通,很快掌握
Visual
C#
中对
API
的操作。上面给出的实例仅仅是一个简单的程序,不过
有兴趣的读者可以进一步完善其功能。做出更完美的系统应用程序

时间: 2024-10-12 18:27:55

visual c#设计的多功能关机程序的相关文章

设计C/S架构应用程序的并发功能

C/S架构的ERP.CRM程序有的是以并发点(Concurrency)来销售,并发点是指同时在线人数.并发数量大时,理论上程序的运行速度会慢,软件供应商(vendor)也以控制并发的上限以解决客户对系统性能的抱怨.我接触到的一个ERP系统,它的定价策略如下表所示: 序号 并发用户 价格 1 5个以下 每用户20000,总价小于10万 2 5-20 每用户15000,总价小于30万 3 20-50 每用户12000,总价小于60万 4 50个以 每用户10000,总价最小50万 从软件开发的角度,

Windows倒计时60秒关机程序【6个下载】

在网上搜了很久都没找到合适使用的倒计时关机程序,要求有友好的提示界面,还可取消关机操作.干脆就自动动手做,一不留神就做了6个,喜欢的拿去.建议跟本人设计的<Windows定时任务>配合使用,效果更佳. 倒计时60秒关机1  点击这里下载 倒计时60秒关机2  点击这里下载 倒计时60秒关机3  点击这里下载 倒计时60秒关机4  点击这里下载 倒计时60秒关机5  点击这里下载 倒计时60秒关机6  点击这里下载

MFC定时关机程序的实现2-添加启动项到注册表

虽然上一篇实现了的定时关机,但是还不够完善,比如开机自动启动,然后按照配置的时间定时关机,并最小化到任务栏. 先来说开机启动怎么实现,开机启动实现的方法有好几种,比如直接在开始菜单启动项里添加一个程序的快捷方式,路径为 C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup\ 不过这个路径不同的电脑可能不一样,因为这个路径可以改变,比如说改到D盘 也可以直接写入注册表,这个比较方便,这个开机启动项在注册表中的路径是 HKEY_CU

审核流(2)流程设计-SNF.WorkFlow功能使用说明--SNF快速开发平台3.1

流程设计 图形化的流程设计,更方便.直观 1.打开“流程设计“程序,如上.点击”新建“如下: 2.红色部分为必填项,审批对象是选择要审批的程序菜单,单据名称是在审核流流转时用于提示的单据名称,还要选择审核的数据表和审核状态字段.当维护完成后进行“确定“保存.再点击 进行图形化设计审核流. 3.从左边拖拽审核节点和连接线. 4.双击节点 ,设计节点此节点的名称.审核人.投票比例等. 注:可以选择多人再结合投票设置可以达到会审需求. 5.双击连接线可以配置走此分支需要具备的条件.如果业务人员可以用鼠

MFC定时关机程序的实现1

写个定时关机程序自用,界面简单实用,最终界面如下 第一步,新建一个MFC对话框应用程序,拖几个控件过来, 界面如下: 然后给下拉列表框,复选按钮绑定变量,以方便进行操作. CComboBox m_com_hour; CComboBox m_com_minute; CComboBox m_com_second; 第二步,先实现简单关机功能,不通过文件读写进行关键.在选择过时间后,确定关机后按时关机. 1,给下拉列表框添加更改事件,直接右键控件->选择添加事件处理程序,选择CBN_SELCHANGE

用Win32写的定时关机程序

由于本人记性不太好,晚上经常忘记关电脑,白白浪费了很多的电.在网上也找了一些定时关机的软件,想到最近自己也在学习VC++,就想自己写一个定时关机的小程序,正好也可以检验自己所学的东西. 程序源码下载地址:点击下载 先来看看效果图: 写的比较简陋,但是只要能实现功能就好了. 写Win32应用程序首先要有WinMain函数: int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR    lpCmdLine

数据库设计——评论回复功能

1.概述 评论功能已经成为APP和网站开发中的必备功能.本文主要介绍评论功能的数据库设计. 评论功能最主要的是发表评论和回复评论(删除功能在后台).评论功能的拓展功能体现有以下几方面: (1)单篇文章的评论数量和信息展示: (2)从时间维度,按照时间倒叙的方式展示动态的用户评论信息: (3)不同栏目,不同模块,不同时间维度的评论排行展示: (4)精华评论的单独推荐和聚合展示: (5)评论后直接分享到绑定的第三方平台: (6)点赞数.回复数等维度的排行等. 评论的后台管理: (1)删除: (2)推

1.3.4 设计并发友好的应用程序

使用传统的命令风格编写多线程应用程序时,我们要面对两个问题: ■很难让现有的顺序代码变成并行的代码,因为要显式使用线程,必须修改大部分的基本代码. ■使用共享状态和锁定是困难的.必须仔细考虑如何使用锁来避免争用条件和死锁,留下足够的空间并行执行. 函数式编程给了我们答案: ■使用声明编式程风格时,可以在现有的代码中引入并行.替换很少几个基元,就能把命令与并行方式执行的命令组合起来. ■由于具有不可变性,不可能引入争用条件,可以编写无需锁定的代码:只要看到哪部分程序是独立的,就可以立刻把它修改成并

Visual Studio中创建混合移动应用程序解决方案Xamarin Portable Razor

在Visual Studio中创建混合移动应用程序的一个解决方案是使用Xamarin Portable Razor工具,这是ASP.NET MVC API针对移动设备的一个轻量级实现.Xamarin编写了一个示例应用程序,演示了如何使用C#.本地API和Web技术编写iOS及Android应用. Visual Studio中创建混合移动应用程序解决方案Xamarin Portable Razor,布布扣,bubuko.com