Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/18: Рейтинг темы: голосов - 18, средняя оценка - 4.78
6 / 6 / 1
Регистрация: 24.06.2014
Сообщений: 129
1

Отследить переход компьютера в спящий режим

07.07.2015, 14:16. Показов 3426. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Возникла надобность отследить переход компьютера в спящий режим, использую такой код:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 class Program
    {
      
        public static void Main()
        {              
           Console.ReadLine();
        }
        static void SystemEvents_PowerModeChanged(object sender, PowerModeChangedEventArgs e)
        {
            Console.WriteLine(e.Mode.ToString());    // спящий режим
        }
 
        static void SystemEvents_Power(object sender, SessionEndedEventArgs e)
        {
            Console.WriteLine(e.Reason.ToString()); // выкл.
        }
    }
Запускаю приложение и перевожу компьютер в спящий режим, но когда включаю консоль пуста, то есть данный метод даже не запускается, почему??

P.S: Метод который обрабатывает выключения компьютера тоже не пашет, я прописывал туда код который должен был создать текстовый документ на диске, но этого не происходило.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.07.2015, 14:16
Ответы с готовыми решениями:

Спящий режим
Подскажите как написать программу которая погружала бы компьютер в спящий режим На C#? (в Windows 7)

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

Перевести компьютер в спящий режим
Как заставить компьютер перейти в спящий режим? Выключить "cmd", "/c shutdown -s -f -t 00". Как...

Как программно перевести монитор в спящий режим?
Подскажите, как программно перевести монитор в спящий режим?

5
Администратор
Эксперт .NET
17551 / 13774 / 5298
Регистрация: 17.03.2014
Сообщений: 28,250
Записей в блоге: 1
07.07.2015, 14:23 2
Лучший ответ Сообщение было отмечено Vadiliy как решение

Решение

Vadiliy, а где подписка на события?
C#
1
2
SystemEvents.PowerModeChanged += SystemEvents_PowerModeChanged;
SystemEvents.SessionEnded += SystemEvents_Power;
1
6 / 6 / 1
Регистрация: 24.06.2014
Сообщений: 129
07.07.2015, 14:55  [ТС] 3
Это прописать в глобальную область??

Добавлено через 26 минут
Все, разобрался, спасибо.
0
Администратор
Эксперт .NET
17551 / 13774 / 5298
Регистрация: 17.03.2014
Сообщений: 28,250
Записей в блоге: 1
07.07.2015, 14:57 4
Vadiliy, нет. В начале функции Main.
1
13 / 10 / 5
Регистрация: 22.03.2021
Сообщений: 47
30.10.2023, 22:19 5
Не прошло и 10 лет, как у меня возник вопрос в продолжение этой темы)

А как задержать переход компьютера в спящий режим до тех пор, пока обработчик SystemEvents_PowerModeChanged не завершит свою работу?

C#
1
2
3
4
5
6
7
8
9
10
11
12
        private static void SystemEvents_PowerModeChanged(object sender, PowerModeChangedEventArgs e)
        {
            switch (e.Mode)
            {
                case PowerModes.Resume:
  
                    break;
                case PowerModes.Suspend:
 
                    break;
            }
        }
