It is currently April 18th, 2024, 4:58 am

Plugin: Chameleon

Plugins and Addons popular with the Community
User avatar
eclectic-tech
Rainmeter Sage
Posts: 5391
Joined: April 12th, 2012, 9:40 pm
Location: Cedar Point, Ohio, USA

Re: Plugin: Chameleon

Post by eclectic-tech »

Thanks for the update socks! As JSMorley pointed out, I agree that the new values returned for average and luminance could come in handy, and I really think the 'light(to dark)' and 'dark(to light)' child color options will help when applying a desired color. Looking good!
Untitled.png
Here is the code for a test skin that show all options (shown above):

Code: Select all

[Rainmeter]
AccurateText=1
DynamicWindowSize=1
BackgroundMode=2
SolidColor2=235,235,235,164
SolidColor=20,20,20,164
GradientAngle=60

; ========= Variables ==========
[Variables]


; ========= Measures ==========
[ChameleonDesktop]
Measure=Plugin
Plugin=Chameleon
Type=Desktop

[DesktopFG1]
Measure=Plugin
Plugin=Chameleon
Parent=ChameleonDesktop
Color=Foreground1

[DesktopFG2]
Measure=Plugin
Plugin=Chameleon
Parent=ChameleonDesktop
Color=Foreground2

[DesktopBG1]
Measure=Plugin
Plugin=Chameleon
Parent=ChameleonDesktop
Color=Background1

[DesktopBG2]
Measure=Plugin
Plugin=Chameleon
Parent=ChameleonDesktop
Color=Background2

[DesktopLight1]
Measure=Plugin
Plugin=Chameleon
Parent=ChameleonDesktop
Color=Light1

[DesktopLight2]
Measure=Plugin
Plugin=Chameleon
Parent=ChameleonDesktop
Color=Light2

[DesktopLight3]
Measure=Plugin
Plugin=Chameleon
Parent=ChameleonDesktop
Color=Light3

[DesktopLight4]
Measure=Plugin
Plugin=Chameleon
Parent=ChameleonDesktop
Color=Light4

[DesktopDark1]
Measure=Plugin
Plugin=Chameleon
Parent=ChameleonDesktop
Color=Dark1

[DesktopDark2]
Measure=Plugin
Plugin=Chameleon
Parent=ChameleonDesktop
Color=Dark2

[DesktopDark3]
Measure=Plugin
Plugin=Chameleon
Parent=ChameleonDesktop
Color=Dark3

[DesktopDark4]
Measure=Plugin
Plugin=Chameleon
Parent=ChameleonDesktop
Color=Dark4

[DesktopAverage]
Measure=Plugin
Plugin=Chameleon
Parent=ChameleonDesktop
Color=Average

[DesktopLuminance]
Measure=Plugin
Plugin=Chameleon
Parent=ChameleonDesktop
Color=Luminance

[mTitle]
Measure=String
String=Chameleon Colors

; ========= Meter Styles ==========
[sColorBox]
X=20
Y=4R
W=220
AntiAlias=1
Padding=0,4,20,4
DynamicVariables=1
StringAlign=Left

[sSpacer]
Y=8R
H=1
SolidColor=0,0,0,1

; ========= Meters ==========
[SpacerT]
Meter=Image
MeterStyle=sSpacer

[Title]
Meter=String
MeterStyle=sColorBox
MeasureName=mTitle
X=85
FontColor=255,255,255
StringAlign=Center
StringStyle=Bold
SolidColor=0,0,0
Padding=20,4,20,4
InlineSetting=Color | 157,198,216
InlinePattern=(?U)^.*(C)hameleon
InlineSetting2=Color | 0,178,202
InlinePattern2=(?U)^.*C(h)ameleon
InlineSetting3=Color | 125,207,182
InlinePattern3=(?U)^.*Ch(a)meleon
InlineSetting4=Color | 58,141,242
InlinePattern4=(?U)^.*Cha(m)eleon
InlineSetting5=Color | 210,178,154
InlinePattern5=(?U)^.*Cham(e)leon
InlineSetting6=Color | 227,134,143
InlinePattern6=(?U)^.*Chame(l)eon
InlineSetting7=Color | 247,146,86
InlinePattern7=(?U)^.*Chamel(e)on
InlineSetting8=Color | 234,217,139
InlinePattern8=(?U)^.*Chamele(o)n
InlineSetting9=Color | 201,110,109
InlinePattern9=(?U)^.*Chameleo(n)
DynamicVariables=1

