Also adding file: TextFuncUF16.nsh to Rainstaller folder for UNICODE support.
If you download Build.py, be sure to set the paths to executables to your paths before using.
- Partial rewrite of Rainstaller
- Fixed a small problem with !RainmeterShowMeter and ToolTipHidden=1.
- ToolTipHidden can now be used under [Rainmeter].
- Added some codes to avoid loading a dll from current directory.
[Library]
- Added new functions to avoid loading a dll from current directory. (CSystem::RmSetDllDirectory(), CSystem::RmLoadLibrary())
Following cases are now available:
ButtonCommand=PLAY #SKINSPATH#Beeper\Sounds\beep.wav
ButtonCommand=PLAY "#SKINSPATH#Beeper\Sounds\beep.wav"
ButtonCommand=!execute [PLAY #SKINSPATH#Beeper\Sounds\beep.wav]
ButtonCommand=!execute [PLAY "#SKINSPATH#Beeper\Sounds\beep.wav"]
- Fixed the issue that the statistics are updated many times if many active skins are working. "Log" is now updated once every 1 second. Config is now updated once on its Update=.
- Fixed the issue that the statistics show by incorrect order in some conditions.
- Fixed the issue that the entries aren't updated if the skin is activated/deactivated.
!RainmeterDraggable/!RainmeterDraggableGroup
!RainmeterKeepOnScreen/!RainmeterKeepOnScreenGroup
!RainmeterClickThrough/!RainmeterClickThroughGroup
!RainmeterSnapEdges/!RainmeterSnapEdgesGroup
!RainmeterSnapEdges [parm1] (Config | *)
!RainmeterSnapEdgesGroup [parm1] [GroupName]
Parm1:
-1 toggles the setting.
0 forces the setting to off.
1 forces to setting to on.
!RainmeterWriteKeyValue "Section" "Key" "Value" ("FileSpec"), where "FileSpec" is an optional parameter. If FileSpec is not present, the change is automatically done in the currently running skin file. If the bang is executed from command line, FileSpec is required.
- Some improvements of MouseOver/Leave detection.
- Fixed the issue that window dragging brings on MouseLeave if "Show window contents while dragging" is not set.
- Fixed the issue that window dragging can't be begun by dragging the Button.
- Fixed the issue that a reaction of the upper Button penetrates to the lower Buttons or the other window.
- Fixed the issue that %APPDATA% isn't replaced if Rainmeter runs as different user.
- Some stability improvements for activating/deactivating configs.
Usage:
Group=group1 | group2 | group3
* Concatenate group with the "|" if you'd like to assign multiple groups.
- Added !Bangs for Group. (!RainmeterShowMeterGroup, !RainmeterHideMeterGroup, !RainmeterToggleMeterGroup, !RainmeterEnableMeasureGroup, !RainmeterDisableMeasureGroup, !RainmeterToggleMeasureGroup)
Usage:
!RainmeterShowMeterGroup [group] (Config)
!RainmeterHideMeterGroup [group] (Config)
!RainmeterToggleMeterGroup [group] (Config)
!RainmeterEnableMeasureGroup [group] (Config)
!RainmeterDisableMeasureGroup [group] (Config)
!RainmeterToggleMeasureGroup [group] (Config)
- Modified logging feature. Added new "Logging" menu to the context menu.
- Added the manifest to Rainmeter.exe to apply visual style to button etc.
2) Change to version checking:
* CheckVersion= setting depreciated. Removed from "About" dialog and automatically ignored and removed from Rainmeter.ini at Rainmeter start.
* New DisableVersionCheck= (1/0) setting added, which now changes the default from "don't check version" to "do check version" unless this is set to "1"
Changes to multiple files to change version number
Changes by JamesAC / spx to improve management of Windows Mssages, mostly to support working with the DexPot folks
Addition of the Win7AudioPlugin plugin by reiswaffle. This includes plugin code and changes to the Rainmeter.sln project file.
[Measure]
Disabled
[Meter]
Hidden
X
Y
In case of "Hidden":
- Hidden not added or Hidden=0/1 (=fixed value specified) and DynamicVariables=1
The specified value is handled as the starting value. After that the value is not re-read on every update. !RainmeterShowMeter etc. are enabled.
- Hidden=#VAR# or Hidden=[Measure] and DynamicVariables=1
The value is re-read on every update. !RainmeterShowMeter etc. are disabled by re-reading value.
Fixed the issue that the result of some bangs is overwritten with the default value if DynamicVariables=1 is added to Measure/Meter. (Issue 125) Note that this fix is effective only when the setting is not defined in skin configuration file. The result of !RainmeterHideMeter(or Show/Toggle) is overwritten if Hidden=0/1 is added.
Some minor changes.
1) Added Gnometer as one of the default skins, including two themese (Gnometer and Gnometer Preview)
2) Removed Tranquil skins
3) Added RainBackup in \Addons and to start menu
4) Changes to Rainstaller to use default header .bmp file if the author does not provide one in the .rmskin.
5) Changes to Rainmeter.cpp to handle Gnometer as one of the new default skins
6) Changes to the Rainmeter installation program to allow selection of default skin / theme (Gnometer or Enigma)
[MeterOne]
Meter=String
MeasureName=MeasureOne
MeasureName2=MeasureTwo
Text=%1#CRLF%2
[MeterTwo]
Meter=String
Text=This is a long string#CRLF#On two lines
Substitute="<br/>:"#CRLF#"
- Fixed a problem that StyleTemplate affects to Meters which have no relation.
- Added a workaround to avoid the "IniFileMapping" function when reading skins.
- Some small code cosmetics.
- Added !RainmeterSetTransparency, !RainmeterShowFade, !RainmeterHideFade, !RainmeterToggleFade.
- Added the function to log the installed font families to the log file when Debug=1 is set.
- Added the workaround for issue 145. The wrong drawing position was fixed when AntiAlias=0 is set.
1) New feature of Meter=String
StringCase= [NONE | LOWER | UPPER | PROPER]
2) Changes to SetVariable to allow mathematical formulas and functions to be used in setting a variable.
For instance:
[MeasureCPU]
Measure=CPU
[MeasureCPU1]
Measure=CPU
Processor=1
[MeasureCPU2]
Measure=CPU
Processor=2
MeasureCPU returns the average of the CPU usage across all core/processors. This is same as Processor=0.
MeasureCPU1/2 returns the CPU usage of each core/processor.
-----
- Fixed the problem that the correct value is not returned if the Interface=0 in NetIn/NetOut/NetTotal measure. The cause of this problem is because the value of all filter devices is summed in Vista or newer.
-----
- Added the option (Debug) for debug logging. This must be put under [Rainmeter]-section in Rainmeter.ini.
This option specifies whether extra debugging log from Rainmeter.dll is output to Rainmeter.log.
[Rainmeter]
Debug=1
Default is 0.
-----
- Application: Fixed a wrong return value type from MainWndProc.
reading of various skin setting values.
For instance:
- OK
FontSize=10
FontSize=0
- NG (uses default value instead)
FontSize=
FontSize=ABC
FontSize=20ABC (has been parsed as "FontSize=20" until now.)
- CHANGED: FontSize=0(invisible) is now able to use in Meter=STRING.
- Fixed the problem that the window doesn't move into the screen correctly when KeepOnScreen is 1.
FIXED: Virtual Bytes usage for an x64 process with perfmon plugin does not display value greater than 4 GB (issue 113)
The numerical value greater than 32bit can be now displayed when NumOfDecimals is 0 in Meter=STRING.
Fixed the broken compatibility in Windows 2000. (AboutDialog, SysInfo)
This change brings the order of monitors close to the order of "Display Properties" due to using EnumDisplayDevices and EnumDisplaySettings instead of EnumDisplayMonitors. (If EnumDisplayDevices failed, EnumDisplayMonitors is used as before.)
-----
* Added the "Display Monitor" submenu in [Skins Menu]-[Position].
These menus convert the present position to the relative position from the specified monitor.
(But the meter window doesn't move to the specified monitor area immediately. Only converts.)
- "Use default: Primary monitor" removes the @-directive from WindowX/Y.
- @0(@1, @2, ...) adds the specified monitor number to WindowX/Y. @0 means "The Virtual Screen". (http://msdn.microsoft.com/en-us/library/dd145136%28VS.85%29.aspx)
- If "Auto-select based on window position" is checked, the WindowX and WindowY "@n" settings are made automatically based on the position of the meter's window. If a monitor is selected directly using "Display Monitor" in the Rainmeter / skin context menu, this menu is unchecked. This setting can be manually made in either the [Rainmeter] (all configs) or individual config sections of Rainmeter.ini.
AutoSelectScreen
If set to 1, the WindowX and WindowY "@n" settings are made automatically based on the position of the meter's window. If a monitor is selected directly using "Display Monitor" in the Rainmeter / skin context menu, this setting is reset to 0.
-----
* Added the variables for multiple display monitors and the virtual screen.
All X/Y positions are represented in the virtual screen coordinates.
The following variables are for the virtual screen.
#VSCREENAREAX# is the X-position of the left-side of the virtual screen.
#VSCREENAREAY# is the Y-position of the top-side of the virtual screen.
#VSCREENAREAWIDTH# is the width of the virtual screen.
#VSCREENAREAHEIGHT# is the height of the virtual screen.
The following variables are for the PRESENT monitor.
Note that these variables automatically change by the WindowX and WindowY "@n" settings. If "@n" is not set, these variables return the value of the primary monitor.
#WORKAREAX# is the X-position of the left-side of the work area.
#WORKAREAY# is the Y-position of the top-side of the work area.
#WORKAREAWIDTH# is the width of the work area.
#WORKAREAHEIGHT# is the height of the work area.
#SCREENAREAX# is the X-position of the left-side of the monitor screen.
#SCREENAREAY# is the Y-position of the top-side of the monitor screen.
#SCREENAREAWIDTH# is the width of the display resolution.
#SCREENAREAHEIGHT# is the height of the display resolution.
The following variables are for the PRIMARY monitor.
#PWORKAREAX# is the X-position of the left-side of the work area.
#PWORKAREAY# is the Y-position of the top-side of the work area.
#PWORKAREAWIDTH# is the width of the work area.
#PWORKAREAHEIGHT# is the height of the work area.
#PSCREENAREAX# is the X-position of the left-side of the monitor screen. (maybe, always 0)
#PSCREENAREAY# is the Y-position of the top-side of the monitor screen. (maybe, always 0)
#PSCREENAREAWIDTH# is the width of the display resolution.
#PSCREENAREAHEIGHT# is the height of the display resolution.
The following variables are for the SPECIFIED monitor. (@n = @1, @2, ...)
#WORKAREAX@n# is the X-position of the left-side of the work area.
#WORKAREAY@n# is the Y-position of the top-side of the work area.
#WORKAREAWIDTH@n# is the width of the work area.
#WORKAREAHEIGHT@n# is the height of the work area.
#SCREENAREAX@n# is the X-position of the left-side of the monitor screen.
#SCREENAREAY@n# is the Y-position of the top-side of the monitor screen.
#SCREENAREAWIDTH@n# is the width of the display resolution.
#SCREENAREAHEIGHT@n# is the height of the display resolution.
-----
* Other related changes:
- Fixed the problem that the primary monitor isn't recognized correctly.
- Fixed the problem that the information of the multiple display monitors is refreshed excessively.
- For DynamicVariables, when display setting or workarea size has been changed, all variables are now updated to apply changed WORKAREA/SCREENAREA variables.
- Fixed the problem that the "On Desktop" window isn't dragged correctly when the top-left corner of the virtual screen has negative coordinates.
- Changed the way to stick the "On Desktop" window. ("SysListView32/FolderView" is used instead of "Progman/Program Manager".)
-----
* Other changes:
- When the meter window is draggable and isn't dragged, LeftMouseUpAction is now executed.
- Added MouseDoubleClickAction (LeftMouseDoubleClickAction, RightMouseDoubleClickAction, MiddleMouseDoubleClickAction). If MouseDoubleClickAction is empty when mouse button is double-clicked, MouseDownAction is executed instead.
- Fixed the problem that the Meter's hit-test code checks outside the area.
- Changed the way to set the #CURRENTCONFIG#. (CMeterWindow::GetSkinName() is now used instead of parsing the path.)
!RainmeterRefreshApp
Does a full refresh of all skins and reloads the list of configs and Rainmeter.ini settings. This is the same as "Refresh All" from the system tray context menu. Is not the same as !RainmeterRefresh [config | *] as it can be used to make Rainmeter "see" a new folder added to \Skins by the user or a process. Note: This was added mostly to better support RainBrowser when a user adds a downloaded config while using RainBrowser.
Fixed: When the designation of Drive is wrong, a strange volume label is indicated.
Changed: Incorrect drive letter (e.g. not "C:\" but "C:") is now allowed.
Purpose. To allow Rainmeter to send the current config name (basically the current path but starting under "\Skins" and with no trailing "\") to external programs with !Execute. This will allow external programs to know the config name if they need to take some action and then send "Rainmeter.exe !RainmeterDeactivate" or "Rainmeter.exe!RainmeterRefresh" or other bangs that require a config name when sent to Rainmeter via the command line.
This behavior is ON by default. If you do not want the cursor change on a meter or button, set MouseActionCursor=0 on the Meter or button.
Example of disabling mouse cursor change:
[Meter]
Meter=Image
W=100
H=100
SolidColor=0,0,0,255
LeftMouseUpAction=!Execute ["http://rainmeter.net"]
MouseActionCursor=0
Note: If you have a button with a meter (either image or text) on TOP of it, you will need to set MouseActionCursor=0 on the image/text meter even if it doesn't have a mouse action, or the button will not change cursors.
- Minor changes of ConvertToXXX(): Get an appropriate buffer size to convert the string. And using [] when deleting arrays.
- Fixed a few memory leaks.
- It's now possible to send the !BANG command when all windows are "On Desktop". (Rainmeter.exe and WebParser)
MiddleMouseUpAction | MiddleMouseDownAction
2) Updated the manual entries for the middle mouse functionality
3) Added spx268's code to fix a problem with BUTTON and dynamic variables addressed in:
http://code.google.com/p/rainmeter/issues/detail?id=108
Rainy, given the "issues" listed at the bottom of this comment, I leave it to you whether to create a build using this revision or use r208 for the build. I would like to start testing MeterStyle, but there are a few more things it needs work on.
What is MeterStyle?
MeterStyle
This will allow users to create CSS-like "Styles" for meters. This means that all the parameters of a meter can be defined in the style, and then many meters can use the style to eliminate copy / pasting the same parameters over and over on multiple meters. (Examples: FontColor=, FontSize= etc.)
How do I use it?
You will create a new [Section] (as many as you want) in the .ini. The section(s) can have any name.
[MyStringStyle]
Then you will tell Rainmeter that this is a "MeterStyle" and not a measure or meter
Style=Meter
Note: The "value" of the key "Style" can be anything. It can be used to add a description of the style if you like. Style=This style is for the AccuWeather part of this skin
It is however required, both to tell Rainmeter it is not a meter or measure and to have the MeterStyle routines parse it.
Then you define parameters you want to use in the style
FontColor=#FontColor#
FontFace=TheSansBold-Caps
FontSize=11
StringEffect=SHADOW
StringStyle=BOLD
StringAlign=LEFT
AntiAlias=1
Then in any or all meters, you just use
[MeterName]
Meter=STRING (or any other meter type)
MeterStyle=MyStringStyle
None of the parameters in the style are then required to be actually in the meter(s). They are "inherited" from the MeterStyle.
Note: This works and has had preliminary testing with dynamic variables like FontColor=[MeasureName] and regular variables like FontColor=#FontColor#. It doesn't matter if the [Variables] section or the [MeasureName] measure is before or after the [StyleName] in the .ini file.
What if I want to override a MeterStyle parameter on a meter?
Sure. Just put in any parameter with a value different from the one defined in the MeterStyle and the one in the meter will take presidence. All non-defined parameters will still use the MeterStyle value.
[MeterName]
Meter=STRING
MeterStyle=MyStringStyle
FontColor=100,100,100,50
What are these "known issues" you are on about?
This is still a bit of a work in progress. Right now you cannot define X or Y in a style. You can define W and H, but NOT for a STRING meter. You cannot define a "Transformation Matrix" in a style. MattKing will be looking into these tomorrow. W and H in a string meter is our top priority. We will also look at X and Y and hope for an easy solution. Transformation Matrix may have to come later.
Added changes to RANDOM function based on Rainy's input. If there were multiple RANDOM statements in multiple CALC measure, they would all get the same random number. Fixed.
Added new RANDOM function and LocalFont to the help files and History.htm
RANDOM Function:
Returns a random number between "LowBound" and "HighBound" defined in the measure.
Sample usage:
[MeasureCalc]
Measure=Calc
Formula=(Random)
LowBound=5
HighBound=100
Added support for math formulas for the X, Y, W, H, WindowX and WindowY (e.g. "WindowX=(#WORKAREAWIDTH# / 2)"). The formula must be surrounded by parenthesis.
If there is a file called Default.ini in the program folder it will be used as the default settings file for new users.
The location of the settings file (rainmeter.ini) can be defined as a command line argument.
Added the revision number to the about dialog (use UpdateRevision.py to update it).
Added a check to the startup which verifies that the rainmeter.ini is writable.
The skin folder can be opened from the context menu.