0
Администратор
Эксперт .NET
17551 / 13774 / 5298
Регистрация: 17.03.2014
Сообщений: 28,250
Записей в блоге: 1
31.10.2023, 16:01 6
TrickyShot, попробуйте этот пример с StackOverflow. Вызываем EnableConstantDisplayAndPower сначала с true, затем с false.
Кликните здесь для просмотра всего текста
Источник - Prevent windows from going into sleep when my program is running?
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
using System.Runtime.InteropServices;
 
    #region prevent screensaver, display dimming and automatically sleeping
    POWER_REQUEST_CONTEXT _PowerRequestContext;
    IntPtr _PowerRequest; //HANDLE
 
    // Availability Request Functions
    [DllImport("kernel32.dll")]
    static extern IntPtr PowerCreateRequest(ref POWER_REQUEST_CONTEXT Context);
 
    [DllImport("kernel32.dll")]
    static extern bool PowerSetRequest(IntPtr PowerRequestHandle, PowerRequestType RequestType);
 
    [DllImport("kernel32.dll")]
    static extern bool PowerClearRequest(IntPtr PowerRequestHandle, PowerRequestType RequestType);
 
    [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true, ExactSpelling = true)]
    internal static extern int CloseHandle(IntPtr hObject);
 
    // Availablity Request Enumerations and Constants
    enum PowerRequestType
    {
        PowerRequestDisplayRequired = 0,
        PowerRequestSystemRequired,
        PowerRequestAwayModeRequired,
        PowerRequestMaximum
    }
 
    const int POWER_REQUEST_CONTEXT_VERSION = 0;
    const int POWER_REQUEST_CONTEXT_SIMPLE_STRING = 0x1;
    const int POWER_REQUEST_CONTEXT_DETAILED_STRING = 0x2;
 
    // Availablity Request Structures
    // Note:  Windows defines the POWER_REQUEST_CONTEXT structure with an
    // internal union of SimpleReasonString and Detailed information.
    // To avoid runtime interop issues, this version of 
    // POWER_REQUEST_CONTEXT only supports SimpleReasonString.  
    // To use the detailed information,
    // define the PowerCreateRequest function with the first 
    // parameter of type POWER_REQUEST_CONTEXT_DETAILED.
    [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
    public struct POWER_REQUEST_CONTEXT
    {
        public UInt32 Version;
        public UInt32 Flags;
        [MarshalAs(UnmanagedType.LPWStr)]
        public string
            SimpleReasonString;
    }
 
    [StructLayout(LayoutKind.Sequential)]
    public struct PowerRequestContextDetailedInformation
    {
        public IntPtr LocalizedReasonModule;
        public UInt32 LocalizedReasonId;
        public UInt32 ReasonStringCount;
        [MarshalAs(UnmanagedType.LPWStr)]
        public string[] ReasonStrings;
    }
 
    [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
    public struct POWER_REQUEST_CONTEXT_DETAILED
    {
        public UInt32 Version;
        public UInt32 Flags;
        public PowerRequestContextDetailedInformation DetailedInformation;
    }
    #endregion
 
 
 
    /// <summary>
    /// Prevent screensaver, display dimming and power saving. This function wraps PInvokes on Win32 API. 
    /// </summary>
    /// <param name="enableConstantDisplayAndPower">True to get a constant display and power - False to clear the settings</param>
    private void EnableConstantDisplayAndPower(bool enableConstantDisplayAndPower)
    {
        if (enableConstantDisplayAndPower)
        {
            // Set up the diagnostic string
            _PowerRequestContext.Version = POWER_REQUEST_CONTEXT_VERSION;
            _PowerRequestContext.Flags = POWER_REQUEST_CONTEXT_SIMPLE_STRING;
            _PowerRequestContext.SimpleReasonString = "Continuous measurement"; // your reason for changing the power settings;
 
            // Create the request, get a handle
            _PowerRequest = PowerCreateRequest(ref _PowerRequestContext);
 
            // Set the request
            PowerSetRequest(_PowerRequest, PowerRequestType.PowerRequestSystemRequired);
            PowerSetRequest(_PowerRequest, PowerRequestType.PowerRequestDisplayRequired);
        }
        else
        {
            // Clear the request
            PowerClearRequest(_PowerRequest, PowerRequestType.PowerRequestSystemRequired);
            PowerClearRequest(_PowerRequest, PowerRequestType.PowerRequestDisplayRequired);
 
            CloseHandle(_PowerRequest);
        }
    }
0
31.10.2023, 16:01
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
31.10.2023, 16:01
Помогаю со студенческими работами здесь

Запрет ухода в спящий режим при работе программы
Наша программа управляет через сеть относительно сложным оборудованием и выполняет продолжительные...

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

Как отследить включение/выключение компьютера, выход из системы
Как отследить включение/выключение компьютера?

Отследить переход в спящий режим или гибернацию и выход из них (MFC)
(MFC) Как отследить переход в спящий режим или гибернацию и выход из них при работающим приложении?...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru