C#电脑重启,关机,注销

来源:互联网 发布:淘宝话费代充平台 编辑:程序博客网 时间:2024/05/02 00:44

  /// <summary>
    /// 电脑管理工具类
    /// </summary>
   public  class ComputerManageLib
   {

       #region API

       /// <summary>
       /// 设置系统时间
       /// </summary>
       /// <param name="time"></param>
       /// <returns></returns>
       [DllImport("kernel32.dll")]
       private static extern bool SetLocalTime(ref SYSTEMTIME time);

       /// <summary>
       ///     获取当前进程的一个伪句柄
       ///  只要当前进程需要一个进程句柄,就可以使用这个伪句柄。
       ///  该句柄可以复制,但不可继承。
       ///  不必调用CloseHandle函数来关闭这个句柄
       /// </summary>
       /// <returns></returns>
       [DllImport("kernel32.dll", ExactSpelling = true)]
       internal static extern IntPtr GetCurrentProcess();

       [DllImport("advapi32.dll", ExactSpelling = true, SetLastError = true)]
       internal static extern bool OpenProcessToken(IntPtr h, int acc, ref   IntPtr phtok);

       [DllImport("advapi32.dll", SetLastError = true)]
       internal static extern bool LookupPrivilegeValue(string host, string name, ref   long pluid);

       [DllImport("advapi32.dll", ExactSpelling = true, SetLastError = true)]
       internal static extern bool AdjustTokenPrivileges(IntPtr htok, bool disall,
       ref   TokPriv1Luid newst, int len, IntPtr prev, IntPtr relen);

       [DllImport("user32.dll", ExactSpelling = true, SetLastError = true)]
       internal static extern bool ExitWindowsEx(int flg, int rea);

       #endregion


       #region 属性

       #region 字段

       static string _StringS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabckefghijklmnopqrstuvwxyz";

       static string _StringN = "0123456789";

       /// <summary>
       /// 随机种子
       /// </summary>
       public static Random StaticRandom = new Random();


       internal const int SE_PRIVILEGE_ENABLED = 0x00000002;
       internal const int TOKEN_QUERY = 0x00000008;
       internal const int TOKEN_ADJUST_PRIVILEGES = 0x00000020;
       internal const string SE_SHUTDOWN_NAME = "SeShutdownPrivilege";
       internal const int EWX_LOGOFF = 0x00000000;
       internal const int EWX_SHUTDOWN = 0x00000001;
       internal const int EWX_REBOOT = 0x00000002;
       internal const int EWX_FORCE = 0x00000004;
       internal const int EWX_POWEROFF = 0x00000008;
       internal const int EWX_FORCEIFHUNG = 0x00000010;

       #endregion

       /// <summary>
       /// 系统时间参数
       /// </summary>
       [StructLayout(LayoutKind.Sequential)]
       private struct SYSTEMTIME
       {
           public short year;
           public short month;
           public short dayOfWeek;
           public short day;
           public short hour;
           public short minute;
           public short second;
           public short milliseconds;
       }

       [StructLayout(LayoutKind.Sequential, Pack = 1)]
       internal struct TokPriv1Luid
       {
           public int Count;
           public long Luid;
           public int Attr;
       }

       #endregion


       #region 方法

   

       /// <summary>
       /// 得到指定长度的字符串
       /// </summary>
       /// <param name="Length">指定长度</param>
       /// <returns></returns>
       public static string GetLengthStr(int Length)
       {
           StringBuilder Sb = new StringBuilder();
           if (Length < 6)
               Length = 6;
           for (int i = 0; i < 4; i++)
           {
               Sb.Append(_StringS[StaticRandom.Next(_StringS.Length)]);
           }
           int max = Length - 4;
           for (int i = 0; i < max; i++)
           {
               Sb.Append(_StringN[StaticRandom.Next(_StringN.Length)]);
           }
           return Sb.ToString();
       }

       /// <summary>
       /// 设置系统时间
       /// </summary>
       /// <param name="dateTime">要设置的时间</param>
       public static bool SetSysTime(DateTime dateTime)
       {
           try
           {
               SYSTEMTIME st;

               st.year = (short)dateTime.Year;
               st.month = (short)dateTime.Month;
               st.dayOfWeek = (short)dateTime.DayOfWeek;
               st.day = (short)dateTime.Day;
               st.hour = (short)dateTime.Hour;
               st.minute = (short)dateTime.Minute;
               st.second = (short)dateTime.Second;
               st.milliseconds = (short)dateTime.Millisecond;
               return SetLocalTime(ref st);
           }
           catch (Exception ex)
           {
               System.Diagnostics.Debug.Print(ex.ToString());
               return false;
           }
       }

       /// <summary>
       /// 重启电脑
       /// </summary>
       public static void RestartComputer()
       {
           Process CmdP1 = new Process();
           CmdP1.StartInfo.FileName = "cmd.exe";
           CmdP1.StartInfo.UseShellExecute = false;
           CmdP1.StartInfo.RedirectStandardInput = true;
           CmdP1.StartInfo.RedirectStandardOutput = true;
           CmdP1.StartInfo.CreateNoWindow = true;
           CmdP1.Start();
           CmdP1.StandardInput.WriteLine("shutdown -r -f -t 0");
           CmdP1.StandardInput.WriteLine("exit");
           CmdP1.Close();
       }

       /// <summary>
       /// 关闭电脑
       /// </summary>
       public static void PowerOffComputer()
       {
           Process CmdP1 = new Process();
           CmdP1.StartInfo.FileName = "cmd.exe";
           CmdP1.StartInfo.UseShellExecute = false;
           CmdP1.StartInfo.RedirectStandardInput = true;
           CmdP1.StartInfo.RedirectStandardOutput = true;
           CmdP1.StartInfo.CreateNoWindow = true;
           CmdP1.Start();
           CmdP1.StandardInput.WriteLine("shutdown -s -t 3");
           CmdP1.StandardInput.WriteLine("exit");
           CmdP1.Close();
       }

       private static void DoExitWin(int flg)
       {
           bool ok;
           TokPriv1Luid tp;
           IntPtr hproc = GetCurrentProcess();
           IntPtr htok = IntPtr.Zero;
           ok = OpenProcessToken(hproc, TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, ref   htok);
           tp.Count = 1;
           tp.Luid = 0;
           tp.Attr = SE_PRIVILEGE_ENABLED;
           ok = LookupPrivilegeValue(null, SE_SHUTDOWN_NAME, ref   tp.Luid);
           ok = AdjustTokenPrivileges(htok, false, ref   tp, 0, IntPtr.Zero, IntPtr.Zero);
           ok = ExitWindowsEx(flg, 0);
       }

       /// <summary>
       /// 重启
       /// </summary>
       public static void Reboot()
       {
           DoExitWin(EWX_FORCE | EWX_REBOOT);
       }

       /// <summary>
       /// 关机
       /// </summary>
       public static void PowerOff()
       {
           DoExitWin(EWX_FORCE | EWX_POWEROFF);
       }

       /// <summary>
       /// 注销
       /// </summary>
       public static void LogoOff()
       {
           DoExitWin(EWX_FORCE | EWX_LOGOFF);
       }

       #endregion

    

        ///// <summary>
        ///// 获取 网关地址
        ///// </summary>
        ///// <returns></returns>
        //public static string GetGateWay()
        //{
        //    ManagementClass mMC = new ManagementClass("Win32_NetworkAdapterConfiguration");
        //    if (mMC == null) return string.Empty;
        //    ManagementObjectCollection mNICs = mMC.GetInstances();
        //    if (mNICs == null) return string.Empty;
        //    string mGetGateWay = string.Empty;
        //    foreach (ManagementObject nic in mNICs)
        //    {
        //        try
        //        {
        //            if (Convert.ToBoolean(nic["ipEnabled"]) == true)
        //            {
        //                if (nic != null && nic["DefaultIPGateway"] != null)
        //                    mGetGateWay = (nic["DefaultIPGateway"] as String[])[0];
        //            }
        //        }
        //        finally { }
        //    }
        //    return mGetGateWay;
        //}

        ///// <summary>
        ///// 获取本机网卡IP地址
        ///// </summary>
        ///// <returns></returns>
        //public static string GetLocalIP()
        //{
        //    string hostname;
        //    System.Net.IPHostEntry localhost;
        //    System.Net.IPAddress localaddr;

        //    hostname = System.Net.Dns.GetHostName();
        //    localhost = System.Net.Dns.GetHostEntry(hostname);
        //    localaddr = localhost.AddressList[0];
        //    return localaddr.ToString();
        //}

    

     

    }

原创粉丝点击