[SpacerM1]
Meter=Image
MeterStyle=sSpacer

[Forground1]
Meter=String
MeterStyle=sColorBox
MeasureName=DesktopFG1
FontColor=[DesktopFG1]
Text=Forground1: %1

[Background1]
Meter=String
MeterStyle=sColorBox
MeasureName=DesktopBG1
X=20
FontColor=[DesktopBG1]
Text=Background1: %1

[Example1Back]
Meter=Image
X=25
Y=4R
W=120
H=30
SolidColor=[DesktopBG1]
DynamicVariables=1

[Example1Forground]
Meter=String
X=([Example1Back:X]+[Example1Back:W]/2)
Y=([Example1Back:Y]+[Example1Back:H]/2)
StringAlign=CenterCenter
FontColor=[DesktopFG1]
Text=Forground1
DynamicVariables=1
AntiAlias=1

[SpacerM2]
Meter=Image
MeterStyle=sSpacer

[Forground2]
Meter=String
MeterStyle=sColorBox
MeasureName=DesktopFG2
FontColor=[DesktopFG2]
Text=Forground2: %1

[Background2]
Meter=String
MeterStyle=sColorBox
MeasureName=DesktopBG2
FontColor=[DesktopBG2]
Text=Background2: %1

[Example2Back]
Meter=Image
X=25
Y=4R
W=120
H=30
SolidColor=[DesktopBG2]
DynamicVariables=1

[Example2Forground]
Meter=String
X=([Example2Back:X]+[Example2Back:W]/2)
Y=([Example2Back:Y]+[Example2Back:H]/2)
StringAlign=CenterCenter
FontColor=[DesktopFG2]
Text=Forground2
DynamicVariables=1
AntiAlias=1

[SpacerM3]
Meter=Image
MeterStyle=sSpacer

[Light1]
Meter=String
MeterStyle=sColorBox
MeasureName=DesktopLight1
FontColor=[DesktopLight1]
Text=Light1: %1

[Light2]
Meter=String
MeterStyle=sColorBox
MeasureName=DesktopLight2
FontColor=[DesktopLight2]
Text=Light2: %1

[Light3]
Meter=String
MeterStyle=sColorBox
MeasureName=DesktopLight3
FontColor=[DesktopLight3]
Text=Light3: %1

[Light4]
Meter=String
MeterStyle=sColorBox
MeasureName=DesktopLight4
FontColor=[DesktopLight4]
Text=Light4: %1

[ExampleLight12]
Meter=Image
X=25
Y=4R
W=60
H=30
SolidColor=[DesktopLight1]A0
SolidColor2=[DesktopLight2]A0
DynamicVariables=1

[ExampleLight34]
Meter=Image
X=R
Y=r
W=60
H=30
SolidColor=[DesktopLight3]A0
SolidColor2=[DesktopLight4]A0
DynamicVariables=1

[SpacerM4]
Meter=Image
MeterStyle=sSpacer

[Dark1]
Meter=String
MeterStyle=sColorBox
MeasureName=DesktopDark1
FontColor=[DesktopDark1]
Text=Dark1: %1

[Dark2]
Meter=String
MeterStyle=sColorBox
MeasureName=DesktopDark2
FontColor=[DesktopDark2]
Text=Dark2: %1

[Dark3]
Meter=String
MeterStyle=sColorBox
MeasureName=DesktopDark3
FontColor=[DesktopDark3]
Text=Dark3: %1

[Dark4]
Meter=String
MeterStyle=sColorBox
MeasureName=DesktopDark4
FontColor=[DesktopDark4]
Text=Dark4: %1

[ExampleDark12]
Meter=Image
X=25
Y=4R
W=60
H=30
SolidColor=[DesktopDark1]A0
SolidColor2=[DesktopDark2]A0
DynamicVariables=1

[ExampleDark34]
Meter=Image
X=R
Y=r
W=60
H=30
SolidColor=[DesktopDark3]A0
SolidColor2=[DesktopDark4]A0
DynamicVariables=1

[SpacerM5]
Meter=Image
MeterStyle=sSpacer

[Average]
Meter=String
MeterStyle=sColorBox
MeasureName=DesktopAverage
FontColor=[DesktopAverage]
Text=Average: %1

[ExampleAverage]
Meter=Image
X=25
Y=4R
W=120
H=30
SolidColor=[DesktopAverage]
DynamicVariables=1

[SpacerM6]
Meter=Image
MeterStyle=sSpacer

[Luminance]
Meter=String
MeterStyle=sColorBox
MeasureName=DesktopLuminance
NumOfDecimals=5
Text=Luminance: %1

[ExampleLuminanceBox]
Meter=Image
X=25
Y=4R
W=120
H=30
SolidColor=0,0,0,255
DynamicVariables=1

[ExampleLuminance]
Meter=Image
X=1r
Y=1r
W=118
H=28
SolidColor=([DesktopLuminance]*255),([DesktopLuminance]*255),([DesktopLuminance]*255),255
DynamicVariables=1

[SpacerB]
Meter=Image
MeterStyle=sSpacer

You do not have the required permissions to view the files attached to this post.
User avatar
jsmorley
Developer
Posts: 22629
Joined: April 19th, 2009, 11:02 pm
Location: Fort Hunt, Virginia, USA

Re: Plugin: Chameleon

Post by jsmorley »

One thing to be mindful of with this plugin, is that it takes a bit of time to "sample" a desktop wallpaper. If you set an overall Update rate on the skin that is very low, and end up asking the plugin to sample the wallpaper and return values faster than it really can, an inevitable crash of Rainmeter will result.

Be sure, if you have a low Update rate on the skin for other purposes, that you set an UpdateDivider on the "parent" Chameleon measure. I think it is safest to stay more or less at once-a-second for this measure.
sgtevmckay

Re: Plugin: Chameleon

Post by sgtevmckay »

This may very much solve an issue I have been dealing with for years, and having to create numerous skins to account for light and dark backgrounds.

will experiment some and let you know.
User avatar
Socks the Fox
Posts: 104
Joined: August 25th, 2015, 6:40 pm

Re: Plugin: Chameleon

Post by Socks the Fox »

@js: Odd, it shouldn't be sampling every update, only when it detects that the image has actually changed (either the "Last Modified" time changes or it's told to sample from a different file). The rest of the time it should just return cached values. I've recently been experimenting with using a lua script to cross-fade colors and have the update rate set to 25ms, and it works fine...

There may be a memory leak though as I've just noticed my Rainmeter instance using over 5GB of RAM O.O I'll definitely be looking in to that. Perhaps that's causing the crashes?
Author of Chameleon :: Like my plugin? Consider donating! I don't need much :3
User avatar
jsmorley
Developer
Posts: 22629
Joined: April 19th, 2009, 11:02 pm
Location: Fort Hunt, Virginia, USA

Re: Plugin: Chameleon

Post by jsmorley »

Socks the Fox wrote:@js: Odd, it shouldn't be sampling every update, only when it detects that the image has actually changed (either the "Last Modified" time changes or it's told to sample from a different file). The rest of the time it should just return cached values. I've recently been experimenting with using a lua script to cross-fade colors and have the update rate set to 25ms, and it works fine...

There may be a memory leak though as I've just noticed my Rainmeter instance using over 5GB of RAM O.O I'll definitely be looking in to that. Perhaps that's causing the crashes?
Not sure. I tried to add it to a skin I recently created that uses the ActionTimer plugin to animate a meter transition, which works best with a low (I was using Update=50) skin Update. If I added one Chameleon parent and four (2 light and 2 dark) child measures to the skin, it would cause certain crashes. Even if I added UpdateDivider=20 to the parent, it still would crash, just a bit less often. I'm wondering if perhaps there is an issue when you "refresh" a skin using Chameleon. I wonder if perhaps there is some "cleanup" step missing, and the plugin is not cleanly being "destroyed" and "re-created" in memory when you refresh a skin.
User avatar
jsmorley
Developer
Posts: 22629
Joined: April 19th, 2009, 11:02 pm
Location: Fort Hunt, Virginia, USA

Re: Plugin: Chameleon

Post by jsmorley »

Hmm.. I wonder if I had something else going on unrelated to this. I re-created the skin that was crashing all the time, and now at least so far, it is working ok.

I'll let this run for a while and see what if anything goes sideways...

Code: Select all

[Rainmeter]
Update=50
DynamicWindowSize=1
AccurateText=1
SkinHeight=45
OnRefreshAction=[!SetVariable CurrentHours "[MeasureHours]"][!SetVariable CurrentMinutes "[MeasureMinutes]"][!SetVariable CurrentSeconds "[MeasureSeconds]"][!UpdateMeter *][!Redraw]

