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

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

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

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

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

textual
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Text;
  7. using System.Windows.Forms;
  8. using System.Runtime.InteropServices;
  9. using System.Runtime.Remoting;
  10. using System.Runtime.Remoting.Channels;
  11. using System.Runtime.Remoting.Channels.Tcp;
  12. using System.Runtime.Remoting.Channels.Http;
  13. using Remot_Time;
  14.  
  15. namespace reboot
  16. {
  17.     public partial class Form1 : Form
  18.     {
  19.         int timer,chas,min,sek,x;
  20.         public Form1()
  21.         {
  22.             InitializeComponent();
  23.         }
  24.          //обьявляем джина
  25.         static AgentObjects.IAgentCtlCharacterEx myGenie;
  26.         static String DATAPATH_1 = "Genie.acs";
  27.         //обьявляем член интерфейса agent
  28.         private AgentObjects.Agent myAgentController;
  29.         //глобальная переменная любого текста персонажа
  30.         static String mySpeach;
  31.         Object myObject = null;
  32.         class reboot
  33.         {
  34.             //импортируем API функцию InitiateSystemShutdown
  35.             [DllImport("advapi32.dll", EntryPoint = "InitiateSystemShutdownEx")]
  36.             static extern int InitiateSystemShutdown(string lpMachineName, string lpMessage, int dwTimeout, bool bForceAppsClosed, bool bRebootAfterShutdown);
  37.             //импортируем API функцию AdjustTokenPrivileges
  38.             [DllImport("advapi32.dll", ExactSpelling = true, SetLastError = true)]
  39.             internal static extern bool AdjustTokenPrivileges(IntPtr htok, bool disall,
  40.             ref TokPriv1Luid newst, int len, IntPtr prev, IntPtr relen);
  41.             //импортируем API функцию GetCurrentProcess
  42.             [DllImport("kernel32.dll", ExactSpelling = true)]
  43.             internal static extern IntPtr GetCurrentProcess();
  44.             //импортируем API функцию OpenProcessToken
  45.             [DllImport("advapi32.dll", ExactSpelling = true, SetLastError = true)]
  46.             internal static extern bool OpenProcessToken(IntPtr h, int acc, ref IntPtr phtok);
  47.             //импортируем API функцию LookupPrivilegeValue
  48.             [DllImport("advapi32.dll", SetLastError = true)]
  49.             internal static extern bool LookupPrivilegeValue(string host, string name, ref long pluid);
  50.             //импортируем API функцию LockWorkStation
  51.             [DllImport("user32.dll", EntryPoint = "LockWorkStation")]
  52.             static extern bool LockWorkStation();
  53.             //объявляем структуру TokPriv1Luid для работы с привилегиями
  54.             [StructLayout(LayoutKind.Sequential, Pack = 1)]
  55.             internal struct TokPriv1Luid
  56.             {
  57.                 public int Count;
  58.                 public long Luid;
  59.                 public int Attr;
  60.             }
  61.             //объявляем необходимые, для API функций, константые значения, согласно MSDN
  62.             internal const int SE_PRIVILEGE_ENABLED = 0x00000002;
  63.             internal const int TOKEN_QUERY = 0x00000008;
  64.             internal const int TOKEN_ADJUST_PRIVILEGES = 0x00000020;
  65.             internal const string SE_SHUTDOWN_NAME = "SeShutdownPrivilege";
  66.             //функция SetPriv для повышения привилегий процесса
  67.             private void SetPriv()
  68.             {
  69.                 TokPriv1Luid tkp; //экземпляр структуры TokPriv1Luid
  70.                 IntPtr htok = IntPtr.Zero;
  71.                 //открываем "интерфейс" доступа для своего процесса
  72.                 if (OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, ref htok))
  73.                 {
  74.                     //заполняем поля структуры
  75.                     tkp.Count = 1;
  76.                     tkp.Attr = SE_PRIVILEGE_ENABLED;
  77.                     tkp.Luid = 0;
  78.                     //получаем системный идентификатор необходимой нам привилегии
  79.                     LookupPrivilegeValue(null, SE_SHUTDOWN_NAME, ref tkp.Luid);
  80.                     //повышем привилигеию своему процессу
  81.                     AdjustTokenPrivileges(htok, false, ref tkp, 0, IntPtr.Zero, IntPtr.Zero);
  82.                 }
  83.             }
  84.             //публичный метод для перезагрузки/выключения машины
  85.             public int halt(bool RSh, bool Force)
  86.             {
  87.                 SetPriv(); //получаем привилегия
  88.                 //вызываем функцию InitiateSystemShutdown, передавая ей необходимые параметры
  89.                 return InitiateSystemShutdown(null, null, 0, Force, RSh);
  90.             }
  91.             //публичный метод для блокировки операционной системы
  92.             public int Lock()
  93.             {
  94.                 if (LockWorkStation())
  95.                     return 1;
  96.                 else
  97.                     return 0;
  98.             }
  99.         }
  100.  
  101.         private void button1_Click(object sender, EventArgs e)
  102.         {
  103.                 x = 2;
  104.                 timer = Convert.ToInt32(numericUpDown1.Value)*60*60 + Convert.ToInt32(numericUpDown2.Value) * 60 + Convert.ToInt32(numericUpDown3.Value);
  105.                 timer1.Enabled = true;
  106.         }
  107.  
  108.         private void timer1_Tick(object sender, EventArgs e)
  109.         {
  110.             if (timer > 0)
  111.             {
  112.                 timer --;
  113.                 chas = timer/(60*60);
  114.                 min = timer / 60;
  115.                 sek = timer % 60;
  116.                 label2.Text = "Осталось: " + chas.ToString() + " Часов:" + min.ToString() + " Минут:" + sek.ToString() + " Секунд";
  117.             }
  118.             else
  119.             {
  120.                 label2.Text = "Выполнение Задачи!";
  121.                 reboot r = new reboot(); //Создаете объект класса reboot
  122.                 if(x==1)
  123.                 r.halt(true, false);//  и тут параметры уже укажите сами (true, false) выключение или перезагрузка осуществляется изменением true и false
  124.                 if(x==2)
  125.                 r.halt(false, false); //  и тут параметры уже укажите сами (false, false)
  126.             this.Hide();
  127.             }
  128.         }
  129.  
  130.         private void textBox2_KeyPress(object sender, KeyPressEventArgs e)
  131.         {
  132.             e.Handled = !System.Text.RegularExpressions.Regex.IsMatch(e.KeyChar.ToString(), @"[0,1,2,3,4,5,6,7,8,9,\b]");
  133.         }
  134.  
  135.         private void button2_Click(object sender, EventArgs e)
  136.         {
  137.                 x = 1;
  138.                 timer = Convert.ToInt32(numericUpDown1.Value)*60*60 + Convert.ToInt32(numericUpDown2.Value) * 60 + Convert.ToInt32(numericUpDown3.Value);
  139.                 timer1.Enabled = true;
  140.         }
  141.  
  142.         private void button3_Click(object sender, EventArgs e)
  143.         {
  144.             Application.Exit();
  145.         }
  146.  
  147.         private void Form1_MouseMove(object sender, MouseEventArgs e)
  148.         {
  149.            // label3.Text = e.X.ToString() + "  " + e.Y.ToString();
  150.  
  151.         }
  152.  
  153.         private void button4_Click(object sender, EventArgs e)
  154.         {
  155.             //загружаем персонаж в элемент управления axAgent1
  156.             axAgent1.Characters.Load("Genie", DATAPATH_1);
  157.             myGenie = axAgent1.Characters.Character("Genie");
  158.             myGenie.MoveTo(Convert.ToInt16(this.Location.X + 1), Convert.ToInt16(this.Location.Y + 1), 100);
  159.             myGenie.Show(0);
  160.             mySpeach = "Здравствуйте меня зовут Алимба Алимбаевич. Я вам подскажу как нужно обращаться с этой программой!";
  161.             myGenie.Speak(mySpeach, myObject);
  162.             myGenie.Play("Congratulate_2");
  163.             mySpeach = "В этих трех колонках нужно выбрать время через которое компьютер будет отключен или перезагружен.";
  164.             myGenie.MoveTo(Convert.ToInt16(this.Location.X + 230), Convert.ToInt16(this.Location.Y + 20), 100);
  165.             myGenie.Play("GestureRight");
  166.             myGenie.Speak(mySpeach, myObject);
  167.             myGenie.MoveTo(Convert.ToInt16(this.Location.X + 100), Convert.ToInt16(this.Location.Y + 90), 100);
  168.             mySpeach = "Если нажать на кнопку под названием Выключение компьютер будет выключен через заданное колличество времени.";
  169.             myGenie.Play("GestureRight");
  170.             myGenie.Speak(mySpeach, myObject);
  171.             myGenie.MoveTo(Convert.ToInt16(this.Location.X + 220), Convert.ToInt16(this.Location.Y + 90), 100);
  172.             mySpeach = "Если нажать на кнопку перезагрузка то компьютер перезагрузиться через заданное колличество времени.";
  173.             myGenie.Play("GestureRight");
  174.             myGenie.Speak(mySpeach, myObject);
  175.             myGenie.MoveTo(Convert.ToInt16(this.Location.X + 100), Convert.ToInt16(this.Location.Y + 115), 100);
  176.             mySpeach = "Если нажать кнопку Выход то вы выйдете из программы.";
  177.             myGenie.Play("GestureRight");
  178.             myGenie.Speak(mySpeach, myObject);
  179.             myGenie.MoveTo(Convert.ToInt16(this.Location.X + 265), Convert.ToInt16(this.Location.Y + 103), 100);
  180.             mySpeach = "Если нажать на кнопку справка то вы снова увидите меня - своего гида, и я не поленюсь показать и рассказать вам все снова. Досвиданья и удачи вам!";
  181.             myGenie.Play("GestureRight");
  182.             myGenie.Speak(mySpeach, myObject);
  183.             myGenie.Hide(0);
  184.         }
  185.  
  186.         private void Form1_Load(object sender, EventArgs e)
  187.         {
  188.         //    try
  189.         //{
  190.             ChannelServices.RegisterChannel(new HttpChannel(60000));
  191.             RemotingConfiguration.RegisterWellKnownServiceType(typeof(RemoteTime), "Host", WellKnownObjectMode.Singleton);
  192.             label3.Text = "Сервер работает. Канал прослушивается!";
  193.         //}
  194.         //catch { label3.Text = "Сервер не работает. Канал не прослушивается!"; }
  195.         }
  196.     }
  197. }

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


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

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

11   голосов , оценка 4.182 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы