Выключение, перезагрузка, переход в ждущий режим - C#

Узнай цену своей работы

Формулировка задачи:

Как сделать программно: Выключение, Перезагрузку и переход в ждущий режим?

Решение задачи: «Выключение, перезагрузка, переход в ждущий режим»

textual
Листинг программы
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Tcp;
using System.Runtime.Remoting.Channels.Http;
using Remot_Time;
 
namespace reboot
{
    public partial class Form1 : Form
    {
        int timer,chas,min,sek,x;
        public Form1()
        {
            InitializeComponent();
        }
         //обьявляем джина
        static AgentObjects.IAgentCtlCharacterEx myGenie;
        static String DATAPATH_1 = "Genie.acs";
        //обьявляем член интерфейса agent
        private AgentObjects.Agent myAgentController;
        //глобальная переменная любого текста персонажа
        static String mySpeach;
        Object myObject = null;
        class reboot
        {
            //импортируем API функцию InitiateSystemShutdown
            [DllImport("advapi32.dll", EntryPoint = "InitiateSystemShutdownEx")]
            static extern int InitiateSystemShutdown(string lpMachineName, string lpMessage, int dwTimeout, bool bForceAppsClosed, bool bRebootAfterShutdown);
            //импортируем API функцию AdjustTokenPrivileges
            [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);
            //импортируем API функцию GetCurrentProcess
            [DllImport("kernel32.dll", ExactSpelling = true)]
            internal static extern IntPtr GetCurrentProcess();
            //импортируем API функцию OpenProcessToken
            [DllImport("advapi32.dll", ExactSpelling = true, SetLastError = true)]
            internal static extern bool OpenProcessToken(IntPtr h, int acc, ref IntPtr phtok);
            //импортируем API функцию LookupPrivilegeValue
            [DllImport("advapi32.dll", SetLastError = true)]
            internal static extern bool LookupPrivilegeValue(string host, string name, ref long pluid);
            //импортируем API функцию LockWorkStation
            [DllImport("user32.dll", EntryPoint = "LockWorkStation")]
            static extern bool LockWorkStation();
            //объявляем структуру TokPriv1Luid для работы с привилегиями
            [StructLayout(LayoutKind.Sequential, Pack = 1)]
            internal struct TokPriv1Luid
            {
                public int Count;
                public long Luid;
                public int Attr;
            }
            //объявляем необходимые, для API функций, константые значения, согласно MSDN
            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";
            //функция SetPriv для повышения привилегий процесса
            private void SetPriv()
            {
                TokPriv1Luid tkp; //экземпляр структуры TokPriv1Luid 
                IntPtr htok = IntPtr.Zero;
                //открываем "интерфейс" доступа для своего процесса
                if (OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, ref htok))
                {
                    //заполняем поля структуры
                    tkp.Count = 1;
                    tkp.Attr = SE_PRIVILEGE_ENABLED;
                    tkp.Luid = 0;
                    //получаем системный идентификатор необходимой нам привилегии
                    LookupPrivilegeValue(null, SE_SHUTDOWN_NAME, ref tkp.Luid);
                    //повышем привилигеию своему процессу
                    AdjustTokenPrivileges(htok, false, ref tkp, 0, IntPtr.Zero, IntPtr.Zero);
                }
            }
            //публичный метод для перезагрузки/выключения машины
            public int halt(bool RSh, bool Force)
            {
                SetPriv(); //получаем привилегия
                //вызываем функцию InitiateSystemShutdown, передавая ей необходимые параметры
                return InitiateSystemShutdown(null, null, 0, Force, RSh);
            }
            //публичный метод для блокировки операционной системы
            public int Lock()
            {
                if (LockWorkStation())
                    return 1;
                else
                    return 0;
            }
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
                x = 2;
                timer = Convert.ToInt32(numericUpDown1.Value)*60*60 + Convert.ToInt32(numericUpDown2.Value) * 60 + Convert.ToInt32(numericUpDown3.Value);
                timer1.Enabled = true;
        }
 
        private void timer1_Tick(object sender, EventArgs e)
        {
            if (timer > 0)
            {
                timer --;
                chas = timer/(60*60);
                min = timer / 60;
                sek = timer % 60;
                label2.Text = "Осталось: " + chas.ToString() + " Часов:" + min.ToString() + " Минут:" + sek.ToString() + " Секунд";
            }
            else
            {
                label2.Text = "Выполнение Задачи!";
                reboot r = new reboot(); //Создаете объект класса reboot
                if(x==1)
                r.halt(true, false);//  и тут параметры уже укажите сами (true, false) выключение или перезагрузка осуществляется изменением true и false
                if(x==2)
                r.halt(false, false); //  и тут параметры уже укажите сами (false, false)
            this.Hide();
            }
        }
 
        private void textBox2_KeyPress(object sender, KeyPressEventArgs e)
        {
            e.Handled = !System.Text.RegularExpressions.Regex.IsMatch(e.KeyChar.ToString(), @"[0,1,2,3,4,5,6,7,8,9,\b]");
        }
 
        private void button2_Click(object sender, EventArgs e)
        {
                x = 1;
                timer = Convert.ToInt32(numericUpDown1.Value)*60*60 + Convert.ToInt32(numericUpDown2.Value) * 60 + Convert.ToInt32(numericUpDown3.Value);
                timer1.Enabled = true;
        }
 
        private void button3_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }
 
        private void Form1_MouseMove(object sender, MouseEventArgs e)
        {
           // label3.Text = e.X.ToString() + "  " + e.Y.ToString();
 
        }
 
        private void button4_Click(object sender, EventArgs e)
        {
            //загружаем персонаж в элемент управления axAgent1
            axAgent1.Characters.Load("Genie", DATAPATH_1);
            myGenie = axAgent1.Characters.Character("Genie");
            myGenie.MoveTo(Convert.ToInt16(this.Location.X + 1), Convert.ToInt16(this.Location.Y + 1), 100);
            myGenie.Show(0);
            mySpeach = "Здравствуйте меня зовут Алимба Алимбаевич. Я вам подскажу как нужно обращаться с этой программой!";
            myGenie.Speak(mySpeach, myObject);
            myGenie.Play("Congratulate_2");
            mySpeach = "В этих трех колонках нужно выбрать время через которое компьютер будет отключен или перезагружен.";
            myGenie.MoveTo(Convert.ToInt16(this.Location.X + 230), Convert.ToInt16(this.Location.Y + 20), 100);
            myGenie.Play("GestureRight");
            myGenie.Speak(mySpeach, myObject);
            myGenie.MoveTo(Convert.ToInt16(this.Location.X + 100), Convert.ToInt16(this.Location.Y + 90), 100);
            mySpeach = "Если нажать на кнопку под названием Выключение компьютер будет выключен через заданное колличество времени.";
            myGenie.Play("GestureRight");
            myGenie.Speak(mySpeach, myObject);
            myGenie.MoveTo(Convert.ToInt16(this.Location.X + 220), Convert.ToInt16(this.Location.Y + 90), 100);
            mySpeach = "Если нажать на кнопку перезагрузка то компьютер перезагрузиться через заданное колличество времени.";
            myGenie.Play("GestureRight");
            myGenie.Speak(mySpeach, myObject);
            myGenie.MoveTo(Convert.ToInt16(this.Location.X + 100), Convert.ToInt16(this.Location.Y + 115), 100);
            mySpeach = "Если нажать кнопку Выход то вы выйдете из программы.";
            myGenie.Play("GestureRight");
            myGenie.Speak(mySpeach, myObject);
            myGenie.MoveTo(Convert.ToInt16(this.Location.X + 265), Convert.ToInt16(this.Location.Y + 103), 100);
            mySpeach = "Если нажать на кнопку справка то вы снова увидите меня - своего гида, и я не поленюсь показать и рассказать вам все снова. Досвиданья и удачи вам!";
            myGenie.Play("GestureRight");
            myGenie.Speak(mySpeach, myObject);
            myGenie.Hide(0);
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
        //    try
        //{
            ChannelServices.RegisterChannel(new HttpChannel(60000));
            RemotingConfiguration.RegisterWellKnownServiceType(typeof(RemoteTime), "Host", WellKnownObjectMode.Singleton);
            label3.Text = "Сервер работает. Канал прослушивается!";
        //}
        //catch { label3.Text = "Сервер не работает. Канал не прослушивается!"; }
        }
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4.182 из 5
Похожие ответы