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