zl程序教程

您现在的位置是:首页 >  后端

当前栏目

C#实现关机重启及注销实例代码

c#实例代码 实现 重启 关机 注销
2023-06-13 09:15:39 时间

本文所述的C#实例代码是一个基于VisualC#2010编写的关机、重启、注销程序,类似的C#程序网上还有不少,每个人的写法都各有不同,这段程序供新手参考下。本代码中还用到了一个计时器,用来显示系统运行的时间,以下为完整实例代码:

usingSystem;
usingSystem.Drawing;
usingSystem.Collections;
usingSystem.ComponentModel;
usingSystem.Windows.Forms;
usingSystem.Data;
usingSystem.Runtime.InteropServices;
usingSystem.Threading;
namespaceshutdowncodes
{
publicclassForm1:System.Windows.Forms.Form
{
privateSystem.Windows.Forms.GroupBoxgroupBox1;
privateSystem.Windows.Forms.TextBoxtextBox1;
privateSystem.Windows.Forms.Buttonbutton1;
privateSystem.Windows.Forms.Buttonbutton2;
privateSystem.Windows.Forms.Buttonbutton3;
privateSystem.ComponentModel.IContainercomponents;
[StructLayout(LayoutKind.Sequential,Pack=1)]
publicstructTokPriv1Luid
{
publicintCount;
publiclongLuid;
publicintAttr;
}
[DllImport("kernel32.dll",ExactSpelling=true)]
//GetCurrentProcess函数返回当前进程的一个句柄
publicstaticexternIntPtrGetCurrentProcess();
[DllImport("advapi32.dll",ExactSpelling=true,SetLastError=true)]
//OpenProcessToken函数打开一个进程的访问代号
publicstaticexternboolOpenProcessToken(IntPtrProcessHandles,intDesiredAccess,refIntPtrTokenHandle);
[DllImport("advapi32.dll",SetLastError=true)]
//LookupPrivilegeValue函数获得本地唯一的标示符(LUID),用于在特定的系统中
//表示特定的优先权。
publicstaticexternboolLookupPrivilegeValue(stringlpSystemName,stringlpName,reflonglpLuid);
//AdjustTokenPrivileges函数允许或者禁用指定访问记号的优先权。
//允许或者禁用优先权需要TOKEN_ADJUST_PRIVILEGES访问权限。
[DllImport("advapi32.dll",ExactSpelling=true,SetLastError=true)]
publicstaticexternboolAdjustTokenPrivileges(IntPtrTokenHandle,boolDisableAllPrivileges,refTokPriv1LuidNewState,intBufferLength,IntPtrPreviousState,IntPtrReturnLength);
//ExitWindowsEx函数可以注销,关机或者重新启动系统
[DllImport("user32.dll",ExactSpelling=true,SetLastError=true)]
publicstaticexternboolExitWindowsEx(intflg,intrea);
privateSystem.Threading.Timertimer;
privateconstintSE_PRIVILEGE_ENABLED=0x00000002;
privateconstintTOKEN_QUERY=0x00000008;
privateconstintTOKEN_ADJUST_PRIVILEGES=0x00000020;
privateconststringSE_SHUTDOWN_NAME="SeShutdownPrivilege";
privateconstintEWX_LOGOFF=0x00000000;//注销
privateconstintEWX_SHUTDOWN=0x00000001;//关机
privateconstintEWX_REBOOT=0x00000002;//重启
privateconstintEWX_FORCE=0x00000004;
privatestaticvoidRebootCommand(intflg)
{
boolok;
TokPriv1Luidtp;
IntPtrhproc=GetCurrentProcess();//得到当前的进程
IntPtrhtok=IntPtr.Zero;
ok=OpenProcessToken(hproc,TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY,refhtok);
tp.Count=1;
tp.Luid=0;
tp.Attr=SE_PRIVILEGE_ENABLED;
ok=LookupPrivilegeValue(null,SE_SHUTDOWN_NAME,reftp.Luid);
ok=AdjustTokenPrivileges(htok,false,reftp,0,IntPtr.Zero,IntPtr.Zero);
ok=ExitWindowsEx(flg,0);
}
publicForm1()
{
InitializeComponent();
}
protectedoverridevoidDispose(booldisposing)
{
if(disposing)
{
if(components!=null)
{
components.Dispose();
}
}
base.Dispose(disposing);
}
#regionWindows窗体设计器生成的代码
privatevoidInitializeComponent()
{
this.groupBox1=newSystem.Windows.Forms.GroupBox();
this.textBox1=newSystem.Windows.Forms.TextBox();
this.button1=newSystem.Windows.Forms.Button();
this.button2=newSystem.Windows.Forms.Button();
this.button3=newSystem.Windows.Forms.Button();
this.groupBox1.SuspendLayout();
this.SuspendLayout();
//
//groupBox1
//
this.groupBox1.Controls.Add(this.textBox1);
this.groupBox1.Location=newSystem.Drawing.Point(48,24);
this.groupBox1.Name="groupBox1";
this.groupBox1.Size=newSystem.Drawing.Size(192,56);
this.groupBox1.TabIndex=0;
this.groupBox1.TabStop=false;
this.groupBox1.Text="系统已运行时间";
//
//textBox1
//
this.textBox1.Location=newSystem.Drawing.Point(24,24);
this.textBox1.Name="textBox1";
this.textBox1.ReadOnly=true;
this.textBox1.Size=newSystem.Drawing.Size(152,21);
this.textBox1.TabIndex=1;
this.textBox1.Text="";
//
//button1
//
this.button1.Location=newSystem.Drawing.Point(16,112);
this.button1.Name="button1";
this.button1.Size=newSystem.Drawing.Size(64,32);
this.button1.TabIndex=1;
this.button1.Text="关闭系统";
this.button1.Click+=newSystem.EventHandler(this.button1_Click);
//
//button2
//
this.button2.Location=newSystem.Drawing.Point(112,112);
this.button2.Name="button2";
this.button2.Size=newSystem.Drawing.Size(64,32);
this.button2.TabIndex=2;
this.button2.Text="注销系统";
this.button2.Click+=newSystem.EventHandler(this.button2_Click);
//
//button3
//
this.button3.Location=newSystem.Drawing.Point(208,112);
this.button3.Name="button3";
this.button3.Size=newSystem.Drawing.Size(64,32);
this.button3.TabIndex=3;
this.button3.Text="重启系统";
this.button3.Click+=newSystem.EventHandler(this.button3_Click);
//
//Form1
//
this.AutoScaleBaseSize=newSystem.Drawing.Size(6,14);
this.ClientSize=newSystem.Drawing.Size(296,173);
this.Controls.Add(this.button3);
this.Controls.Add(this.button2);
this.Controls.Add(this.button1);
this.Controls.Add(this.groupBox1);
this.Name="Form1";
this.Text="简单的关机程序";
this.Load+=newSystem.EventHandler(this.Form1_Load);
this.groupBox1.ResumeLayout(false);
this.ResumeLayout(false);
}
#endregion
///<summary>
///应用程序的主入口点。
///</summary>
[STAThread]
staticvoidMain()
{
Application.Run(newForm1());
}
privatevoidbutton1_Click(objectsender,System.EventArgse)
{
RebootCommand(EWX_SHUTDOWN+EWX_FORCE);
}
privatevoidbutton2_Click(objectsender,System.EventArgse)
{
RebootCommand(EWX_LOGOFF+EWX_FORCE);
}
privatevoidbutton3_Click(objectsender,System.EventArgse)
{
RebootCommand(EWX_REBOOT+EWX_FORCE);
}
privatevoidForm1_Load(objectsender,System.EventArgse)
{
textBox1.Text=(Environment.TickCount/(1000*60)).ToString()+"分钟";
//每1秒钟更新一次TextBox上显示的系统运行时间
timer=newSystem.Threading.Timer(newTimerCallback(OnTimer),null,0,1000);
}
//获得系统已运行的时间
privatevoidOnTimer(objectstate)
{
textBox1.Text=(Environment.TickCount/(1000*60)).ToString()+"分钟";
textBox1.Refresh();
}
}
}