[Variables]
CurrentHoursY=2
NewHoursY=-40
CurrentMinutesY=2
NewMinutesY=-40
CurrentSecondsY=2
NewSecondsY=-40
U=[!UpdateMeasureGroup Sliders][!UpdateMeterGroup Numbers][!Redraw]

[ChameleonDesktop]
Measure=Plugin
Plugin=Chameleon
Type=Desktop

[DesktopBG1]
Measure=Plugin
Plugin=Chameleon
Parent=ChameleonDesktop
Format=Dec
Color=Background1

[DesktopBG2]
Measure=Plugin
Plugin=Chameleon
Parent=ChameleonDesktop
Format=Dec
Color=Background2

[DesktopFG1]
Measure=Plugin
Plugin=Chameleon
Parent=ChameleonDesktop
Format=Dec
Color=Foreground1

[MeasureHours]
Measure=Time
Format=%I
OnChangeAction=[!CommandMeasure HoursSlide "Execute 1"]

[MeasureMinutes]
Measure=Time
Format=%M
OnChangeAction=[!CommandMeasure MinutesSlide "Execute 1"]

[MeasureSeconds]
Measure=Time
Format=%S
OnChangeAction=[!CommandMeasure SecondsSlide "Execute 1"]

[HoursSlide]
Measure=Plugin
Plugin=ActionTimer
Group=Sliders
IgnoreWarnings=1
ActionList1=SetThem | Wait 1 | Repeat SlideThem, 20, 21 | Wait 1| SwapThem
SetThem=[!SetVariable CurrentHoursY "2"][!SetVariable NewHoursY "-40"]#U#
SlideThem=[!SetVariable CurrentHoursY "(Clamp(#CurrentHoursY#+2,2,45))"][!SetVariable NewHoursY "(Clamp(#NewHoursY#+2,-40,2))"]#U#
SwapThem=[!SetVariable CurrentHoursY "2"][!SetVariable NewHoursY "-40][!SetVariable CurrentHours "[MeasureHours]"]#U#
DynamicVariables=1

[MinutesSlide]
Measure=Plugin
Plugin=ActionTimer
Group=Sliders
IgnoreWarnings=1
ActionList1=SetThem | Wait 1 | Repeat SlideThem, 20, 21 | Wait 1| SwapThem
SetThem=[!SetVariable CurrentMinutesY "2"][!SetVariable NewMinutesY "-40"]#U#
SlideThem=[!SetVariable CurrentMinutesY "(Clamp(#CurrentMinutesY#+2,2,45))"][!SetVariable NewMinutesY "(Clamp(#NewMinutesY#+2,-40,2))"]#U#
SwapThem=[!SetVariable CurrentMinutesY "2"][!SetVariable NewMinutesY "-40][!SetVariable CurrentMinutes "[MeasureMinutes]"]#U#
DynamicVariables=1

[SecondsSlide]
Measure=Plugin
Plugin=ActionTimer
Group=Sliders
IgnoreWarnings=1
ActionList1=SetThem | Wait 1 | Repeat SlideThem, 20, 21 | Wait 1| SwapThem
SetThem=[!SetVariable CurrentSecondsY "2"][!SetVariable NewSecondsY "-40"]#U#
SlideThem=[!SetVariable CurrentSecondsY "(Clamp(#CurrentSecondsY#+2,2,45))"][!SetVariable NewSecondsY "(Clamp(#NewSecondsY#+2,-40,2))"]#U#
SwapThem=[!SetVariable CurrentSecondsY "2"][!SetVariable NewSecondsY "-40][!SetVariable CurrentSeconds "[MeasureSeconds]"]#U#
DynamicVariables=1

[MeterNewHours]
Meter=String
Group=Numbers
MeasureName=MeasureHours
W=30
H=32
X=22
Y=#NewHoursY#
StringAlign=Center
FontFace=Fira Sans
FontSize=20
FontColor=[DesktopFG1]
SolidColor=[DesktopBG2]
Padding=5,5,5,5
AntiAlias=1
UpdateDivider=-1
DynamicVariables=1

[MeterCurrentHours]
Meter=String
Group=Numbers
W=30
H=32
X=22
Y=#CurrentHoursY#
StringAlign=Center
FontFace=Fira Sans
FontSize=20
FontColor=[DesktopFG1]
SolidColor=[DesktopBG2]
Padding=5,5,5,5
AntiAlias=1
Text=#CurrentHours#
UpdateDivider=-1
DynamicVariables=1

[MeterNewMinutes]
Meter=String
Group=Numbers
MeasureName=MeasureMinutes
W=30
X=64
Y=#NewMinutesY#
H=32
StringAlign=Center
FontFace=Fira Sans
FontSize=20
FontColor=[DesktopFG1]
SolidColor=[DesktopBG2]
Padding=5,5,5,5
AntiAlias=1
UpdateDivider=-1
DynamicVariables=1

[MeterCurrentMinutes]
Meter=String
Group=Numbers
MeasureName=MeasureMinutes
W=30
X=64
Y=#CurrentMinutesY#
H=32
StringAlign=Center
FontFace=Fira Sans
FontSize=20
FontColor=[DesktopFG1]
SolidColor=[DesktopBG2]
Padding=5,5,5,5
AntiAlias=1
Text=#CurrentMinutes#
UpdateDivider=-1
DynamicVariables=1

[MeterNewSeconds]
Meter=String
Group=Numbers
MeasureName=MeasureSeconds
W=30
X=106
Y=#NewSecondsY#
H=32
StringAlign=Center
FontFace=Fira Sans
FontSize=20
FontColor=[DesktopFG1]
SolidColor=[DesktopBG2]
Padding=5,5,5,5
AntiAlias=1
UpdateDivider=-1
DynamicVariables=1

[MeterCurrentSeconds]
Meter=String
Group=Numbers
W=30
X=106
Y=#CurrentSecondsY#
H=32
StringAlign=Center
FontFace=Fira Sans
FontSize=20
FontColor=[DesktopFG1]
SolidColor=[DesktopBG2]
Padding=5,5,5,5
AntiAlias=1
Text=#CurrentSeconds#
UpdateDivider=-1
DynamicVariables=1

[MeterTopLine]
Meter=Image
X=0
Y=0
H=2
W=128
SolidColor=[DesktopBG1]
UpdateDivider=-1
DynamicVariables=1

[MeterLeftLine]
Meter=Image
X=0
Y=0
H=43
W=2
SolidColor=[DesktopBG1]
UpdateDivider=-1
DynamicVariables=1

[MeterMidLine1]
Meter=Image
X=42
Y=2
W=2
H=41
SolidColor=[DesktopBG1]
UpdateDivider=-1
DynamicVariables=1

[MeterMidLine2]
Meter=Image
X=84
Y=2
W=2
H=41
SolidColor=[DesktopBG1]
UpdateDivider=-1
DynamicVariables=1

[MeterRightLine]
Meter=Image
X=126
Y=0
H=43
W=2
SolidColor=[DesktopBG1]
UpdateDivider=-1
DynamicVariables=1

[MeterBottomLine]
Meter=Image
X=0
Y=43
H=2
W=128
SolidColor=[DesktopBG1]
UpdateDivider=-1
DynamicVariables=1
test.gif
Edit: Yeah, if I let this run for a while, Rainmeter inevitably crashes. I'm hesitant to blame the combination of ActionTimer and Chameleon, particularly since as you say, Chameleon isn't doing much but checking file attributes of the wallpaper file (that is what you said right?) on each Update, and ActionTimer is really only triggered once a second by the OnChangeAction on the Time measures. The low Update is "checking" the time really often, in order to have maximum "accuracy" in detecting the change of the time value, but actual actions are only taken once a second, when the time in fact changes.

What this skin does do is update the meters, the ones using the Chameleon measures as dynamic [SectionVariables] for the colors, a bunch of times, and really, really fast, when the ActionTimer plugin is triggered by the change in for instance seconds. So once a second, for about 1/2 a second, it is really hammering the Chameleon measure to get its current value. Not sure what role that plays, as just getting the measure value should have nothing at all to do with the plugin. A measure is a measure is a measure..

However, this particular skin is very unstable, and pretty much everything else I have done in a more "stand-alone" way with Chameleon has seemed ok. Not sure where this leads...
You do not have the required permissions to view the files attached to this post.
User avatar
jsmorley
Developer
Posts: 22629
Joined: April 19th, 2009, 11:02 pm
Location: Fort Hunt, Virginia, USA

Re: Plugin: Chameleon

Post by jsmorley »

Source
Rainmeter

Summary
Stopped working

Date
‎11/‎30/‎2015 2:18 PM

Status
Report sent

Description
Faulting Application Path: C:\Program Files\Rainmeter\Rainmeter.exe

Problem signature
Problem Event Name: APPCRASH
Application Name: Rainmeter.exe
Application Version: 3.3.0.2480
Application Timestamp: 5655dca0
Fault Module Name: Chameleon.DLL
Fault Module Version: 1.3.0.0
Fault Module Timestamp: 564ce881
Exception Code: c0000005
Exception Offset: 000000000000f154
OS Version: 10.0.10586.2.0.0.256.48
Locale ID: 1033
Additional Information 1: f591
Additional Information 2: f5911315b7b11c2b1c0a164f510c88c5
Additional Information 3: c83b
Additional Information 4: c83b48ef15e2f0738b08c2b9750be0f7

Extra information about the problem
Bucket ID: 6f5aae2b0dcdd4a72bedf06c4086da6d (120364980937)
User avatar
Socks the Fox
Posts: 104
Joined: August 25th, 2015, 6:40 pm

Re: Plugin: Chameleon

Post by Socks the Fox »

This is going to drive me nuts! I can't figure out why it's doing this. I'm willing to bet the memory leak on my computer and the crash on yours are related, but my attempt to figure it out has failed (it doesn't seem to be a true leak, as the CRT debug function doesn't complain when Chameleon.dll is unloaded).

I hate to ask this, but since it's not actually crashing on my computer I need to know exactly which line it's failing on. Could you download the source and build a debug version of the DLL, and run Rainmeter through the VS debugger? That should give us an exact stack trace of what's screwing up where.
Author of Chameleon :: Like my plugin? Consider donating! I don't need much :3
User avatar
jsmorley
Developer
Posts: 22629
Joined: April 19th, 2009, 11:02 pm
Location: Fort Hunt, Virginia, USA

Re: Plugin: Chameleon

Post by jsmorley »

Socks the Fox wrote:This is going to drive me nuts! I can't figure out why it's doing this. I'm willing to bet the memory leak on my computer and the crash on yours are related, but my attempt to figure it out has failed (it doesn't seem to be a true leak, as the CRT debug function doesn't complain when Chameleon.dll is unloaded).

I hate to ask this, but since it's not actually crashing on my computer I need to know exactly which line it's failing on. Could you download the source and build a debug version of the DLL, and run Rainmeter through the VS debugger? That should give us an exact stack trace of what's screwing up where.
I'm not sure I have the expertise to get your code into the Rainmeter project in such a way that I can run it in a debug fashion inside VS. While I can do that kind of testing on the core Rainmeter code, I'm not sure how to accomplish that with a "plugin" that is run as an externally compiled .dll and not directly run from code inside Rainmeter.exe. In other words, in our project you don't "run" a plugin. I'm pretty sure that if I run Rainmeter in debug mode in VS, when it crashes it will only tell me where/when "Rainmeter" crashed, and the answer will be "when Chameleon.dll crashed me..." There is a way to do this, but I'm afraid I'm probably not the right resource. I'm just not strong enough in C++ and Visual Studio.

Maybe Brian or Poiru can take a look at this at some point, but I can't speak for them or their time constraints.
User avatar
Socks the Fox
Posts: 104
Joined: August 25th, 2015, 6:40 pm

Re: Plugin: Chameleon

Post by Socks the Fox »

It's actually pretty easy :3 Right now on Github the plugin's "rainmeter" project in the Chameleon solution is set up so that if you right-click it in the project list and select "Debug->Start New Instance" it'll launch C:\Program Files\Rainmeter\Rainmeter.exe via the Visual Studio debugger. All you need to do is have Rainmeter use the Debug version of the plugin instead of the Release one (which I do by copying the plugin DLL into the Rainmeter plugins directory like I had people doing early on, you'd probably need to overwrite the one that Rainmeter copies to wherever it puts the one it gets from the skin). You don't even need a debug version of Rainmeter (though it will definitely help), breakpoints in Chameleon still work.

If you need to change it, you can go in to the project's properties and set the "Command" setting under the "Debugging" config property.

Edit: Don't forget to close down existing instances of Rainmeter before starting a new instance or wonky things might happen...
Author of Chameleon :: Like my plugin? Consider donating! I don't need much :3