Выключение, перезагрузка, переход в ждущий режим - 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 = "Сервер не работает. Канал не прослушивается!"; } } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д