Trinity - Управление частотой процессора
Цитата: dehote9223 от 04.09.2026, 16:08Оптимизирован алгоритм быстрой и автоматической очистки ОЗУ
Из быстрой очистки исключён принудительный сброс модифицированных страниц памяти (Modified page list), который перенесён исключительно в "Глубокую очистку".
Теперь безопасный сброс файловых буферов томов (Modified file cache) освобождает больше полезной памяти без задержек ввода-вывода.Поверх значка приложения теперь выводится текущий процент занятой ОЗУ со специальной теневой подложкой для максимальной читаемости (аналог функционала Mem Reduct).
Оптимизирован алгоритм быстрой и автоматической очистки ОЗУ
Из быстрой очистки исключён принудительный сброс модифицированных страниц памяти (Modified page list), который перенесён исключительно в "Глубокую очистку".
Теперь безопасный сброс файловых буферов томов (Modified file cache) освобождает больше полезной памяти без задержек ввода-вывода.
Поверх значка приложения теперь выводится текущий процент занятой ОЗУ со специальной теневой подложкой для максимальной читаемости (аналог функционала Mem Reduct).
Цитата: dehote9223 от 04.09.2026, 16:39Добавлены горячие клавиши для очистки ОЗУ
Ctrl + F1 — Быстрая очистка оперативной памяти (сброс кэша и рабочих наборов).
Ctrl + F2 — Глубокая очистка оперативной памяти (с предварительным сбросом модифицированных страниц).
Добавлены горячие клавиши для очистки ОЗУ
Ctrl + F1 — Быстрая очистка оперативной памяти (сброс кэша и рабочих наборов).
Ctrl + F2 — Глубокая очистка оперативной памяти (с предварительным сбросом модифицированных страниц).
Цитата: dehote9223 от 04.09.2026, 19:29Реализовано динамическое тонирование иконки программы
При потреблении оперативной памяти от 85% треугольник окрашивается в красный цвет, предупреждая о возможном начале свопинга на диск и микрофризах в играх.Редизайн подменю "Автоочистка ОЗУ"
Формат условий очистки приведен к единому виду со значком в трее: вместо процента оставшейся памяти отображается порог текущей загрузки ("Очищать при 70% / 75% / 80% / 85% / 90%").
Реализовано динамическое тонирование иконки программы
При потреблении оперативной памяти от 85% треугольник окрашивается в красный цвет, предупреждая о возможном начале свопинга на диск и микрофризах в играх.
Редизайн подменю "Автоочистка ОЗУ"
Формат условий очистки приведен к единому виду со значком в трее: вместо процента оставшейся памяти отображается порог текущей загрузки ("Очищать при 70% / 75% / 80% / 85% / 90%").
Цитата: dehote9223 от 05.09.2026, 07:22В меню "🖱 Средняя кнопка на Рабочем столе" добавлен пункт "🎨 Пипетка цвета (HEX в буфер)"
Для быстрого копирования цвета пикселя под курсором в формате #RRGGBB с выводом стильного OSD-уведомления и наглядным цветным индикатором (превью цвета).
Удобно для дизайнеров, разработчиков и кастомизации системы без использования стороннего софта.Теперь окно программы можно свернуть клавишей ESC.
В меню "🖱 Средняя кнопка на Рабочем столе" добавлен пункт "🎨 Пипетка цвета (HEX в буфер)"
Для быстрого копирования цвета пикселя под курсором в формате #RRGGBB с выводом стильного OSD-уведомления и наглядным цветным индикатором (превью цвета).
Удобно для дизайнеров, разработчиков и кастомизации системы без использования стороннего софта.
Теперь окно программы можно свернуть клавишей ESC.
Цитата: dehote9223 от 05.09.2026, 12:19Полностью переработан алгоритм проверки нахождения курсора над Рабочим столом
Устранена проблема ложного перехвата колеса мыши над сторонними окнами (Диспетчер задач, Редактор реестра и Диспетчер устройств), если перед этим был сфокусирован Рабочий стол.
Убраны универсальные классы интерфейса (SysListView32, DirectUIHWND) из критериев определения Рабочего стола.
Введена строгая проверка принадлежности целевого окна к процессу оболочки (explorer.exe) и корневым классам Progman / WorkerW.
Полностью переработан алгоритм проверки нахождения курсора над Рабочим столом
Устранена проблема ложного перехвата колеса мыши над сторонними окнами (Диспетчер задач, Редактор реестра и Диспетчер устройств), если перед этим был сфокусирован Рабочий стол.
Убраны универсальные классы интерфейса (SysListView32, DirectUIHWND) из критериев определения Рабочего стола.
Введена строгая проверка принадлежности целевого окна к процессу оболочки (explorer.exe) и корневым классам Progman / WorkerW.
Цитата: dehote9223 от 05.09.2026, 13:42В меню "📁 Проводник и кэш" добавлен пункт "Если в проводнике нет флешки"
Иногда из-за сбоя драйвера или некорректного извлечения флешка остаётся подключённой к ПК, но исчезает из Проводника.Что делает функция
Принудительно восстанавливает автомонтирование томов (mountvol /e).
Сбрасывает зависший стек драйверов и кэш узлов USBSTOR через pnputil.
Инициирует мгновенное пересканирование шины Plug and Play (pnputil /scan-devices).Есть вероятность, что накопитель определится и появится в "Этот компьютер" даже без необходимости физически вынимать его из разъёма.
В меню "📁 Проводник и кэш" добавлен пункт "Если в проводнике нет флешки"
Иногда из-за сбоя драйвера или некорректного извлечения флешка остаётся подключённой к ПК, но исчезает из Проводника.
Что делает функция
Принудительно восстанавливает автомонтирование томов (mountvol /e).
Сбрасывает зависший стек драйверов и кэш узлов USBSTOR через pnputil.
Инициирует мгновенное пересканирование шины Plug and Play (pnputil /scan-devices).
Есть вероятность, что накопитель определится и появится в "Этот компьютер" даже без необходимости физически вынимать его из разъёма.
Цитата: dehote9223 от 05.09.2026, 19:09Улучшение функции "Если в проводнике нет флешки"
Включено глобальное системное автомонтирование томов (mountvol /e) и добавлено принудительное присвоение свободных букв всем доступным разделам USB-накопителей (с автоматическим пропуском системных и зарезервированных областей).
Добавлен автоматический перевод обнаруженных USB-накопителей из состояния Offline в активный режим Online.
Добавлен автоматический сброс зависшего атрибута Read-Only на физическом уровне диска.
Реализовано строгое строковое экранирование идентификаторов устройств (InstanceId) при сбросе сбойных контроллеров через pnputil.
Завершающим этапом вызывается аппаратное пересканирование шины (/scan-devices) для мгновенной инициализации накопителя в системе.
Улучшение функции "Если в проводнике нет флешки"
Включено глобальное системное автомонтирование томов (mountvol /e) и добавлено принудительное присвоение свободных букв всем доступным разделам USB-накопителей (с автоматическим пропуском системных и зарезервированных областей).
Добавлен автоматический перевод обнаруженных USB-накопителей из состояния Offline в активный режим Online.
Добавлен автоматический сброс зависшего атрибута Read-Only на физическом уровне диска.
Реализовано строгое строковое экранирование идентификаторов устройств (InstanceId) при сбросе сбойных контроллеров через pnputil.
Завершающим этапом вызывается аппаратное пересканирование шины (/scan-devices) для мгновенной инициализации накопителя в системе.
Цитата: dehote9223 от 06.09.2026, 06:46Доработка функции "Если в проводнике нет флешки"
[spoiler title="Доработка функции "Если в проводнике нет флешки""]Устранена зависимость от powershell.exe и командлетов модуля Storage/CIM, которые могли работать нестабильно на оптимизированных или облегчённых сборках Windows.
Алгоритм перебора накопителей и привязки букв переведён на системные API.
Выполнение всей цепочки действий вынесено в отдельный рабочий поток пула потоков (RunAsync), что исключает зависание интерфейса программы на время работы дисковых утилит.Реализован перебор зарегистрированных томов в системе с помощью FindFirstVolumeW / FindNextVolumeW.
Для обнаруженных томов без точек монтирования буква назначается напрямую через SetVolumeMountPointW (с повышением привилегии SE_MANAGE_VOLUME_NAME).
Это позволяет обойти флаги NoDefaultDriveLetter и атрибуты скрытия разделов (характерно для накопителей, подготовленных через Rufus, Ventoy или в среде Linux).
Первая свободная буква в диапазоне от D: до Z: определяется динамически через анализ битовой маски GetLogicalDrives().Если накопитель не идентифицируется системой как съёмный (DRIVE_REMOVABLE), выполняется опрос свойств оборудования через DeviceIoControl (IOCTL_STORAGE_QUERY_PROPERTY).
Проверка свойства BusType == BusTypeUsb позволяет корректно подхватывать и монтировать внешние жёсткие диски, картридеры, а также быстрые внешние SSD (SATA/NVMe в USB-боксах и с протоколом UASP).Добавлен предварительный вызов mountvol /e и пакетных команд diskpart (san policy=OnlineAll, automount enable, rescan).
Это предотвращает перевод новых дисков в режим "Вне сети" (Offline) системными политиками SAN и принудительно активирует службу автомонтирования.
Выполняется повторное сканирование аппаратной конфигурации через pnputil /scan-devices.Отправляется широковещательное сообщение WM_DEVICECHANGE с флагом DBT_DEVICEARRIVAL и маской добавленного тома, уведомляя ОС о появлении нового диска.
Сбрасывается кэш каталога "Этот компьютер" (FOLDERID_ComputerFolder) через вызовы SHChangeNotify.
Через COM-интерфейс IShellWindows для каждого открытого окна Проводника вызывается метод Refresh(), благодаря чему назначенный диск сразу отображается в интерфейсе.[/spoiler]
Доработка функции "Если в проводнике нет флешки"
Алгоритм перебора накопителей и привязки букв переведён на системные API.
Выполнение всей цепочки действий вынесено в отдельный рабочий поток пула потоков (RunAsync), что исключает зависание интерфейса программы на время работы дисковых утилит.
Реализован перебор зарегистрированных томов в системе с помощью FindFirstVolumeW / FindNextVolumeW.
Для обнаруженных томов без точек монтирования буква назначается напрямую через SetVolumeMountPointW (с повышением привилегии SE_MANAGE_VOLUME_NAME).
Это позволяет обойти флаги NoDefaultDriveLetter и атрибуты скрытия разделов (характерно для накопителей, подготовленных через Rufus, Ventoy или в среде Linux).
Первая свободная буква в диапазоне от D: до Z: определяется динамически через анализ битовой маски GetLogicalDrives().
Если накопитель не идентифицируется системой как съёмный (DRIVE_REMOVABLE), выполняется опрос свойств оборудования через DeviceIoControl (IOCTL_STORAGE_QUERY_PROPERTY).
Проверка свойства BusType == BusTypeUsb позволяет корректно подхватывать и монтировать внешние жёсткие диски, картридеры, а также быстрые внешние SSD (SATA/NVMe в USB-боксах и с протоколом UASP).
Добавлен предварительный вызов mountvol /e и пакетных команд diskpart (san policy=OnlineAll, automount enable, rescan).
Это предотвращает перевод новых дисков в режим "Вне сети" (Offline) системными политиками SAN и принудительно активирует службу автомонтирования.
Выполняется повторное сканирование аппаратной конфигурации через pnputil /scan-devices.
Отправляется широковещательное сообщение WM_DEVICECHANGE с флагом DBT_DEVICEARRIVAL и маской добавленного тома, уведомляя ОС о появлении нового диска.
Сбрасывается кэш каталога "Этот компьютер" (FOLDERID_ComputerFolder) через вызовы SHChangeNotify.
Через COM-интерфейс IShellWindows для каждого открытого окна Проводника вызывается метод Refresh(), благодаря чему назначенный диск сразу отображается в интерфейсе.
Цитата: dehote9223 от 06.09.2026, 20:54Оптимизация перехватчика мыши (Mouse Hook)
Ранее идентификатор процесса сбрасывался при скроллинге над сторонними окнами (браузеры, игры), из-за чего на каждый тик колёсика вызывалась "тяжёлая" функция FindWindow, сканирующая всё дерево окон Windows.
Теперь кэш инвалидируется только при реальном перезапуске explorer.exe (по событию TaskbarCreated).При прокрутке или клике СКМ над любым сторонним приложением выполняется лишь быстрая сверка PID (GetWindowThreadProcessId).
Дорогостоящие проверки классов окон больше не затрагиваются.Поскольку низкоуровневый хук (WH_MOUSE_LL) синхронно блокирует очередь сообщений системы, сведение нагрузки к единичным инструкциям процессора полностью ликвидировало просадки плавности и задержки курсора при быстром скролле.
Влияние хука на процессор сведено практически к нулю.
Оптимизация перехватчика мыши (Mouse Hook)
Ранее идентификатор процесса сбрасывался при скроллинге над сторонними окнами (браузеры, игры), из-за чего на каждый тик колёсика вызывалась "тяжёлая" функция FindWindow, сканирующая всё дерево окон Windows.
Теперь кэш инвалидируется только при реальном перезапуске explorer.exe (по событию TaskbarCreated).
При прокрутке или клике СКМ над любым сторонним приложением выполняется лишь быстрая сверка PID (GetWindowThreadProcessId).
Дорогостоящие проверки классов окон больше не затрагиваются.
Поскольку низкоуровневый хук (WH_MOUSE_LL) синхронно блокирует очередь сообщений системы, сведение нагрузки к единичным инструкциям процессора полностью ликвидировало просадки плавности и задержки курсора при быстром скролле.
Влияние хука на процессор сведено практически к нулю.
Цитата: dehote9223 от 07.09.2026, 08:02В контекстное меню трея добавлено подменю "🖱 Колесо мыши на Панели задач"
🚫 Отключить действие
🔊 Громкость (Вверх: + / Вниз: -)
🔆 Яркость монитора (Вверх: + / Вниз: -)
🗔 Рабочие столы (Вверх: Вправо / Вниз: Влево)
🎵 Треки плеера (Вверх: След. / Вниз: Пред.)
В контекстное меню трея добавлено подменю "🖱 Колесо мыши на Панели задач"
🚫 Отключить действие
🔊 Громкость (Вверх: + / Вниз: -)
🔆 Яркость монитора (Вверх: + / Вниз: -)
🗔 Рабочие столы (Вверх: Вправо / Вниз: Влево)
🎵 Треки плеера (Вверх: След. / Вниз: Пред.)
Цитата: dehote9223 от 07.09.2026, 09:17В контекстное меню трея добавлено подменю "🔄 Обновления"
"🔍 Проверить сейчас" — ручной запуск проверки новой версии программы.
"Спрашивать перед обновлением" (по умолчанию) — программа запросит подтверждение перед загрузкой и перезапуском.
"Обновлять автоматически" — включение авто-установки без всплывающих диалоговых окон.
В контекстное меню трея добавлено подменю "🔄 Обновления"
"🔍 Проверить сейчас" — ручной запуск проверки новой версии программы.
"Спрашивать перед обновлением" (по умолчанию) — программа запросит подтверждение перед загрузкой и перезапуском.
"Обновлять автоматически" — включение авто-установки без всплывающих диалоговых окон.
Цитата: dehote9223 от 07.09.2026, 09:38В контекстное меню трея "🔄 Обновления" добавлен пункт "Не проверять автоматически"
Для отключения проверки обновлений
В контекстное меню трея "🔄 Обновления" добавлен пункт "Не проверять автоматически"
Для отключения проверки обновлений
Цитата: dehote9223 от 07.09.2026, 15:05В меню "🕹 Игровые оптимизации" добавлен пункт "🛡 Создать точку восстановления Windows"
Если функция "📋 Сохранить текущие настройки" запоминает только положения тумблеров в самой программе, то точка восстановления создаёт полноценный системный слепок реестра и состояния служб Windows.
В меню "🕹 Игровые оптимизации" добавлен пункт "🛡 Создать точку восстановления Windows"
Если функция "📋 Сохранить текущие настройки" запоминает только положения тумблеров в самой программе, то точка восстановления создаёт полноценный системный слепок реестра и состояния служб Windows.
Цитата: dehote9223 от 07.09.2026, 16:26Добавлена функция быстрой смены локализации: в меню трея появился пункт "🌐 English version"
При подтверждении программа автоматически скачивает актуальный англоязычный бинарник из облака, обновляет исполняемый файл и перезапускается с сохранением всех ваших настроек.
[spoiler title="Принцип работы механизма"]Переход осуществляется по схеме In-Place Hot-Swap (горячая замена исполняемого файла "на лету" без сторонних инсталляторов и скриптов).
Диалог подтверждения и обработка клавиш:
При клике на пункт меню выводится модальное окно MessageBoxW с текстом на двух языках.
Флаг MB_DEFBUTTON1 сразу ставит фокус на кнопку "Да / Yes", что позволяет подтвердить действие простым нажатием клавиши Enter.
Через установленный глобальный хук сообщений WH_MSGFILTER отслеживается нажатие клавиши Esc: при её нажатии хук автоматически шлет команду IDNO, закрывая окно и отменяя переход.Проверка подключения к сети:
Перед обращением к облаку функция IsInternetConnected() проверяет сетевой статус через WinINet API. Если компьютер оффлайн, скачивание не начнется, а пользователю отобразится предупреждение.Асинхронное получение метаданных (REST API):
Задача уходит в отдельный поток пула QueueUserWorkItem, предотвращая зависание интерфейса программы.
Через стек WinHTTP выполняется защищённый HTTPS-запрос к публичному REST API Яндекс Диска по ключу папки с английской версией.
Из полученного JSON-ответа парсятся: прямая ссылка на файл (file), точный размер (size) и дата модификации (modified).Безопасное скачивание и валидация целостности:
Файл скачивается порциями по 8 КБ напрямую в буферный временный файл рядом с программой: Trinity.exe.tmp.
По завершении загрузки проверяется соответствие фактического размера файла размеру, переданному сервером, что исключает запуск поврежденного или недокачанного бинарника.Атомарная подмена файла (Atomic File Replacement):
Поскольку работающий файл .exe заблокирован Windows на удаление и прямую перезапись, применяется системный трюк переименования:
Текущий файл переименовывается в Trinity.exe.old с помощью флага MOVEFILE_REPLACE_EXISTING.
Скачанный Trinity.exe.tmp перемещается на место основного Trinity.exe.
В случае непредвиденного сбоя срабатывает откат: Trinity.exe.old возвращается на исходное место.Сохранение состояния и перезапуск:
В settings.ini записывается дата удаленной модификации (LastRemoteModified), чтобы встроенный автоапдейтер английской версии сразу считал бинарник актуальным.
Иконка в трее корректно удаляется (Shell_NotifyIconW(NIM_DELETE)), предотвращая появление "зависших" иконок.
Через ShellExecuteW инициируется запуск обновленного Trinity.exe, а текущий процесс немедленно завершается (ExitProcess(0)).
При следующем старте приложение на этапе WM_CREATE автоматически удаляет оставшийся временный файл Trinity.exe.old. Все пользовательские настройки в .ini полностью сохраняются.[/spoiler]
Добавлена функция быстрой смены локализации: в меню трея появился пункт "🌐 English version"
При подтверждении программа автоматически скачивает актуальный англоязычный бинарник из облака, обновляет исполняемый файл и перезапускается с сохранением всех ваших настроек.
Диалог подтверждения и обработка клавиш:
При клике на пункт меню выводится модальное окно MessageBoxW с текстом на двух языках.
Флаг MB_DEFBUTTON1 сразу ставит фокус на кнопку "Да / Yes", что позволяет подтвердить действие простым нажатием клавиши Enter.
Через установленный глобальный хук сообщений WH_MSGFILTER отслеживается нажатие клавиши Esc: при её нажатии хук автоматически шлет команду IDNO, закрывая окно и отменяя переход.
Проверка подключения к сети:
Перед обращением к облаку функция IsInternetConnected() проверяет сетевой статус через WinINet API. Если компьютер оффлайн, скачивание не начнется, а пользователю отобразится предупреждение.
Асинхронное получение метаданных (REST API):
Задача уходит в отдельный поток пула QueueUserWorkItem, предотвращая зависание интерфейса программы.
Через стек WinHTTP выполняется защищённый HTTPS-запрос к публичному REST API Яндекс Диска по ключу папки с английской версией.
Из полученного JSON-ответа парсятся: прямая ссылка на файл (file), точный размер (size) и дата модификации (modified).
Безопасное скачивание и валидация целостности:
Файл скачивается порциями по 8 КБ напрямую в буферный временный файл рядом с программой: Trinity.exe.tmp.
По завершении загрузки проверяется соответствие фактического размера файла размеру, переданному сервером, что исключает запуск поврежденного или недокачанного бинарника.
Атомарная подмена файла (Atomic File Replacement):
Поскольку работающий файл .exe заблокирован Windows на удаление и прямую перезапись, применяется системный трюк переименования:
Текущий файл переименовывается в Trinity.exe.old с помощью флага MOVEFILE_REPLACE_EXISTING.
Скачанный Trinity.exe.tmp перемещается на место основного Trinity.exe.
В случае непредвиденного сбоя срабатывает откат: Trinity.exe.old возвращается на исходное место.
Сохранение состояния и перезапуск:
В settings.ini записывается дата удаленной модификации (LastRemoteModified), чтобы встроенный автоапдейтер английской версии сразу считал бинарник актуальным.
Иконка в трее корректно удаляется (Shell_NotifyIconW(NIM_DELETE)), предотвращая появление "зависших" иконок.
Через ShellExecuteW инициируется запуск обновленного Trinity.exe, а текущий процесс немедленно завершается (ExitProcess(0)).
При следующем старте приложение на этапе WM_CREATE автоматически удаляет оставшийся временный файл Trinity.exe.old. Все пользовательские настройки в .ini полностью сохраняются.