Rainmeterを使ってみようの巻 〜Variable〜

  • 2022年09月06日 4.5対応

[Variables] Section

スキン全体で使うユーザー定義変数を記述する。呼び出すときは#Foo#の様に#で囲う。

[Variables]
Foo=This is a string!
Bar=So is this!
[MeterFoo]
Meter=String
Text=The value of my "Foo" variable is: #Foo#
[MeterBar]
Meter=String
Text=The value of my "Bar" variable is: #Bar#

Dynamic Variables

DynamicなVariableというのもなんだかおかしな話で変数とは元々そういう物ではないのかという気がするがまあよしとしよう。DynamicVariables=1を付けると値が常に変化する動的な変数をSection内で扱えるようになる。これはSection毎に必要。

ユーザー定義変数の変更方法

!SetVariableと!WriteKeyValueの2つがある。!SetOptionはユーザー定義変数とは関わり合いがないが一見似てるので混同しないよう一緒に説明する。

コマンド 概要
!SetVariable Variables Sectionのユーザー定義変数を一時的に変更する。
  • Refreshしたら変更が元に戻る
  • DynamicVariables=1が必要
!WriteKeyValue 指定Sectionの指定Keyの値をiniファイルに直接書き込む。Variables Sectionを指定すればユーザー定義変数も変更出来る。
  • Refreshしないと変更が適用されない
  • DynamicVariables=1は必要ない
!SetOption MeterもしくはMeasureのオプションを一時的に変更する。Variables Sectionのユーザー定義変数は全く関係ない。
  • Refreshしたら変更が元に戻る
  • DynamicVariables=1は必要ない

Built-In Variables

Rainmeter側で予め定義された組み込み変数。

Path
変数 概要
#PROGRAMDRIVE# Rainmeter.exeがあるドライブもしくはサーバーを返す。
C:
\\server\Users\
#PROGRAMPATH# Rainmeter.exeがあるフォルダのPathを返す。
C:\Program Files\Rainmeter\
#SETTINGSPATH# Rainmeter.iniがあるフォルダのPathを返す。
C:\Users\YourName\Appdata\Roaming\Rainmeter\
#SKINSPATH# スキンフォルダのPathを返す。
C:\Users\YourName\My Documents\Rainmeter\Skins\
#PLUGINSPATH# プラグインフォルダのPathを返す。
C:\Users\YourName\My Documents\Rainmeter\Plugins\
#ADDONSPATH# アドオンフォルダのPathを返すとあるが、アドオンフォルダは可能な限り避けるべきで@Resourcesフォルダを代わりに使う事と書いてあるので昔の名残を互換性維持の為に残してあるんだろう。
C:\Users\YourName\My Documents\Rainmeter\Addons\
Skin
変数 概要
#@# @ResourcesフォルダのPathを返す。
C:\Users\YourName\Documents\Rainmeter\Skins\illustro\@Resources\
#CURRENTPATH# skinのiniファイルがあるフォルダのPathを返す。
C:\Users\YourName\Documents\Rainmeter\Skins\illustro\Clock\
#CURRENTFILE# skinのiniファイル名を返す。
Clock.ini
#ROOTCONFIGPATH# Root configフォルダのPathを返す。
C:\Users\YourName\Documents\Rainmeter\Skins\illustro\
#ROOTCONFIG# Root config名を返す。
illustro
#CURRENTCONFIG# skinのconfig名を返す。
illustro\Clock
#CURRENTCONFIGX#
#CURRENTCONFIGY#
#CURRENTCONFIGWIDTH#
#CURRENTCONFIGHEIGHT#
skinの位置及びサイズを返す。この変数はDynamic Variable扱いとなる。
#CURRENTCONFIGZPOS#
4.5で追加
skinのZ-Positionを返す。この変数はDynamic Variable扱いとなる。
Miscellaneous
変数 概要
#CRLF# 改行コードを返す。
#CURRENTSECTION# 変数が使われているSection名を返す。
#CONFIGEDITOR# 設定されたエディタもしくは関連づけられたエディタのPATHを返す。
Monitor

以下の変数はマルチモニタ環境で使用する。ちなみに全てDynamic Variable扱い。

変数 概要
#WORKAREAX#
#WORKAREAY#
#WORKAREAWIDTH#
#WORKAREAHEIGHT#
現在のモニタの作業領域の位置及びサイズを返す。さて現在のモニタとは何を指すのかというと管理ツールのスキンタブにある「表示するモニタ」の設定次第で変わる。必ずしもスキンの存在するモニタの事ではない。そして作業領域だがこれはデスクトップからタスクバー部分を除いた領域の事を指す。じゃあ作業領域の位置とは何なのかと言うとマルチモニタ領域全体での位置を指す。だからFHD*2の環境で2枚目のモニタならばWORKAREAXは1920となる訳だ。
#SCREENAREAX#
#SCREENAREAY#
#SCREENAREAWIDTH#
#SCREENAREAHEIGHT#
現在のモニタの表示領域の位置及びサイズを返す。表示領域とはタスクバー部分を含んだデスクトップ領域の事を指す。
#PWORKAREAX#
#PWORKAREAY#
#PWORKAREAWIDTH#
#PWORKAREAHEIGHT#
プライマリモニタの作業領域の位置及びサイズを返す。
#PSCREENAREAX#
#PSCREENAREAY#
#PSCREENAREAWIDTH#
#PSCREENAREAHEIGHT#
プライマリモニタの表示領域の位置及びサイズを返す。
#WORKAREAX@N#
#WORKAREAY@N#
#WORKAREAWIDTH@N#
#WORKAREAHEIGHT@N#
N枚目のモニタの作業領域の位置及びサイズを返す。
#SCREENAREAX@N#
#SCREENAREAY@N#
#SCREENAREAWIDTH@N#
#SCREENAREAHEIGHT@N#
N枚目のモニタの表示領域の位置及びサイズを返す。
#VSCREENAREAX#
#VSCREENAREAY#
#VSCREENAREAWIDTH#
#VSCREENAREAHEIGHT#
仮想スクリーンの位置及びサイズを返す。

