0 Members and 1 Guest are viewing this topic.
Дело не во мне. Все настройки должны быть проще.
как открывать настройки операционной системы, связанные с работой плагина
If the machine has entered power saving mode or system lock state, an ERROR_OPERATION_IN_PROGRESS exception occurs.
A screensaver will not automatically start after a period of user inactivity.
SetThreadExecutionState(EX_STATE.ES_CONTINUOUS Or EX_STATE.ES_SYSTEM_REQUIRED Or EX_STATE.ES_DISPLAY_REQUIRED)
Retrieves a BOOL indicating whether an application can reset the screensaver's timer by calling the SendInput function to simulate keyboard or mouse input.
Могу накинуть сюда или через репозиторий azure или gitlab латышский и испанкйи перевод в самом крайнем случае через сервер как лучше? В гитхабе и за принципа не хочу регится с телефоном.
Что именно нужно открыть?
Время блокировки ПК, время простоя.
В Win10/11: ShellExecute в качестве имени файла - ms-settings:powersleep
ms-settings:powersleep
Через GetSystemMetrics. Погляди на SPI_SETPOWEROFFTIMEOUT ну и прочие TIMEOUT-ы
using System; // Подключение пространства имен System, содержащего основные типы и функциональность языка C#using System.Runtime.InteropServices; // Подключение пространства имен для работы с межпроцессным взаимодействиемclass Program{ // Будем использовать функцию SystemParametersInfo для получения информации о времени до включения заставки [DllImport("user32.dll", SetLastError = true)] // Атрибут, указывающий что метод вызывает функцию из user32.dll static extern bool SystemParametersInfo(uint uiAction, uint uiParam, ref uint pvParam, uint fWinIni); // Объявление метода для доступа к системным параметрам const uint SPI_GETSCREENSAVETIMEOUT = 14; // Константа для получения времени до включения заставки static void Main() // Основной метод программы { uint screenSaverTime = 0; // Переменная для хранения времени до включения заставки if (SystemParametersInfo(SPI_GETSCREENSAVETIMEOUT, 0, ref screenSaverTime, 0)) // Вызов функции для получения времени до включения заставки { Console.WriteLine("Время до включения заставки (в секундах): " + screenSaverTime); } else { Console.WriteLine("Не удалось получить время до включения заставки."); } }}
По идее, заставка - это "реакция" на бездействие. Тут не хватает знаний, что "в голове" у ПК, когда срабатывает такое "бездействие" (заставка) и внутренний таймер по параметрам электропитания, а плагин (плеер) читает параметры системы. Тем более, что этих "статусов" возможности сна и гибернации несколько в различных вариациях для разного железа, а также система может запрещать усыплять ПК при проверке параметров. Также драйвера и программы вносят своё участие в этот процесс. Вот это всё усугубляет получить желаемое простыми способами.Плеер не отключает заставку, а значит система в условно активном режиме, т.е. период бездействия по электропитанию не начинается.Даже в документации указывается, что эти режимы с собой плохо уживаются. https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-systemparametersinfoahttps://learn.microsoft.com/en-us/windows-hardware/drivers/ddi/wdm/ne-wdm-_power_request_typeВот примеры в одну сторону, но найти пример в обратную сторону сложней. Только упоминания, что в программах может быть код прерывания таймеров ожидания и заставки, либо что заставка может быть прервана имитацией действий пользователя.https://learn.microsoft.com/en-us/answers/questions/784797/how-to-disable-screensaver-and-screen-inactivity-pПо первой ссылке.Так, что, по идее, можно реализовать в плагине доп. условия. Но можно наткнуться на ряд "подводных камней".Готовый вариант реализации не видел, но вот пара ссылок.https://stackoverflow.com/questions/57888044/how-to-put-a-win10-pc-into-standby-mode-from-delphihttps://www.tek-tips.com/faqs.cfm?fid=6881В принципе, автор плеера может обсудить код с автором плагина в личной переписке, если посчитают нужным.Думаю, можно начать без комбинирования заставки и режима бездействия.1. Добавить опции действий с ПК. Выключить, усыпить и т.п.2. Добавить таймер задержки после простоя ПК. Можно даже двухэтапный. Сразу пауза/стоп, позже заставка/действие с состоянием ПК.3. Опция прерывания заставки через имитацию действий пользователя. Словно пользователь сам поставил на паузу/стоп.P.S. По идее, в стандартном плагине достаточно было бы добавить функции проверки статуса ПК из этого плагина. Добавить описание системного бездействия ПК и задержку срабатывания действия. Остальные действия уже реализованы. Остаётся только загвоздка узнать будет ли адекватно работать система по таймерам, если плеер будет запрашивать их состояние и не придётся ли "сбрасывать" некоторые "состояния" смежных параметров.Опять куча рассуждений, теорий. Может быть кто-то найдёт пользу, а может быть чушь получилась.
1) подписываемся на события - SystemEvents.SessionSwitch += SystemEvents_SessionSwitch;2) сам метод private static async void SystemEvents_SessionSwitch(object sender, SessionSwitchEventArgs e)3) и в нём уже пишем условия SessionSwitchReason.SessionLock, SessionSwitchReason.SessionUnlock, и так далее