怎么用C#做一个关机程序?

syp133 2005-01-29 08:14:58
C#的关机语句是什么啊?我用的是XP.谢谢啦

明晚结帖!
...全文
396 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
seekg 2005-01-30
  • 打赏
  • 举报
回复
up
liulxmooo 2005-01-30
  • 打赏
  • 举报
回复
up
isaacyh 2005-01-29
  • 打赏
  • 举报
回复
也可以用WMI实现自动关机的。。。。
但一样要获得权限。。。。

private void button1_Click(object sender, System.EventArgs e)
{

UserANDPass temp = new UserANDPass();
if(temp.ShowDialog(this) != DialogResult.OK)
{
return;
}

try
{
if(temp.textBoxIP.Text != "")
{

ConnectionOptions co = new ConnectionOptions();

co.Username = temp.textBoxUser.Text;
co.Password = temp.textBoxPass.Text;

string tempPath = "\\\\"+temp.textBoxIP.Text+"\\"+temp.comboBoxPath.Text;

System.Management.ManagementScope ms = new ManagementScope(tempPath,co);

System.Management.ObjectQuery oq = new ObjectQuery("SELECT * FROM Win32_OperatingSystem");

ManagementObjectSearcher query1 = new ManagementObjectSearcher(ms,oq);

foreach (ManagementObject mo in query1.Get())
{
string[] ss ={""};
mo.InvokeMethod("Reboot",ss);
}
}
else
{
System.Management.ObjectQuery oq = new ObjectQuery("SELECT * FROM Win32_OperatingSystem");

ManagementObjectSearcher query1 = new ManagementObjectSearcher(oq);

foreach (ManagementObject mo in query1.Get())
{
string[] ss ={""};
mo.InvokeMethod("Shutdown",ss);
}
}
}
catch(Exception E)
{
this.richTextBoxShell.Text += "\n";
this.richTextBoxShell.Text += E.Message;
}
}
james1219 2005-01-29
  • 打赏
  • 举报
回复
学习ING
soilwork 2005-01-29
  • 打赏
  • 举报
回复
2000和XP也可以关机,获得权限就ok了
dazhu2 2005-01-29
  • 打赏
  • 举报
回复
2000和XP上只能注销,不能实现关机
  • 打赏
  • 举报
回复
调用ExitWindowsEx只能在98上面有效,2000以上的系统都要加一堆代码提升系统权限,所以还是多查查资料吧,楼上例子不用试就知道没效果
richardchoi 2005-01-29
  • 打赏
  • 举报
回复
主要是调用Win32API实现
kenengjiang 2005-01-29
  • 打赏
  • 举报
回复
另外可以去Search.csdn.net搜一下
http://search.csdn.net/search.asp?key=%B9%D8%BB%FA&class=.NET%BC%BC%CA%F5&size=10&option=advance
kenengjiang 2005-01-29
  • 打赏
  • 举报
回复
Declare Function ExitWindowsEx Lib "user32" Alias "ExitWindowsEx" (ByVal uFlags As Long, ByVal dwReserved As Long) As Long

说明
退出windows,并用特定的选项重新启动
返回值
Long,非零表示成功,零表示失败。会设置GetLastError
参数表
参数 类型及说明
uFlags Long,指定下述一个或多个标志(用OR运算符合并到一起)
EWX_FORCE 强迫中止没有响应的进程
EWX_LOGOFF 中止进程,然后注销
EWX_SHUTDOWN 关掉系统电源(如果可能的话,ATX电源就可以)
EWX_REBOOT 重新引导系统
EWX_SHUTDOWN 关闭系统
dwReserved Long,保留,设为零
注解
这个函数调用后会立刻返回,系统关闭过程是在后台进行的。注意先中止自己的应用程序,使关闭过程更显平顺。当然,您的进程必须有足够的优先权,否则也不能执行这种操作
kenengjiang 2005-01-29
  • 打赏
  • 举报
回复
许多软件都有自动关机功能,特别是在长时间下载的时候,这个功能可是使你不用以守候在计算机前面,而电脑却能按照您事先的设定自动关闭。现在我们用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"。

  2. 在窗体类中引用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 ) ;

  3. 增加窗体类的变量

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

  4. 编写窗体类的方法

  在窗体的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) ; }

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