Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.83/238: Рейтинг темы: голосов - 238, средняя оценка - 4.83
 Аватар для body90
467 / 344 / 19
Регистрация: 26.05.2009
Сообщений: 2,696

Можно ли средствами C# выключать, перезагружать и блокировать компьютер

16.03.2010, 02:12. Показов 49460. Ответов 42
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Можно ли средствами данного языка выключать, перезагружать и блокировать компьютер?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
16.03.2010, 02:12
Ответы с готовыми решениями:

Можно ли средствами C++ выключать, перезагружать и блокировать компьютер
Можно ли средствами C++ выключать, перезагружать и блокировать компьютер

Как можно выключать компьютер?
почему все говорят что надо комп выключать чрез пуск?Почему если через конпку на компе-то комп испортится?:-|

Как часто можно выключать компьютер?
Хотелось-бы узнать мнение профессионалов по вопросу частоты выключения компьютера. Ходят разные мнения: одни говорят, что компьютер...

42
|____WTF!?____|
 Аватар для stalkersev
95 / 94 / 11
Регистрация: 01.06.2010
Сообщений: 227
07.06.2011, 17:40
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от QA Посмотреть сообщение
Ребята, а как сделать автоматическое вьіключение в заданное время?? помогите пожалуйста.
Обыкновенным таймером..
1
QA
 Аватар для QA
9 / 9 / 2
Регистрация: 07.06.2011
Сообщений: 124
07.06.2011, 17:50
Если можно, напиши строчку, как оно вьіглядит.. Я только начинаю разбираться во всем.
0
|____WTF!?____|
 Аватар для stalkersev
95 / 94 / 11
Регистрация: 01.06.2010
Сообщений: 227
07.06.2011, 18:04
Цитата Сообщение от QA Посмотреть сообщение
Если можно, напиши строчку, как оно вьіглядит.. Я только начинаю разбираться во всем.
Держи
Вложения
Тип файла: rar WindowsApplication42.rar (31.5 Кб, 134 просмотров)
0
QA
 Аватар для QA
9 / 9 / 2
Регистрация: 07.06.2011
Сообщений: 124
07.06.2011, 18:32
Цитата Сообщение от stalkersev Посмотреть сообщение
Держи

Спасибо!! то что надо)
0
 Аватар для ushim
179 / 180 / 55
Регистрация: 01.06.2011
Сообщений: 507
07.06.2011, 23:27
А чем отличается жёсткий и мягкий методы выключения и перезагрузки?
0
 Аватар для body90
467 / 344 / 19
Регистрация: 26.05.2009
Сообщений: 2,696
08.06.2011, 03:04  [ТС]
Один сразу вырубает, а другой проверяет не запущены ли приложения.
0
 Аватар для Intestyx
4 / 4 / 1
Регистрация: 13.11.2011
Сообщений: 168
17.01.2012, 22:09
C#
1
Process.Start("shutdown", "/s");
а этот метод что уже не считается???
0
40 / 40 / 3
Регистрация: 08.01.2012
Сообщений: 96
18.01.2012, 00:38
Один из вариантов, использовать WMI.
Добавить reference на System.Management

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
using System.Management;
.................
 
public static void ShutDownComputer()
{
        ManagementBaseObject outParameters = null;
        ManagementClass sysOS = new ManagementClass("Win32_OperatingSystem");
        sysOS.Get();
        // enables required security privilege.
        sysOS.Scope.Options.EnablePrivileges = true; 
        // get our in parameters
        ManagementBaseObject inParameters = sysOS.GetMethodParameters("Win32Shutdown");
 
        //0 = Log off the network.
        //1 = Shut down the system.
        //2 = Perform a full reboot of the system.
        //4 = Force any applications to quit instead of prompting the user to close them.
        //8 = Shut down the system and, if possible, turn the computer off.
 
        inParameters["Flags"] = "1"; 
        inParameters["Reserved"] = "0";
        foreach (ManagementObject manObj in sysOS.GetInstances())
        {
            outParameters = manObj.InvokeMethod("Win32Shutdown", inParameters, null);
        }
}
2
 Аватар для Mr.kto
104 / 105 / 18
Регистрация: 18.08.2012
Сообщений: 308
18.01.2012, 00:48
Цитата Сообщение от WonderMNS Посмотреть сообщение
Вот на самом деле интереснее вопрос с включением.
нельзя программным путем включить компьютер если он выключен, никак нельзя!!!

Не знаю может это уже кто та и писал, просто лень читать но пусть будет
C#
1
2
3
4
System.Diagnostics.Process p=new System.Diagnostics.Process();
p.StartInfo.FileName="cmd.exe";
p.StartInfo.Arguments="/c shutdown -s";
p.Start();
и вот еще
C#
1
System.Diagnostics.Process.Start("ShutDown", "/s")
Или использовать P/Invoke:

C#
1
2
3
4
5
6
7
8
9
[DllImport("advapi32.dll", CharSet=CharSet.Auto, SetLastError=true)]
[return:MarshalAs(UnmanagedType.Bool)]
public static extern bool InitiateSystemShutdownEx(
string lpMachineName,
string lpMessage,
[MarshalAs(UnmanagedType.U4)] int dwTimeout,
[MarshalAs(UnmanagedType.Bool)] bForceAppsClosed,
[MarshalAs(UnmanagedType.Bool)] bRebootAfterShutdown,
[MarshalAs(UnmanagedType.U4)] int dwReason);
0
40 / 40 / 3
Регистрация: 08.01.2012
Сообщений: 96
18.01.2012, 01:54
Лучший ответ Сообщение было отмечено как решение

Решение

Цитата Сообщение от Mr.kto Посмотреть сообщение
нельзя программным путем включить компьютер если он выключен, никак нельзя!!!
Теоретически можно. Если на рабочих станциях включен Wake On Lan, ну и кончено не выключены тумблером, наверно еще какие то условия , то попробовать во всяком случае можно.

Скрипт включения WOL. Хотя я думаю, не везде это пройдет.

http://blogs.technet.com/b/sms... n-wol.aspx

WOL клиент для C#

http://community.bartdesmet.ne... /3858.aspx
3
 Аватар для Mr.kto
104 / 105 / 18
Регистрация: 18.08.2012
Сообщений: 308
18.01.2012, 10:17
Цитата Сообщение от slawek Посмотреть сообщение
Теоретически можно.
вот именно только теоретически!
0
40 / 40 / 3
Регистрация: 08.01.2012
Сообщений: 96
18.01.2012, 12:05
Добавлено через 2 минуты
Цитата Сообщение от Mr.kto Посмотреть сообщение
вот именно только теоретически!
Что именно вас смущает?
Изменение настроек для WOL c помощью WMI или WOL клиент на C#?
1
 Аватар для ibmpc
80 / 78 / 10
Регистрация: 29.12.2011
Сообщений: 183
21.01.2012, 14:07
Лучший ответ Сообщение было отмечено как решение

Решение

Wake On Lan (включение по сети) http://ru.wikipedia.org/wiki/Wake-on-LAN
Код реализующий включение по LAN на C#

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
using System;
using System.Net.Sockets;
using System.Net;
using System.Collections.Generic;
 
namespace Wol
{
    class Program
    {
        static void Main(string[] args)
        {
            using (UdpClient udpClient = new UdpClient())
            {
                Console.WriteLine("Enter mac address");
                byte[] mac = StrToMac(Console.ReadLine());
                udpClient.Send(mac, mac.Length, new IPEndPoint(IPAddress.Broadcast, 9));
            }
        }
 
        static byte[] StrToMac(string s)
        {
            List<byte> arr = new List<byte>(102);
 
            string[] macs = s.Split(' ', ':', '-');
 
            for (int i = 0; i < 6; i++)
                arr.Add(0xff);
 
            for (int j = 0; j < 16; j++)
                for (int i = 0; i < 6; i++)
                    arr.Add(Convert.ToByte(macs[i], 16));
 
            return arr.ToArray();
        }
    }
}
4
 Аватар для Black-millenium
25 / 25 / 8
Регистрация: 26.11.2011
Сообщений: 157
21.01.2012, 16:06
А вариант с вызовом командной строки и прописыванием в ней shutdown /r -t 0 предлагали? (перезагрузка). shutdown /s -t 0 выключение
1
 Аватар для ibmpc
