Так уж получилось, что все программы мониторинга крайне не рационально
используют экранное пространство - информации, которая способна
уместиться в несколько строк, отводится здоровенное окно. Для снятия
скринов с результатами разгона такой размер неплох, но оставлять такое
окно постоянно открытым неудобно. Однако при разгоне «свеженькой»
системы я привык контролировать и наблюдать за ее параметрами постоянно –
так легче понять, что и когда глюкнуло и что надо подкрутить, чтобы
устранить проблему... Одним словом я давно мечтал о ненавязчивом
мониторинге, который всегда виден и не мешается под ногами (в рабочем
пространстве)… Сказать честно я о нем только мечтал, но каких либо
особых усилий для поиска или реализации не прикладывал. Однажды гуляя по
страницам rutracker.org я наткнулся на одну интересную тему в которой
шло обсуждение приблуды именуемой Rainmeter... из обсуждения становилось
понятно что среда этой программы позволяет писать самые разнообразные
гаджеты для рабочего стола, кроме того у нее довольно развиты ф-ции
мониторинга, а те которых не хватает реализуются с помощью плагинов. В
стандартный пакет входит плагин для Core Temp... Главной же фишкой этой
программы было то что гаджет можно по сути сделать частью рабочего
стола... Программка открывала путь к реализации моей древней мечты о
ненавязчивом и постоянном мониторинге системы... и я принялся за
изучение основ... на официальном сайте программы есть подробный FAQ по
написанию гаджетов, кроме того мною было скачано несколько тем для
Rainmeter и изучены входящие в их состав скины (гаджеты).
Скин в Rainmeter это текстовый ini файл, содержащий описание
датчиков и индикаторов выводимых на экран. Под индикатором понимается
любой видимый на экране объект, в т. ч. изображение (картинка) с точки
зрения rainmeter является индикатором. Кроме того для индикаторов можно
присвоить действия которые будут совершены при нажатии на них мышью.
Т.е. получалось что можно сделать не просто скин для мониторинга, а
полноценный и многофункциональный GUI. Мне в частности сразу захотелось
чтобы в моем гаджете была кнопка для мгновенного снятия скриншота
рабочего стола, а также кнопки запуска всех оверских приблуд (CPU-z,
LinX, etc). Впрочем все это частности переходим к описанию результатов
моих трудов Полазив по сайту с темами для Rainmeter, я выбрал простенький скин
для модификации под свои нужды. Тогда еще не было мыслей о том что бы
афишировать результаты своих трудов, и скин выбирался по внешнему виду.
Мне понравился вот этот вариант:
Его легко было адаптировать под расположение в верхнем левом углу
экрана. Почему именно в левом ? Этот угол как правило ничем не занят, и
хорошо виден если приложение не развернуто на полный экран. Изображение
было слегка изменено, в скин были добавлены стандартные индикаторы Core
Temp - а именно температур и VID, а так же основная информация о
разогнанной системе - название процессора, данные о шине, частоте,
множителе, версии операционной системы, Up Time. Также на скине
отображается информация о загрузке оперативной памяти, свапфайла, общая
загрузка процессора, время и дата (реализовано средствами Rainmeter).
Чуть позже были добавлены индикаторы загрузки всех потоков, кнопки
запуска оверклокерских приложений, а также с помощью внешней команды
добавлена функция сокрытия иконок рабочего стола.
На картинке ниже то что получилось:
Core Temp Skin
Не желая останавливаться на достигнутом, я стал изучать форум
Rainmeter, с целью оптимизировать текст скина, а так же в поисках того
как реализовать функцию снятия скриншота... В процессе чтения форума
наткнулся на beta версию плагина для чтения данных из Open Harware
Monitor (OHM)- кто не знает, это open source аналог HWmonitor. Так
появился вторая версия скина:
Open Hardware Monitor skin
Кроме перехода на плагин OHM, в скине была реализована кнопка снятия
скриншота, средствами утилиты nircmd (замечательная надо сказать штука -
позволяет делать множество операций с системой через командную строку,
рекомендую). В скин добавился мониторинг всех множителей, температуры
видеокарты, материнской платы и СМ... Именно на этом этапе я подумал что
скин можно довести до ума и выложить для свободного использования. Я
понимал, что в угловом варианте скина разместить максимум информации о
системе (дабы охватить весь спектр пожеланий пользователей) не
получится, поэтому был создан вертикальный боковой гаджет в который при
желании можно было бы вывести большое кол-во данных:
В скине появляется кнопка переключения между вертикальным и угловым
вариантами, появляется название - Overclock it!!! (первое что пришло в
голову
), появляются данные о загрузке видеоядра и видеопамяти. Добавляются
кнопка вызова меню настройки в котором можно изменять прозрачность
панели, цвет шрифта, пути к приложениям. Меню настроек реализовано через
AutoIt.
Настройки
Стоит ли говорить что я вошел во вкус скинизации программ
мониторинга... и в поисках чего бы еще заскинить обнаружил плагин для
AIDA64... Но к сожалению он у меня почему то не заработал... однако в
настройках AIDA была обнаружена интересная опция - "Разрешить запись
показаний датчиков в реестр". Краткое изучение Helpа показало что все
датчики при включении этой опции отображаются в реестре. А Rainmeter их
может оттуда считать... Так появляется вариант скина для AIDA64...
и идея о том что бы сделать скин который будет подхватывать на лету
данные от запущенных программ мониторинга... которая была реализована в
процессе написания статьи, и стала окончательным вариантом моего
гаджета. О нем и пойдет речь.
Инсталяция Rainmeter и гаджета
Для начала вам необходимо установить сам Rainmeter, скачать его можно тут,
либо по ссылке в конце статьи. Далее необходимо установить сам гаджет, и
провести его настройки. Для установки гаджета просто щелкните по нем
мышкой. Для включения гаджета щелкните правой кнопкой по значку
rainmeter в трее, далее войдите в "Скины->OverClock" и выберете файл
MULTIbig.ini. Гаджет появится на рабочем столе - перенесите его в то
место на котором он будет находится. Теперь щелкните на гаджете правой
кнопкой мыши, зайдите в "Настройки" и уберите галочку "Подвижность", а
также включите галочки "Оставаться на экране" и "Сохранять позицию".
Теперь ваш гаджет зафиксирован в том положении в котором вы его оставили
и не будет перетаскиваться мышью. Далее настройте положение на рабочем
столе - "Настройки->Позиция" и установите галочку "На рабочем столе".
Теперь гаджет всегда будет находится под открытыми окнами.
В меню OverClock можно выбрать еще несколько гаджетов - все это версии появившиеся в процессе написания конечного варианта.
Описание и настройка Гаджета
На скрине выше приведено краткое описание назначения кнопок и
варианты внешнего вида гаджета в разных режимах отображения. На данный
момент таких режима три - AIDA, OpenHardwareMonitor и Core temp. При
запуске любой программы из списка ее данные отобразятся на панели
гаджета, а кнопка будет слегка подсвечена. Если запущено несколько
поддерживаемых программ мониторинга - отобразятся данные той которая
запущена последней. При этом между показаниями можно переключится нажав
кнопку запуска программы. Кнопка снятия скриншота захватывает
изображение рабочего стола и сохраняет его на рабочий стол с именем вида
"scr10_31_2011-00_19_51.png". Если у вас два монитора будут сохранен
скрин обоих в одном файле... Кнопку сокрытия иконок комментировать не
нужно - с ней и так все понятно. Теперь остановимся на настройках самих
программ мониторинга. Для считывания данных из Core Temp никаких особых
настроек не требуется, его нужно просто запустить. Для AIDA64 необходимо
включить опцию "Разрешить запись показаний датчиков в реестр"
(Настройки->Внешние приложения):
Для Open Hardware Monitor необходимо зайти в меню настроек гаджета и
прописать названия процессора, чипа, видеокарты, а также названия
датчиков температуры материнской платы и северного моста из OHM в
соответствующие поля настроек:
После ввода каждого параметра необходимо нажать кнопку Set. В этом
же меню настроек необходимо ввести все пути к приложениям. По умолчанию
стоят стандартные пути расположения для Windows 7 64, если у вас
расположения программ мониторинга отличаются -пути необходимо
скорректировать. Тут же, в меню настроек можно изменить шрифт, его цвет и
стиль, цвет индикаторов и прозрачность панели.
Теперь немного о глюках. При первом запуске OHM у вас скорее всего
вылезет с десяток окон Rainmeter о несуществующих датчиках - в этом
случае окна надо закрыть и провести настройку OHM как описано выше. Это
издержки бэта версии плагина и я их пока самостоятельно исправить не
могу. Кроме того плагин OHM приводит к вываливанию Rainmeter на
виртуальных машинах... Желающие скорректировать плагин могут почитать о
нем и скачать исходники тут. Необходимо чтобы в случае отсутствия датчика он возвращал 0, а не вызывал ошибку.
Как это все работает ?
Ну а теперь более подробно о нюансах реализации скинов - ведь
материал писался не только для описание моих гаджетов, но и для
ознакомления читателя с азами написанием скинов в Rainmeter - возможно
кто то захочет что то изменить "под себя", или добавить упущенный мной
функционал. Ниже приведено несколько примеров с комментариями...
Как писалось выше скин (гаджет) в rainmeter - это ini файл с
описанием датчиков и индикаторов. В начале файла находится несколько
секций с описаниями:
[Rainmeter]
Update=1000 ; частота обновления датчиков и индикаторов в миллисекундах
Author=alex1974 aka lexover ; автор
AppVersion=0.3 ; версия
[Metadata]
Name= OverClock ; название скина
Config=
Description=Док для программ мониторинга.
Instructions=
Version= 0.3
Tags=
License=
Variant=
Preview=
[Variables] ; описание переменных
@include=/configure/Var.inc ; присоеденяем файл Var.inc. В Файле могут содержаться датчики, индикаторы, переменные.
UNAME=[MeasureUserName] ; объявлена переменная UNAME и ей присвоено значение датчика MeasureUserName.
...
Далее идет описание датчиков и индикаторов. Датчик может получать
данные посредством обращений к реестру, к плагинам, к встроенным
средствам rainmeter, с помощью вычисления значений формул из других
датчиков. Например:
...
[MeasureRAM] ;описание датчика Measure ram
Measure=PhysicalMemory ; получаем данные из среды Rainmeter.
...
[MeasureVersion] ; датчик возвращает версию ОС полученную из реестра
Measure=Registry ; получаем данные из реестра
RegHKey=HKEY_LOCAL_MACHINE ; раздел
RegKey=SOFTWARE\Microsoft\Windows NT\CurrentVersion ; ветка раздела
RegValue=ProductName ; возвращаемый параметр, всегда текстовая строка.
...
[MeasureBits] ; датчик возвращает разрядность ОС полученную из стандартного плагина SysInfo.
Measure=Plugin
Plugin=Plugins\SysInfo.dll ; получаем данные из стандартного плагина rainmeter - sysinfo
SysInfoType=OS_BITS ; тип запрашиваемых данных плагина SysInfo.
...
[MeasureCore1Temp] ;датчик возвращает температуру первого ядра полученную из встроенного плагина Core Temp
Measure=Plugin
Plugin=Plugins\CoreTemp.dll ; получаем данные из стандартного плагина rainmeter - CoreTemp
CoreTempType=Temperature ; тип запрашиваемых данных - температуры
CoreTempIndex=0 ; номер температурного датчика.
[MeasureCore1MaxTemp] ; датчик вычисляет максимальную температуру
Measure=Calc ; тип датчика - формула
Formula=(MeasureCore1Temp > MeasureCore1MaxTemp) ? MeasureCore1Temp : MeasureCore1MaxTemp ;
формула получения максимальной температуры - если MeasureCore1Temp
больше MeasureCore1MaxTemp, то возвращается значение MeasureCore1Temp
иначе MeasureCore1MaxTemp
Для вывода значений датчиков на экран существуют индикаторы.
Индикатором считается любой видимый элемент на экране - изображение,
текст, кнопка, etc. Для каждого индикатора можно задать действие
производимое при наведении нажатии и отпускании мыши. Примеры:
...
[MeterBG] ; описание BackGraund image
Meter=IMAGE ; тип индикатора - изображение.
X=0 ; координата х в рабочей области скина.
Y=0 ; координата y в рабочей области скина.
ImageName=Sidebar.png ; путь к изображению. Если путь не указан изображение будет загружено из текущей папки скина.
ImageAlpha=100 ; прозрачность
...
[MeterHours] ; выводит на экран часы
MeasureName=MeasureHours ; источник данных - датчик [MeasureHours]
Meter=STRING ; тип индикатора - строка
X=33 ; координата х в рабочей области скина.
Y=32 ; координата y в рабочей области скина.
FontColor=255, 255, 255, 150 ; цвет шрифта
FontSize=20 ; размер шрифта
FontFace=#FONTNAME# ; название шрифта
StringAlign=LEFT ; выравнивание
StringStyle=#FONTSTYLES# ; стиль шрифта (bold, italic)
AntiAlias=1 ; сглаживание включено
...
[MeterCPU] ; индикатор общей загрузки процессора в %
MeasureName=MeasureCPU ; источник данных - датчик [MeasureCPU]
Meter=STRING ; тип индикатора - строка
X=3 ; координата х в рабочей области скина.
Y=100 ; координата y в рабочей области скина.
FontFace=#FONTNAME# ;название шрифта
FontSize=8 ; размер шрифта
FontColor=#FONTCOLOR# ; цвет шрифта
Text="CPU usage: %1%" ; текст выводимый на экран, %1 будет заменено на значение датчика [MeasureCPU]
StringAlign=left
StringStyle=#FONTSTYLES# ; стиль шрифта (bold, italic)
AntiAlias=1 ; сглаживание включено
...
[meterBarCPU] ; верхний индикатор общей загрузки процессора в вертикальном варианте скина.
Meter=BAR ; тип индикатора
MeasureName=MeasureCPU ; источник данных - датчик [MeasureCPU]
X=5 ; координата х в рабочей области скина.
Y=12r ; координата y в рабочей области скина.
W=123 ; длина
H=2 ; высота
BarColor=#BARCOLOR# ; цвет индикатора
BarOrientation=HORIZONTAL ; ориентация горизонтальная
SolidColor=255,255,255,30 ; цвет фона
...
Теперь немного о реализации кнопок вызова приложений. В первую
очередь остановимся на изображении кнопки - это файл jpg или png
содержащий три изображения - в неактивном состоянии, при наведении и при
нажатии. Выглядит это так:
[MeterLinx] ; индикатор - кнопка запуска Linx
Meter=Button ; тип индикатора - кнопка
X=137 ; координата х в рабочей области скина.
Y=88 ; координата y в рабочей области скина.
ButtonImage=#CURRENTPATH#linx.png ; изображение кнопки в рабочей папке скина
LeftMouseUpAction=!Execute ["#CURRENTPATH#Run.exe" "#LINX_PATH#"] ;
Run.exe (скомпилированный скрипт AutoIt)- команда исполняемая при
нажатии на кнопку, с параметром #LINX_PATH# (Путь к LinX). В принципе
linx можно запустить и на прямую - !Execute ["#LINX_PATH#"], но тогда
при нажатии на кнопку будет запускаться новая копия LinX. Команда
Run.exe в случае если LinX запущен просто выведет окно на экран если он
свернут или свернет если окно активно, либо запустит - если LinX не
запущен.
[MeterScreenshot] ; кнопка снятия скриншота
Meter=Button ; тип индикатора - кнопка
X=137 ; координата х в рабочей области скина.
Y=30r ; координата y относительно позиции последнего индикатора.
ButtonImage=#CURRENTPATH#sc.png
LeftMouseUpAction=!Execute ["#CURRENTPATH#nircmd.exe"
"savescreenshotfull"
"C:\Users\#UNAME#\Desktop\scr~$currdate.MM_dd_yyyy$-~$currtime.HH_mm_ss$.png"]
; nircmd - утилита для снятия скриншота рабочего стола, подробнее читайте тут. Скриншот сохраняется на рабочий стол.
Надеюсь прокомментированный выше код скина дает некоторое
представление о принципах построения гаджетов в Rainmeter и поможет всем
желающим скорректировать мои гаджеты под себя. Конечно пояснения выше
далеко не исчерпывающие и дают только общее представление о скинах в
Rainmeter. Более подробно о синтаксисе скинов в Rainmeter можно прочесть
тут.
Несколько слов о меню настроек. Оно реализовано через скрипт AutoIt, не
компилированный скрипт лежит в папке config директории скина.
Послесловие
Данный гаджет не является законченным продуктом, скорее это мой
взгляд на то как должны отображаться данные мониторинга системы на
экране. Ведь гораздо удобнее когда все данные видны на рабочем столе и
для их просмотра не нужно никуда заходить. Теперь я запускаю AIDA64 в
свернутом виде - все необходимое от нее видно в гаджете, и нет
необходимости в том чтобы заходить в подразделы. Каждый желающий может
изменить гаджет в соответствии со своими вкусами, полностью сменить
оформление и т.п. Текущее графическое оформление было сделано на скорую
руку поэтому не судите строго, просто в статье я хотел привлечь
внимание к Rainmeter, уж очень он гибко настраивается. Возможно кому то
из местных программистов идея покажется интересной и он реализует
самостоятельный гаджет с захватом инфы от популярных программ
мониторинга. Ну или хотя бы пару плагинов для Rainmeter напишет Rainmeter 2.2. r1008 beta - последняя версия Rainmeter, русифицированная.
Overclock it!!!.rmskin - собственно мой гаджет.
Open Hardware Monitor 0.3.2. betaНебольшая коллекция тем для Rainmeter
- Rain2, Pog, MassEffect2, gnometer, Enigma 3.1, Cobolt 2.2., ABP1.2...
Для ознакомления и понимания что можно сделать в среде Rainmeter. Ниже
несколько скриншотов тем для Rainmeter:
ЗЫ: В процессе написания статьи гаджет несколько изменился Чуть позже будет представлена новая версия.
Обсуждаем тут.
|