Section Variables

[Section名]とSection名をブラケットで囲うとMeasureもしくはMeterを変数として表現することが出来る。これも全てDynamic Variable扱いなのでDynamicVariables=1が必要。複数のParameterを持つことが出来る物がいくつかあるが[Section名:P1,P2]とカンマで区切って指定する。ただし指定するべき順番が決まっているので注意。変数名はVariables Sectionのユーザー定義変数とBuilt-In変数がSection変数に優先する。なので下記の様な事も可能。

[Variables]
Section=MeasureTime
Parameter=Timestamp
[MeasureTime]
Measure=Time
[MeterText]
Meter=String
Text=[#Section#:#Parameter#]
DynamicVariables=1
Measure
引数 概要
なし [MeasureName] 返り値を文字列で返す。
: [MeasureName:] 返り値を数値で返す。
:n [MeasureName:n] 返り値を小数点以下の桁数を指定して数値で返す。
:/n [MeasureName:/n] nで割った返り値を返す。:nと:%を同時に指定することが出来る。ただし上に書いたように必ず/nの後に付ける事。
:% [MeasureName:%] 返り値を%値として返す。:nと:/nを同時に指定することが出来る。
:MinValue
:MaxValue
[MeasureName:MinValue]
[MeasureName:MaxValue]
最小値と最大値を返す。:nと:%を同時に指定することが出来る。
:EscapeRegExp [MeasureName:EscapeRegExp] 返り値を正規表現のメタキャラクタをエスケープして返す。
:EncodeURL [MeasureName:EncodeURL] 名前が示す通りの操作を施すのだが実装の仕様が古いので全く役に立たない。たぶん誰も使わないからそのまま放置されてるんだろう。
:Timestamp [MeasureName:Timestamp] typeがTimeの時のみ機能する。WindowsのTimeStampを返す。
Meter
引数 概要
なし [MeterName] Parameterなしでは機能しない。必ず付けること。
:X
:Y
[MeterName:X]
[MeterName:Y]
スキン内での座標を返す。モニタ内での座標ではない。
:W
:H
[MeterName:W]
[MeterName:H]
サイズを返す。
:XW
:YH
[MeterName:XW]
[MeterName:YH]
スキン内での座標にスキンのサイズを足し合わせた物、すなわち[MeterName:X] + [MeterName:W]および[MeterName:Y] + [MeterName:H]を返す。

Mouse Variables

これは特殊な変数で下記の様にBangの引数として使われる。

LeftMouseUpAction=[!SetOption SomeMeter X $MouseX$][!UpdateMeter *][!Redraw]

蛇足だが、Rainmeterを初めて触る身からするといまいち意味が分からない。なんでこんなに3つもコマンドがあるのか。最初にSetOptionでオプションの値を変えるがUpdateまでMeterに反映されない。そこでUpdateMeterでUpdateを無視して反映させる。しかしまだMeterに反映されただけで描画された訳ではない。そこでRedrawでUpdateを無視して再描画する。という話の流れである。

変数 概要
$MouseX$
$MouseY$
マウスアクションが発生した、Meterもしくはskin内での相対的な座標。
$MouseX:%$
$MouseY:%$
マウスアクションが発生した、Meterもしくはskin内での相対的な%値座標。

Nesting Variables

変数の入れ子構造に関する話。まずはその為の書式から説明する。

書式 展開後
[#VarName] #VarName#
[&MeasureName] [MeasureName]
[$MouseVar] $MouseVar$

各変数はこのように展開される。あとの話は単純で

Text=[#MyVar[#MyOtherVar]]
Text=[#MyVar[&MyMeasure]]
Text=[&MyMeasure[#MyVar]]
Text=[&MyMeasure[&MyOtherMeasure]]

と言う感じで使う。ただしこれは変数の入れ子の為に導入された書式であって、通常の書式として使うわけではない。またエスケープする必要がある場合は下記のようにする。

[#*VarName*]
[&*MeasureName*]

Character Reference Variables

unicodeの番号から文字を生成する書式。特殊文字を出したときぐらいしか使い道は無い。

進数 書式 範囲
16進数 [\x2622] x0-xFFFE
10進数 [\9762] 0-65536