80 / 78 / 10
Регистрация: 29.12.2011
Сообщений: 183
21.01.2012, 16:16
Цитата Сообщение от Black-millenium Посмотреть сообщение
А вариант с вызовом командной строки и прописыванием в ней shutdown /r -t 0 предлагали? (перезагрузка). shutdown /s -t 0 выключение
Этот вариант мне лично сразу пришло в голову как увидел эту тему, но уже были предложения с вызовом API функции Windows для выключения и блокировки ПК. И самое главное у подхода с вызовом приложения shutdown есть минусы. Этого приложения может не оказаться в системе или др. причина по которой оно не может быть вызвано
1
 Аватар для body90
467 / 344 / 19
Регистрация: 26.05.2009
Сообщений: 2,696
21.01.2012, 19:55  [ТС]
ibmpc, именно! У меня когда-то его и не было.
0
 Аватар для ibmpc
80 / 78 / 10
Регистрация: 29.12.2011
Сообщений: 183
21.01.2012, 23:54
Цитата Сообщение от body90 Посмотреть сообщение
У меня когда-то его и не было.
Да и вообще с точки зрения верного подхода к решению задачи нужно минимально полагаться на др. программное обеспечение. Мы и так полагаемся на платформу .NET и на ОС. Хотя зависимости от конкретной ОС желательно тоже не создавать, хотя бы чтобы работало в пределах всей платформы Windows (в рамках здравого смысла конечно). Очень часто в программном обеспечение не продумывается какая-нибудь мелочь и возникают проблемы.

Не по теме:

К примеру хотел посмотреть интерфейс одного архиватора написанного на C# (WPF, XAML) и установщик во первых загружает дистрибутив ПО из сети ! и не проверяет доступность сети - приложение вылетает. Плюс установщик не в какую не может установить ПО, притом постоянно заново начинает перекачивать компоненты из сети и так в цикле... Скрины ПО мне понравились. ПО определенно сильно отталкивает.



Добавлено через 1 час 57 минут
Цитата Сообщение от Mr.kto Посмотреть сообщение
нельзя программным путем включить компьютер если он выключен, никак нельзя!!!
Есть разные понятия выключения ПК (ACPI управление питанием). Для включения важно чтобы питание подавалось на БП (БП включен в разетку) и ПК соответствует требованиям WakeOnLan.
1
 Аватар для body90
467 / 344 / 19
Регистрация: 26.05.2009
Сообщений: 2,696
22.01.2012, 03:04  [ТС]
Цитата Сообщение от ibmpc Посмотреть сообщение
Есть разные понятия выключения ПК (ACPI управление питанием). Для включения важно чтобы питание подавалось на БП (БП включен в разетку) и ПК соответствует требованиям WakeOnLan.
У меня даже на ноуте заметил, если кабель электропитания подключен в розетку - мигает сетевая карта
0
5 / 5 / 2
Регистрация: 13.10.2015
Сообщений: 407
24.10.2016, 11:32
Цитата Сообщение от m0nax Посмотреть сообщение
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
using System.Runtime.InteropServices;
 
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;
    }
C#
1
LookupPrivilegeValue(null, SE_SHUTDOWN_NAME, ref tkp.Luid);
Не удается найти точку входа "LookupPrivelegeValue" в DLL "advapi32.dll"
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
24.10.2016, 22:03
Потому что нет такой функции в advapi32.dll.
Но есть LookupPrivilegeValueW и LookupPrivilegeValueA.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.10.2016, 22:03
Помогаю со студенческими работами здесь

Нужно ли выключать компьютер?
Привет Мужики и Леди! Каково ваше мнение? на протяжении последних 4-5 лет никогда не пользовался выключением, всегда...

Внезапно возникает серый экран и приходится перезагружать компьютер
Здравствуйте,такая проблема лазая или играя на компьютере в игры или что-то типо того внезапно возникает серый экран и приходиться...

каждый раз в играх меняются текстуры и иногда приходится перезагружать компьютер
Здравствуйте. У меня такая проблема, каждый раз в играх меняются текстуры и иногда приходится перезагружать компьютер. И так постоянно! ...

Компьютер зависает несколько раз в сутки и приходится перезагружать,кажется умирает HDD
Здравствуйте.Мой компьютер зависает и приходится делать перезагрузку вручную с кнопки на системном блоке.Иногда бывает что возникает звук...

Компьютер зависает периодически, появляется синий экран с английским текстом, приходится перезагружать
компьютер после включения зависает периодически,появляется синий экран с английским текстом,перезагружаю и опять такая фигня,раз по 5...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru