Added /Build

This commit is contained in:
Birunthan Mohanathas
2012-03-14 21:18:19 +02:00
parent 8e4d37a8ea
commit 7a0ec6c129
104 changed files with 5889 additions and 8 deletions

167
Build/Build.bat Normal file
View File

@ -0,0 +1,167 @@
@echo off
setlocal EnableDelayedExpansion
set VCVARSALL=%PROGRAMFILES%\Microsoft Visual Studio 10.0\VC\vcvarsall.bat
set MAKENSIS=%PROGRAMFILES%\NSIS\MakeNSIS.exe
set SUBWCREV=%PROGRAMFILES%\TortoiseSVN\bin\SubWCRev.exe
set GIT=%PROGRAMFILES%\Git\bin\git.exe
set VERSION=2.3.0
set REVISION=1
if "%1" == "BUILDVERSION" goto BUILDVERSION
echo Rainmeter Build
echo ----------------------------------------------
echo.
if exist "%VCVARSALL%" goto VCFOUND
set VCVARSALL=%VCVARSALL:Program Files\=Program Files (x86)\%
if not exist "%VCVARSALL%" echo ERROR: vcvarsall.bat not found & goto END
:VCFOUND
call "%VCVARSALL%" x86 > nul
if "%1" == "BUILDLANGUAGES" goto BUILDLANGUAGES
if exist "%MAKENSIS%" goto NSISFOUND
set MAKENSIS=%MAKENSIS:Program Files\=Program Files (x86)\%
if not exist "%MAKENSIS%" echo ERROR: MakeNSIS.exe not found & goto END
:NSISFOUND
set ISBETA=true
if "%1" == "RELEASE" (
set ISBETA=false
)
:BUILDVERSION
if exist "..\.svn" goto SVN
if exist "..\..\.svn" goto SVN
if not exist "..\.git" goto UPDATEVERSION
:: git
if exist "%GIT%" goto GITFOUND
set GIT=%GIT:Program Files\=Program Files (x86)\%
if not exist "%GIT%" echo ERROR: git.exe not found & goto END
:GITFOUND
set /a REVISION=0
for /f "usebackq delims= " %%G in (`"%GIT%" rev-list --all`) do set /a REVISION+=1
goto UPDATEVERSION
:: svn
:SVN
if exist "%SUBWCREV%" goto SUBWCREVFOUND
set SUBWCREV=%SUBWCREV:Program Files\=Program Files (x86)\%
if not exist "%SUBWCREV%" echo ERROR: SubWCRev.exe (TortoiseSVN) not found & goto END
:SUBWCREVFOUND
for /f "usebackq tokens=5 delims= " %%G in (`"%SUBWCREV%" ..\`) do set REVISION=%%G
:UPDATEVERSION
:: Update Version.h
> "..\Version.h" echo #pragma once
>>"..\Version.h" echo #define FILEVER %VERSION:~0,1%,%VERSION:~2,1%,%VERSION:~4,1%,%REVISION%
>>"..\Version.h" echo #define PRODUCTVER FILEVER
>>"..\Version.h" echo #define STRFILEVER "%VERSION%.%REVISION%"
>>"..\Version.h" echo #define STRPRODUCTVER STRFILEVER
>>"..\Version.h" echo #define APPVERSION L"%VERSION%"
>>"..\Version.h" echo #define RAINMETER_VERSION ((%VERSION:~0,1% * 1000000) + (%VERSION:~2,1% * 1000) + %VERSION:~4,1%)
>>"..\Version.h" echo const int revision_number = %REVISION%;
>>"..\Version.h" echo const bool revision_beta = %ISBETA%;
:: Update Version.cs
> "..\Version.cs" echo namespace Rainmeter
>>"..\Version.cs" echo {
>>"..\Version.cs" echo public class Version
>>"..\Version.cs" echo {
>>"..\Version.cs" echo #if X64
>>"..\Version.cs" echo public const string Informational = "%VERSION%.%REVISION% (64-bit)";
>>"..\Version.cs" echo #else
>>"..\Version.cs" echo public const string Informational = "%VERSION%.%REVISION% (32-bit)";
>>"..\Version.cs" echo #endif
>>"..\Version.cs" echo }
>>"..\Version.cs" echo }
if "%1" == "BUILDVERSION" goto :eof
echo * Updated Version.h
:: Set vcbuild environment variables and begin build
echo * Starting build for %VERSION% r%REVISION%
:: Build Library
echo * Building 32-bit projects
"msbuild.exe" /t:rebuild /p:Configuration=Release;Platform=Win32 /m ..\Rainmeter.sln > "BuildLog.txt"
if not %ERRORLEVEL% == 0 echo ERROR %ERRORLEVEL%: Build failed & goto END
echo * Building 64-bit projects
"msbuild.exe" /t:rebuild /p:Configuration=Release;Platform=x64 /m ..\Rainmeter.sln > "BuildLog.txt"
if not %ERRORLEVEL% == 0 echo ERROR %ERRORLEVEL%: Build failed & goto END
:BUILDLANGUAGES
echo * Building languages
:: Build all language libraries
>".\Installer\Languages.nsh" echo.
for /f "tokens=1,2,3 delims=," %%a in (..\Language\List) do (
> "..\Language\Language.rc" echo #include "%%a.h"
>>"..\Language\Language.rc" echo #include "Resource.rc"
>>".\Installer\Languages.nsh" echo ^^!insertmacro IncludeLanguage "%%b" "%%a"
"msbuild.exe" /t:Language /p:Configuration=Release;Platform=Win32;TargetName=%%c ..\Rainmeter.sln > "BuildLog.txt"
if not %ERRORLEVEL% == 0 echo ERROR: Building language %%a failed & goto END
)
:: Restore English
echo #include "English.h"> "..\Language\Language.rc"
echo #include "Resource.rc">> "..\Language\Language.rc"
if "%1" == "BUILDLANGUAGES" (
xcopy /Q /S /Y ..\TestBench\x32\Release\Languages\*.dll ..\TestBench\x64\Release\Languages\ > nul
xcopy /Q /S /Y ..\TestBench\x32\Release\Languages\*.dll ..\TestBench\x32\Debug\Languages\ > nul
xcopy /Q /S /Y ..\TestBench\x32\Release\Languages\*.dll ..\TestBench\x64\Debug\Languages\ > nul
if exist "BuildLog.txt" del "BuildLog.txt"
goto END
)
:: Sign binaries
if exist "Certificate.bat" (
call "Certificate.bat" > nul
)
set SIGNTOOL="signtool.exe" sign /t http://time.certum.pl /f "%CERTFILE%" /p "%CERTKEY%"
if not "%CERTFILE%" == "" (
echo * Signing binaries
for %%Z in (Rainmeter.dll Rainmeter.exe SkinInstaller.exe) do (
%SIGNTOOL% ..\TestBench\x32\Release\%%Z > BuildLog.txt
if not %ERRORLEVEL% == 0 echo ERROR %ERRORLEVEL%: Signing x32\%%Z failed & goto END
%SIGNTOOL% ..\TestBench\x64\Release\%%Z > BuildLog.txt
if not %ERRORLEVEL% == 0 echo ERROR %ERRORLEVEL%: Signing x64\%%Z failed & goto END
)
)
:: Build installer
echo * Building installer
if "%1" == "RELEASE" (
"%MAKENSIS%" /DREV="%REVISION%" /DVER="%VERSION:~0,1%.%VERSION:~2,1%" .\Installer\Installer.nsi > "BuildLog.txt"
) else (
"%MAKENSIS%" /DBETA /DREV="%REVISION%" /DVER="%VERSION:~0,1%.%VERSION:~2,1%" .\Installer\Installer.nsi > "BuildLog.txt"
)
if not %ERRORLEVEL% == 0 echo ERROR %ERRORLEVEL%: Building installer failed & goto END
:: Sign installer
if not "%CERTFILE%" == "" (
echo * Signing installer
if "%1" == "RELEASE" (
%SIGNTOOL% Rainmeter-%VERSION:~0,1%.%VERSION:~2,1%.exe > BuildLog.txt
) else (
%SIGNTOOL% Rainmeter-%VERSION:~0,1%.%VERSION:~2,1%-r%REVISION%-beta.exe > BuildLog.txt
)
if not %ERRORLEVEL% == 0 echo ERROR %ERRORLEVEL%: Signing installer failed & goto END
)
:: If we got here, build was successful so delete BuildLog.txt
if exist "BuildLog.txt" del "BuildLog.txt"
echo * Build complete.
:END
if exist ".\Installer\Languages.nsh" del ".\Installer\Languages.nsh"
echo.
pause

2
Build/BuildLanguages.bat Normal file
View File

@ -0,0 +1,2 @@
@echo off
"Build.bat" BUILDLANGUAGES

242
Build/BuildLog.txt Normal file
View File

@ -0,0 +1,242 @@
Microsoft (R) Build Engine version 4.0.30319.17379
[Microsoft .NET Framework, version 4.0.30319.17379]
Copyright (C) Microsoft Corporation. All rights reserved.
Building the projects in this solution one at a time. To enable parallel build, please add the "/m" switch.
Build started 26/03/2012 17:40:00.
Project "D:\gittest\Rainmeter.sln" on node 1 (rebuild target(s)).
ValidateSolutionConfiguration:
Building solution configuration "Release|Win32".
Project "D:\gittest\Rainmeter.sln" (1) is building "D:\gittest\Application\Application.vcxproj" (2) on node 1 (Rebuild target(s)).
D:\gittest\Application\Application.vcxproj(24,3): error MSB4019: The imported project "C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\v110\Microsoft.Cpp.Default.props" was not found. Confirm that the path in the <Import> declaration is correct, and that the file exists on disk.
Done Building Project "D:\gittest\Application\Application.vcxproj" (Rebuild target(s)) -- FAILED.
Project "D:\gittest\Rainmeter.sln" (1) is building "D:\gittest\Language\Language.vcxproj" (3) on node 1 (Rebuild target(s)).
D:\gittest\Language\Language.vcxproj(25,3): error MSB4019: The imported project "C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\v110\Microsoft.Cpp.Default.props" was not found. Confirm that the path in the <Import> declaration is correct, and that the file exists on disk.
Done Building Project "D:\gittest\Language\Language.vcxproj" (Rebuild target(s)) -- FAILED.
Project "D:\gittest\Rainmeter.sln" (1) is building "D:\gittest\SkinInstaller\SkinInstaller.vcxproj" (4) on node 1 (Rebuild target(s)).
D:\gittest\SkinInstaller\SkinInstaller.vcxproj(25,3): error MSB4019: The imported project "C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\v110\Microsoft.Cpp.Default.props" was not found. Confirm that the path in the <Import> declaration is correct, and that the file exists on disk.
Done Building Project "D:\gittest\SkinInstaller\SkinInstaller.vcxproj" (Rebuild target(s)) -- FAILED.
Project "D:\gittest\Rainmeter.sln" (1) is building "D:\gittest\Plugins\API\DllExporter\DllExporter.csproj" (5) on node 1 (Rebuild target(s)).
CoreClean:
Deleting file "D:\gittest\Plugins\API\DllExporter\obj\x86\Release\DllExporter.csprojResolveAssemblyReference.cache".
Deleting file "D:\gittest\Plugins\API\DllExporter\obj\x86\Release\DllExporter.exe".
CoreCompile:
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Csc.exe /noconfig /nowarn:1607,1701,1702 /nostdlib+ /platform:x86 /errorreport:prompt /warn:4 /define:TRACE /highentropyva- /reference:C:\Windows\Microsoft.NET\Framework\v2.0.50727\mscorlib.dll /reference:C:\Windows\Microsoft.NET\Framework64\v2.0.50727\System.Data.dll /reference:C:\Windows\Microsoft.NET\Framework64\v2.0.50727\System.dll /reference:C:\Windows\Microsoft.NET\Framework64\v2.0.50727\System.Xml.dll /debug- /filealign:512 /optimize+ /out:obj\x86\Release\DllExporter.exe /target:exe /utf8output Program.cs AssemblyInfo.cs
CopyFilesToOutputDirectory:
Copying file from "obj\x86\Release\DllExporter.exe" to "bin\Release\DllExporter.exe".
DllExporter -> D:\gittest\Plugins\API\DllExporter\bin\Release\DllExporter.exe
PostBuildEvent:
move "D:\gittest\Plugins\API\DllExporter\bin\Release\DllExporter.exe" "D:\gittest\Plugins\API\DllExporter.exe"
1 file(s) moved.
Done Building Project "D:\gittest\Plugins\API\DllExporter\DllExporter.csproj" (Rebuild target(s)).
Project "D:\gittest\Rainmeter.sln" (1) is building "D:\gittest\Plugins\PluginAdvancedCPU\PluginAdvancedCPU.vcxproj" (6) on node 1 (Rebuild target(s)).
D:\gittest\Plugins\PluginAdvancedCPU\PluginAdvancedCPU.vcxproj(24,3): error MSB4019: The imported project "C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\v110\Microsoft.Cpp.Default.props" was not found. Confirm that the path in the <Import> declaration is correct, and that the file exists on disk.
Done Building Project "D:\gittest\Plugins\PluginAdvancedCPU\PluginAdvancedCPU.vcxproj" (Rebuild target(s)) -- FAILED.
Project "D:\gittest\Rainmeter.sln" (1) is building "D:\gittest\Plugins\PluginCoreTemp\PluginCoreTemp.vcxproj" (7) on node 1 (Rebuild target(s)).
D:\gittest\Plugins\PluginCoreTemp\PluginCoreTemp.vcxproj(25,3): error MSB4019: The imported project "C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\v110\Microsoft.Cpp.Default.props" was not found. Confirm that the path in the <Import> declaration is correct, and that the file exists on disk.
Done Building Project "D:\gittest\Plugins\PluginCoreTemp\PluginCoreTemp.vcxproj" (Rebuild target(s)) -- FAILED.
Project "D:\gittest\Rainmeter.sln" (1) is building "D:\gittest\Plugins\PluginFolderInfo\PluginFolderInfo.vcxproj" (8) on node 1 (Rebuild target(s)).
D:\gittest\Plugins\PluginFolderInfo\PluginFolderInfo.vcxproj(24,3): error MSB4019: The imported project "C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\v110\Microsoft.Cpp.Default.props" was not found. Confirm that the path in the <Import> declaration is correct, and that the file exists on disk.
Done Building Project "D:\gittest\Plugins\PluginFolderInfo\PluginFolderInfo.vcxproj" (Rebuild target(s)) -- FAILED.
Project "D:\gittest\Rainmeter.sln" (1) is building "D:\gittest\Plugins\PluginInputText\PluginInputText.csproj" (9) on node 1 (Rebuild target(s)).
CoreClean:
Deleting file "D:\gittest\TestBench\x32\Release\Plugins\InputText.dll".
Deleting file "D:\gittest\Plugins\PluginInputText\obj\x86\Release\PluginInputText.csprojResolveAssemblyReference.cache".
Deleting file "D:\gittest\Plugins\PluginInputText\obj\x86\Release\InputText.InputBox.resources".
Deleting file "D:\gittest\Plugins\PluginInputText\obj\x86\Release\PluginInputText.csproj.GenerateResource.Cache".
Deleting file "D:\gittest\Plugins\PluginInputText\obj\x86\Release\InputText.dll".
CoreResGen:
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\ResGen.exe /useSourcePath /r:C:\Windows\Microsoft.NET\Framework\v2.0.50727\mscorlib.dll /r:C:\Windows\Microsoft.NET\Framework64\v2.0.50727\System.dll /r:C:\Windows\Microsoft.NET\Framework64\v2.0.50727\System.Drawing.dll /r:C:\Windows\Microsoft.NET\Framework64\v2.0.50727\System.Windows.Forms.dll /compile InputBox.resx,obj\x86\Release\InputText.InputBox.resources
CoreCompile:
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Csc.exe /noconfig /unsafe+ /nowarn:1607,1701,1702 /nostdlib+ /platform:x86 /errorreport:prompt /warn:4 /define:TRACE /highentropyva- /reference:C:\Windows\Microsoft.NET\Framework\v2.0.50727\mscorlib.dll /reference:C:\Windows\Microsoft.NET\Framework64\v2.0.50727\System.dll /reference:C:\Windows\Microsoft.NET\Framework64\v2.0.50727\System.Drawing.dll /reference:C:\Windows\Microsoft.NET\Framework64\v2.0.50727\System.Windows.Forms.dll /debug- /filealign:512 /optimize+ /out:obj\x86\Release\InputText.dll /resource:obj\x86\Release\InputText.InputBox.resources /target:library /utf8output AssemblyInfo.cs Main.cs PluginCode.cs Rainmeter.cs InputBox.cs InputBox.designer.cs D:\gittest\Version.cs
CopyFilesToOutputDirectory:
Copying file from "obj\x86\Release\InputText.dll" to "D:\gittest\TestBench\x32\Release\Plugins\InputText.dll".
PluginInputText -> D:\gittest\TestBench\x32\Release\Plugins\InputText.dll
PostBuildEvent:
"D:\gittest\Plugins\API\DllExporter.exe" "Release" "x86" "D:\gittest\TestBench\x32\Release\Plugins\\" "InputText.dll" "C:\Windows\Microsoft.NET\Framework64\v2.0.50727\ilasm.exe" "bin\ildasm.exe"
Unhandled Exception: System.ComponentModel.Win32Exception: The system cannot find the file specified
at System.Diagnostics.Process.StartWithCreateProcess(ProcessStartInfo startInfo)
at System.Diagnostics.Process.Start()
at DllExporter.Program.Main(String[] args)
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Microsoft.Common.targets(4209,5): error MSB3073: The command ""D:\gittest\Plugins\API\DllExporter.exe" "Release" "x86" "D:\gittest\TestBench\x32\Release\Plugins\\" "InputText.dll" "C:\Windows\Microsoft.NET\Framework64\v2.0.50727\ilasm.exe" "bin\ildasm.exe"" exited with code -532459699. [D:\gittest\Plugins\PluginInputText\PluginInputText.csproj]
Done Building Project "D:\gittest\Plugins\PluginInputText\PluginInputText.csproj" (Rebuild target(s)) -- FAILED.
Project "D:\gittest\Rainmeter.sln" (1) is building "D:\gittest\Plugins\PluginiTunes\PluginiTunes.vcxproj" (10) on node 1 (Rebuild target(s)).
D:\gittest\Plugins\PluginiTunes\PluginiTunes.vcxproj(25,3): error MSB4019: The imported project "C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\v110\Microsoft.Cpp.Default.props" was not found. Confirm that the path in the <Import> declaration is correct, and that the file exists on disk.
Done Building Project "D:\gittest\Plugins\PluginiTunes\PluginiTunes.vcxproj" (Rebuild target(s)) -- FAILED.
Project "D:\gittest\Rainmeter.sln" (1) is building "D:\gittest\Plugins\PluginMediaKey\PluginMediaKey.vcxproj" (11) on node 1 (Rebuild target(s)).
D:\gittest\Plugins\PluginMediaKey\PluginMediaKey.vcxproj(25,3): error MSB4019: The imported project "C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\v110\Microsoft.Cpp.Default.props" was not found. Confirm that the path in the <Import> declaration is correct, and that the file exists on disk.
Done Building Project "D:\gittest\Plugins\PluginMediaKey\PluginMediaKey.vcxproj" (Rebuild target(s)) -- FAILED.
Project "D:\gittest\Rainmeter.sln" (1) is building "D:\gittest\Plugins\PluginNowPlaying\PluginNowPlaying.vcxproj" (12) on node 1 (Rebuild target(s)).
D:\gittest\Plugins\PluginNowPlaying\PluginNowPlaying.vcxproj(25,3): error MSB4019: The imported project "C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\v110\Microsoft.Cpp.Default.props" was not found. Confirm that the path in the <Import> declaration is correct, and that the file exists on disk.
Done Building Project "D:\gittest\Plugins\PluginNowPlaying\PluginNowPlaying.vcxproj" (Rebuild target(s)) -- FAILED.
Project "D:\gittest\Rainmeter.sln" (1) is building "D:\gittest\Plugins\PluginPerfMon\PluginPerfMon.vcxproj" (13) on node 1 (Rebuild target(s)).
D:\gittest\Plugins\PluginPerfMon\PluginPerfMon.vcxproj(24,3): error MSB4019: The imported project "C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\v110\Microsoft.Cpp.Default.props" was not found. Confirm that the path in the <Import> declaration is correct, and that the file exists on disk.
Done Building Project "D:\gittest\Plugins\PluginPerfMon\PluginPerfMon.vcxproj" (Rebuild target(s)) -- FAILED.
Project "D:\gittest\Rainmeter.sln" (1) is building "D:\gittest\Plugins\PluginPing\PluginPing.vcxproj" (14) on node 1 (Rebuild target(s)).
D:\gittest\Plugins\PluginPing\PluginPing.vcxproj(24,3): error MSB4019: The imported project "C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\v110\Microsoft.Cpp.Default.props" was not found. Confirm that the path in the <Import> declaration is correct, and that the file exists on disk.
Done Building Project "D:\gittest\Plugins\PluginPing\PluginPing.vcxproj" (Rebuild target(s)) -- FAILED.
Project "D:\gittest\Rainmeter.sln" (1) is building "D:\gittest\Plugins\PluginPower\PluginPower.vcxproj" (15) on node 1 (Rebuild target(s)).
D:\gittest\Plugins\PluginPower\PluginPower.vcxproj(24,3): error MSB4019: The imported project "C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\v110\Microsoft.Cpp.Default.props" was not found. Confirm that the path in the <Import> declaration is correct, and that the file exists on disk.
Done Building Project "D:\gittest\Plugins\PluginPower\PluginPower.vcxproj" (Rebuild target(s)) -- FAILED.
Project "D:\gittest\Rainmeter.sln" (1) is building "D:\gittest\Plugins\PluginProcess\PluginProcess.vcxproj" (16) on node 1 (Rebuild target(s)).
D:\gittest\Plugins\PluginProcess\PluginProcess.vcxproj(24,3): error MSB4019: The imported project "C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\v110\Microsoft.Cpp.Default.props" was not found. Confirm that the path in the <Import> declaration is correct, and that the file exists on disk.
Done Building Project "D:\gittest\Plugins\PluginProcess\PluginProcess.vcxproj" (Rebuild target(s)) -- FAILED.
Project "D:\gittest\Rainmeter.sln" (1) is building "D:\gittest\Plugins\PluginQuote\PluginQuote.vcxproj" (17) on node 1 (Rebuild target(s)).
D:\gittest\Plugins\PluginQuote\PluginQuote.vcxproj(24,3): error MSB4019: The imported project "C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\v110\Microsoft.Cpp.Default.props" was not found. Confirm that the path in the <Import> declaration is correct, and that the file exists on disk.
Done Building Project "D:\gittest\Plugins\PluginQuote\PluginQuote.vcxproj" (Rebuild target(s)) -- FAILED.
Project "D:\gittest\Rainmeter.sln" (1) is building "D:\gittest\Plugins\PluginRecycleManager\PluginRecycleManager.vcxproj" (18) on node 1 (Rebuild target(s)).
D:\gittest\Plugins\PluginRecycleManager\PluginRecycleManager.vcxproj(24,3): error MSB4019: The imported project "C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\v110\Microsoft.Cpp.Default.props" was not found. Confirm that the path in the <Import> declaration is correct, and that the file exists on disk.
Done Building Project "D:\gittest\Plugins\PluginRecycleManager\PluginRecycleManager.vcxproj" (Rebuild target(s)) -- FAILED.
Project "D:\gittest\Rainmeter.sln" (1) is building "D:\gittest\Plugins\PluginResMon\PluginResMon.vcxproj" (19) on node 1 (Rebuild target(s)).
D:\gittest\Plugins\PluginResMon\PluginResMon.vcxproj(24,3): error MSB4019: The imported project "C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\v110\Microsoft.Cpp.Default.props" was not found. Confirm that the path in the <Import> declaration is correct, and that the file exists on disk.
Done Building Project "D:\gittest\Plugins\PluginResMon\PluginResMon.vcxproj" (Rebuild target(s)) -- FAILED.
Project "D:\gittest\Rainmeter.sln" (1) is building "D:\gittest\Plugins\PluginSpeedFan\PluginSpeedFan.vcxproj" (20) on node 1 (Rebuild target(s)).
D:\gittest\Plugins\PluginSpeedFan\PluginSpeedFan.vcxproj(24,3): error MSB4019: The imported project "C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\v110\Microsoft.Cpp.Default.props" was not found. Confirm that the path in the <Import> declaration is correct, and that the file exists on disk.
Done Building Project "D:\gittest\Plugins\PluginSpeedFan\PluginSpeedFan.vcxproj" (Rebuild target(s)) -- FAILED.
Project "D:\gittest\Rainmeter.sln" (1) is building "D:\gittest\Plugins\PluginSysInfo\PluginSysInfo.vcxproj" (21) on node 1 (Rebuild target(s)).
D:\gittest\Plugins\PluginSysInfo\PluginSysInfo.vcxproj(24,3): error MSB4019: The imported project "C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\v110\Microsoft.Cpp.Default.props" was not found. Confirm that the path in the <Import> declaration is correct, and that the file exists on disk.
Done Building Project "D:\gittest\Plugins\PluginSysInfo\PluginSysInfo.vcxproj" (Rebuild target(s)) -- FAILED.
Project "D:\gittest\Rainmeter.sln" (1) is building "D:\gittest\Plugins\PluginVirtualDesktops\PluginVirtualDesktops.vcxproj" (22) on node 1 (Rebuild target(s)).
D:\gittest\Plugins\PluginVirtualDesktops\PluginVirtualDesktops.vcxproj(24,3): error MSB4019: The imported project "C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\v110\Microsoft.Cpp.Default.props" was not found. Confirm that the path in the <Import> declaration is correct, and that the file exists on disk.
Done Building Project "D:\gittest\Plugins\PluginVirtualDesktops\PluginVirtualDesktops.vcxproj" (Rebuild target(s)) -- FAILED.
Project "D:\gittest\Rainmeter.sln" (1) is building "D:\gittest\Plugins\PluginWebParser\PluginWebParser.vcxproj" (23) on node 1 (Rebuild target(s)).
D:\gittest\Plugins\PluginWebParser\PluginWebParser.vcxproj(24,3): error MSB4019: The imported project "C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\v110\Microsoft.Cpp.Default.props" was not found. Confirm that the path in the <Import> declaration is correct, and that the file exists on disk.
Done Building Project "D:\gittest\Plugins\PluginWebParser\PluginWebParser.vcxproj" (Rebuild target(s)) -- FAILED.
Project "D:\gittest\Rainmeter.sln" (1) is building "D:\gittest\Plugins\PluginWifiStatus\PluginWifiStatus.vcxproj" (24) on node 1 (Rebuild target(s)).
D:\gittest\Plugins\PluginWifiStatus\PluginWifiStatus.vcxproj(26,3): error MSB4019: The imported project "C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\v110\Microsoft.Cpp.Default.props" was not found. Confirm that the path in the <Import> declaration is correct, and that the file exists on disk.
Done Building Project "D:\gittest\Plugins\PluginWifiStatus\PluginWifiStatus.vcxproj" (Rebuild target(s)) -- FAILED.
Project "D:\gittest\Rainmeter.sln" (1) is building "D:\gittest\Plugins\PluginWin7Audio\PluginWin7Audio.vcxproj" (25) on node 1 (Rebuild target(s)).
D:\gittest\Plugins\PluginWin7Audio\PluginWin7Audio.vcxproj(25,3): error MSB4019: The imported project "C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\v110\Microsoft.Cpp.Default.props" was not found. Confirm that the path in the <Import> declaration is correct, and that the file exists on disk.
Done Building Project "D:\gittest\Plugins\PluginWin7Audio\PluginWin7Audio.vcxproj" (Rebuild target(s)) -- FAILED.
Project "D:\gittest\Rainmeter.sln" (1) is building "D:\gittest\Plugins\PluginWindowMessage\PluginWindowMessage.vcxproj" (26) on node 1 (Rebuild target(s)).
D:\gittest\Plugins\PluginWindowMessage\PluginWindowMessage.vcxproj(24,3): error MSB4019: The imported project "C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\v110\Microsoft.Cpp.Default.props" was not found. Confirm that the path in the <Import> declaration is correct, and that the file exists on disk.
Done Building Project "D:\gittest\Plugins\PluginWindowMessage\PluginWindowMessage.vcxproj" (Rebuild target(s)) -- FAILED.
Done Building Project "D:\gittest\Rainmeter.sln" (rebuild target(s)) -- FAILED.
Build FAILED.
"D:\gittest\Rainmeter.sln" (rebuild target) (1) ->
"D:\gittest\Application\Application.vcxproj" (Rebuild target) (2) ->
D:\gittest\Application\Application.vcxproj(24,3): error MSB4019: The imported project "C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\v110\Microsoft.Cpp.Default.props" was not found. Confirm that the path in the <Import> declaration is correct, and that the file exists on disk.
"D:\gittest\Rainmeter.sln" (rebuild target) (1) ->
"D:\gittest\Language\Language.vcxproj" (Rebuild target) (3) ->
D:\gittest\Language\Language.vcxproj(25,3): error MSB4019: The imported project "C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\v110\Microsoft.Cpp.Default.props" was not found. Confirm that the path in the <Import> declaration is correct, and that the file exists on disk.
"D:\gittest\Rainmeter.sln" (rebuild target) (1) ->
"D:\gittest\SkinInstaller\SkinInstaller.vcxproj" (Rebuild target) (4) ->
D:\gittest\SkinInstaller\SkinInstaller.vcxproj(25,3): error MSB4019: The imported project "C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\v110\Microsoft.Cpp.Default.props" was not found. Confirm that the path in the <Import> declaration is correct, and that the file exists on disk.
"D:\gittest\Rainmeter.sln" (rebuild target) (1) ->
"D:\gittest\Plugins\PluginAdvancedCPU\PluginAdvancedCPU.vcxproj" (Rebuild target) (6) ->
D:\gittest\Plugins\PluginAdvancedCPU\PluginAdvancedCPU.vcxproj(24,3): error MSB4019: The imported project "C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\v110\Microsoft.Cpp.Default.props" was not found. Confirm that the path in the <Import> declaration is correct, and that the file exists on disk.
"D:\gittest\Rainmeter.sln" (rebuild target) (1) ->
"D:\gittest\Plugins\PluginCoreTemp\PluginCoreTemp.vcxproj" (Rebuild target) (7) ->
D:\gittest\Plugins\PluginCoreTemp\PluginCoreTemp.vcxproj(25,3): error MSB4019: The imported project "C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\v110\Microsoft.Cpp.Default.props" was not found. Confirm that the path in the <Import> declaration is correct, and that the file exists on disk.
"D:\gittest\Rainmeter.sln" (rebuild target) (1) ->
"D:\gittest\Plugins\PluginFolderInfo\PluginFolderInfo.vcxproj" (Rebuild target) (8) ->
D:\gittest\Plugins\PluginFolderInfo\PluginFolderInfo.vcxproj(24,3): error MSB4019: The imported project "C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\v110\Microsoft.Cpp.Default.props" was not found. Confirm that the path in the <Import> declaration is correct, and that the file exists on disk.
"D:\gittest\Rainmeter.sln" (rebuild target) (1) ->
"D:\gittest\Plugins\PluginInputText\PluginInputText.csproj" (Rebuild target) (9) ->
(PostBuildEvent target) ->
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Microsoft.Common.targets(4209,5): error MSB3073: The command ""D:\gittest\Plugins\API\DllExporter.exe" "Release" "x86" "D:\gittest\TestBench\x32\Release\Plugins\\" "InputText.dll" "C:\Windows\Microsoft.NET\Framework64\v2.0.50727\ilasm.exe" "bin\ildasm.exe"" exited with code -532459699. [D:\gittest\Plugins\PluginInputText\PluginInputText.csproj]
"D:\gittest\Rainmeter.sln" (rebuild target) (1) ->
"D:\gittest\Plugins\PluginiTunes\PluginiTunes.vcxproj" (Rebuild target) (10) ->
D:\gittest\Plugins\PluginiTunes\PluginiTunes.vcxproj(25,3): error MSB4019: The imported project "C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\v110\Microsoft.Cpp.Default.props" was not found. Confirm that the path in the <Import> declaration is correct, and that the file exists on disk.
"D:\gittest\Rainmeter.sln" (rebuild target) (1) ->
"D:\gittest\Plugins\PluginMediaKey\PluginMediaKey.vcxproj" (Rebuild target) (11) ->
D:\gittest\Plugins\PluginMediaKey\PluginMediaKey.vcxproj(25,3): error MSB4019: The imported project "C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\v110\Microsoft.Cpp.Default.props" was not found. Confirm that the path in the <Import> declaration is correct, and that the file exists on disk.
"D:\gittest\Rainmeter.sln" (rebuild target) (1) ->
"D:\gittest\Plugins\PluginNowPlaying\PluginNowPlaying.vcxproj" (Rebuild target) (12) ->
D:\gittest\Plugins\PluginNowPlaying\PluginNowPlaying.vcxproj(25,3): error MSB4019: The imported project "C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\v110\Microsoft.Cpp.Default.props" was not found. Confirm that the path in the <Import> declaration is correct, and that the file exists on disk.
"D:\gittest\Rainmeter.sln" (rebuild target) (1) ->
"D:\gittest\Plugins\PluginPerfMon\PluginPerfMon.vcxproj" (Rebuild target) (13) ->
D:\gittest\Plugins\PluginPerfMon\PluginPerfMon.vcxproj(24,3): error MSB4019: The imported project "C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\v110\Microsoft.Cpp.Default.props" was not found. Confirm that the path in the <Import> declaration is correct, and that the file exists on disk.
"D:\gittest\Rainmeter.sln" (rebuild target) (1) ->
"D:\gittest\Plugins\PluginPing\PluginPing.vcxproj" (Rebuild target) (14) ->
D:\gittest\Plugins\PluginPing\PluginPing.vcxproj(24,3): error MSB4019: The imported project "C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\v110\Microsoft.Cpp.Default.props" was not found. Confirm that the path in the <Import> declaration is correct, and that the file exists on disk.
"D:\gittest\Rainmeter.sln" (rebuild target) (1) ->
"D:\gittest\Plugins\PluginPower\PluginPower.vcxproj" (Rebuild target) (15) ->
D:\gittest\Plugins\PluginPower\PluginPower.vcxproj(24,3): error MSB4019: The imported project "C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\v110\Microsoft.Cpp.Default.props" was not found. Confirm that the path in the <Import> declaration is correct, and that the file exists on disk.
"D:\gittest\Rainmeter.sln" (rebuild target) (1) ->
"D:\gittest\Plugins\PluginProcess\PluginProcess.vcxproj" (Rebuild target) (16) ->
D:\gittest\Plugins\PluginProcess\PluginProcess.vcxproj(24,3): error MSB4019: The imported project "C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\v110\Microsoft.Cpp.Default.props" was not found. Confirm that the path in the <Import> declaration is correct, and that the file exists on disk.
"D:\gittest\Rainmeter.sln" (rebuild target) (1) ->
"D:\gittest\Plugins\PluginQuote\PluginQuote.vcxproj" (Rebuild target) (17) ->
D:\gittest\Plugins\PluginQuote\PluginQuote.vcxproj(24,3): error MSB4019: The imported project "C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\v110\Microsoft.Cpp.Default.props" was not found. Confirm that the path in the <Import> declaration is correct, and that the file exists on disk.
"D:\gittest\Rainmeter.sln" (rebuild target) (1) ->
"D:\gittest\Plugins\PluginRecycleManager\PluginRecycleManager.vcxproj" (Rebuild target) (18) ->
D:\gittest\Plugins\PluginRecycleManager\PluginRecycleManager.vcxproj(24,3): error MSB4019: The imported project "C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\v110\Microsoft.Cpp.Default.props" was not found. Confirm that the path in the <Import> declaration is correct, and that the file exists on disk.
"D:\gittest\Rainmeter.sln" (rebuild target) (1) ->
"D:\gittest\Plugins\PluginResMon\PluginResMon.vcxproj" (Rebuild target) (19) ->
D:\gittest\Plugins\PluginResMon\PluginResMon.vcxproj(24,3): error MSB4019: The imported project "C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\v110\Microsoft.Cpp.Default.props" was not found. Confirm that the path in the <Import> declaration is correct, and that the file exists on disk.
"D:\gittest\Rainmeter.sln" (rebuild target) (1) ->
"D:\gittest\Plugins\PluginSpeedFan\PluginSpeedFan.vcxproj" (Rebuild target) (20) ->
D:\gittest\Plugins\PluginSpeedFan\PluginSpeedFan.vcxproj(24,3): error MSB4019: The imported project "C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\v110\Microsoft.Cpp.Default.props" was not found. Confirm that the path in the <Import> declaration is correct, and that the file exists on disk.
"D:\gittest\Rainmeter.sln" (rebuild target) (1) ->
"D:\gittest\Plugins\PluginSysInfo\PluginSysInfo.vcxproj" (Rebuild target) (21) ->
D:\gittest\Plugins\PluginSysInfo\PluginSysInfo.vcxproj(24,3): error MSB4019: The imported project "C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\v110\Microsoft.Cpp.Default.props" was not found. Confirm that the path in the <Import> declaration is correct, and that the file exists on disk.
"D:\gittest\Rainmeter.sln" (rebuild target) (1) ->
"D:\gittest\Plugins\PluginVirtualDesktops\PluginVirtualDesktops.vcxproj" (Rebuild target) (22) ->
D:\gittest\Plugins\PluginVirtualDesktops\PluginVirtualDesktops.vcxproj(24,3): error MSB4019: The imported project "C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\v110\Microsoft.Cpp.Default.props" was not found. Confirm that the path in the <Import> declaration is correct, and that the file exists on disk.
"D:\gittest\Rainmeter.sln" (rebuild target) (1) ->
"D:\gittest\Plugins\PluginWebParser\PluginWebParser.vcxproj" (Rebuild target) (23) ->
D:\gittest\Plugins\PluginWebParser\PluginWebParser.vcxproj(24,3): error MSB4019: The imported project "C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\v110\Microsoft.Cpp.Default.props" was not found. Confirm that the path in the <Import> declaration is correct, and that the file exists on disk.
"D:\gittest\Rainmeter.sln" (rebuild target) (1) ->
"D:\gittest\Plugins\PluginWifiStatus\PluginWifiStatus.vcxproj" (Rebuild target) (24) ->
D:\gittest\Plugins\PluginWifiStatus\PluginWifiStatus.vcxproj(26,3): error MSB4019: The imported project "C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\v110\Microsoft.Cpp.Default.props" was not found. Confirm that the path in the <Import> declaration is correct, and that the file exists on disk.
"D:\gittest\Rainmeter.sln" (rebuild target) (1) ->
"D:\gittest\Plugins\PluginWin7Audio\PluginWin7Audio.vcxproj" (Rebuild target) (25) ->
D:\gittest\Plugins\PluginWin7Audio\PluginWin7Audio.vcxproj(25,3): error MSB4019: The imported project "C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\v110\Microsoft.Cpp.Default.props" was not found. Confirm that the path in the <Import> declaration is correct, and that the file exists on disk.
"D:\gittest\Rainmeter.sln" (rebuild target) (1) ->
"D:\gittest\Plugins\PluginWindowMessage\PluginWindowMessage.vcxproj" (Rebuild target) (26) ->
D:\gittest\Plugins\PluginWindowMessage\PluginWindowMessage.vcxproj(24,3): error MSB4019: The imported project "C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\v110\Microsoft.Cpp.Default.props" was not found. Confirm that the path in the <Import> declaration is correct, and that the file exists on disk.
0 Warning(s)
24 Error(s)
Time Elapsed 00:00:01.41

2
Build/BuildVersion.bat Normal file
View File

@ -0,0 +1,2 @@
@echo off
"Build.bat" BUILDVERSION

BIN
Build/Installer/Header.bmp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

BIN
Build/Installer/Icon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

View File

@ -0,0 +1,937 @@
!verbose 3
!addplugindir ".\"
!ifndef VER
!define VER "0.0"
!define REV "000"
!endif
!ifdef BETA
!define OUTFILE "Rainmeter-${VER}-r${REV}-beta.exe"
!else
!define OUTFILE "Rainmeter-${VER}.exe"
!endif
Name "Rainmeter"
VIAddVersionKey "ProductName" "Rainmeter"
VIAddVersionKey "FileDescription" "Rainmeter Installer"
VIAddVersionKey "FileVersion" "${VER}.0"
VIAddVersionKey "ProductVersion" "${VER}.0.${REV}"
VIAddVersionKey "OriginalFilename" "${OUTFILE}"
VIAddVersionKey "LegalCopyright" "Copyright (C) 2009-2012 - All authors"
VIProductVersion "${VER}.0.${REV}"
BrandingText " "
SetCompressor /SOLID lzma
RequestExecutionLevel user
InstallDirRegKey HKLM "SOFTWARE\Rainmeter" ""
XPStyle on
OutFile "..\${OUTFILE}"
ReserveFile "${NSISDIR}\Plugins\LangDLL.dll"
ReserveFile "${NSISDIR}\Plugins\nsDialogs.dll"
ReserveFile "${NSISDIR}\Plugins\System.dll"
ReserveFile ".\UAC.dll"
!include "MUI2.nsh"
!include "x64.nsh"
!include "ProcFunc.nsh"
!include "FileFunc.nsh"
!include "WordFunc.nsh"
!include "WinVer.nsh"
!include "UAC.nsh"
!define BCM_SETSHIELD 0x0000160c
!define MUI_HEADERIMAGE
!define MUI_ICON ".\Icon.ico"
!define MUI_UNICON ".\Icon.ico"
!define MUI_HEADERIMAGE_BITMAP ".\Header.bmp"
!define MUI_HEADERIMAGE_UNBITMAP ".\Header.bmp"
!define MUI_WELCOMEFINISHPAGE_BITMAP ".\Wizard.bmp"
!define MUI_FINISHPAGE_RUN
!define MUI_FINISHPAGE_RUN_FUNCTION FinishRun
!define MUI_PAGE_CUSTOMFUNCTION_SHOW PageWelcomeOnShow
!insertmacro MUI_PAGE_WELCOME
Page custom PageOptions PageOptionsOnLeave
!define MUI_PAGE_CUSTOMFUNCTION_SHOW PageDirectoryOnShow
!define MUI_PAGE_CUSTOMFUNCTION_LEAVE PageDirectoryOnLeave
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_PAGE_FINISH
UninstPage custom un.PageOptions un.GetOptions
!insertmacro MUI_UNPAGE_INSTFILES
!macro IncludeLanguage LANGUAGE CUSTOMLANGUAGE
; Modified variant of the MUI_LANGUAGE macro in Localization.h
; Uses "EnglishLangName (LocalizedLangName)" instead of "LocalizedLangName" for the language selection dialog
!insertmacro MUI_INSERT
LoadLanguageFile "${NSISDIR}\Contrib\Language files\${LANGUAGE}.nlf"
; Include language file
!insertmacro LANGFILE_INCLUDE_WITHDEFAULT "${NSISDIR}\Contrib\Language files\${LANGUAGE}.nsh" "${NSISDIR}\Contrib\Language files\English.nsh"
;Add language to list of languages for selection dialog
!ifndef MUI_LANGDLL_LANGUAGES
!define MUI_LANGDLL_LANGUAGES "'${LANGFILE_${LANGUAGE}_NAME}' '${LANG_${LANGUAGE}}' "
!define MUI_LANGDLL_LANGUAGES_CP "'${LANGFILE_IDNAME} - ${LANGFILE_${LANGUAGE}_NAME}' '${LANG_${LANGUAGE}}' '${LANG_${LANGUAGE}_CP}' "
!else
!ifdef MUI_LANGDLL_LANGUAGES_TEMP
!undef MUI_LANGDLL_LANGUAGES_TEMP
!endif
!define MUI_LANGDLL_LANGUAGES_TEMP "${MUI_LANGDLL_LANGUAGES}"
!undef MUI_LANGDLL_LANGUAGES
!ifdef MUI_LANGDLL_LANGUAGES_CP_TEMP
!undef MUI_LANGDLL_LANGUAGES_CP_TEMP
!endif
!define MUI_LANGDLL_LANGUAGES_CP_TEMP "${MUI_LANGDLL_LANGUAGES_CP}"
!undef MUI_LANGDLL_LANGUAGES_CP
!define MUI_LANGDLL_LANGUAGES "'${LANGFILE_${LANGUAGE}_NAME}' '${LANG_${LANGUAGE}}' ${MUI_LANGDLL_LANGUAGES_TEMP}"
!define MUI_LANGDLL_LANGUAGES_CP "'${LANGFILE_IDNAME} - ${LANGFILE_${LANGUAGE}_NAME}' '${LANG_${LANGUAGE}}' '${LANG_${LANGUAGE}_CP}' ${MUI_LANGDLL_LANGUAGES_CP_TEMP}"
!endif
!insertmacro LANGFILE_INCLUDE "..\..\Language\${CUSTOMLANGUAGE}.nsh"
!macroend
!include "Languages.nsh"
; Error levels (for silent install)
!define ERROR_UNSUPPORTED 3
!define ERROR_NOTADMIN 4
!define ERROR_WRITEFAIL 5
!define ERROR_NOVCREDIST 6
!define ERROR_CLOSEFAIL 7
Var ctlDesktop
Var ctlStartup
Var ctlAllUsers
Var ctlDelete
Var ctlStandard
Var ctlPortable
Var ctlBit32
Var ctlBit64
Var instArc
Var instType
Var defLang
; Install
; --------------------------------------
Function .onInit
${If} ${RunningX64}
${EnableX64FSRedirection}
${EndIf}
${IfNot} ${UAC_IsInnerInstance}
${If} ${IsWin2000}
${If} ${Silent}
SetErrorLevel ${ERROR_UNSUPPORTED}
${Else}
MessageBox MB_OK|MB_ICONINFORMATION "$(WIN2KERROR)"
${EndIf}
Quit
${ElseIf} ${IsWinXP}
${AndIf} ${AtMostServicePack} 1
${If} ${Silent}
SetErrorLevel ${ERROR_UNSUPPORTED}
${Else}
MessageBox MB_OK|MB_ICONINFORMATION "$(WINXPS2ERROR)"
${EndIf}
Quit
${ElseIf} ${IsWin2003}
${AndIf} ${AtMostServicePack} 0
${If} ${Silent}
SetErrorLevel ${ERROR_UNSUPPORTED}
${Else}
MessageBox MB_OK|MB_ICONINFORMATION "$(WIN2003SP1ERROR)"
${EndIf}
Quit
${EndIf}
StrCpy $R0 $LANGUAGE
StrCpy $defLang "0"
ReadRegDWORD $0 HKLM "SOFTWARE\Rainmeter" "NonDefault"
${If} $0 == 1
; Rainmeter already installed and user selected non-default language last time
ReadRegStr $0 HKLM "SOFTWARE\Rainmeter" "Language"
${If} $0 != ""
StrCpy $LANGUAGE $0
${EndIf}
${EndIf}
${IfNot} ${Silent}
LangDLL::LangDialog "$(^SetupCaption)" "Please select the installer language.$\n$(SELECTLANGUAGE)" AC ${MUI_LANGDLL_LANGUAGES_CP} ""
Pop $LANGUAGE
${If} $LANGUAGE == "cancel"
Abort
${EndIf}
${If} $LANGUAGE == $R0
; User selected default language
StrCpy $defLang "1"
${EndIf}
${Else}
${GetParameters} $R1
ClearErrors
${GetOptions} $R1 "/LANGUAGE=" $0
${IfNot} ${Errors}
StrCpy $LANGUAGE $0
${EndIf}
${If} $LANGUAGE == $R0
; User selected default language
StrCpy $defLang "1"
${EndIf}
${GetOptions} $R1 "/DESKTOPSHORTCUT=" $0
${If} $0 = 1
StrCpy $ctlDesktop "1"
${EndIf}
${GetOptions} $R1 "/STARTUP=" $0
${If} $0 = 1
StrCpy $ctlStartup "1"
${EndIf}
${GetOptions} $R1 "/ALLUSERS=" $0
${If} $0 = 1
StrCpy $ctlAllUsers "1"
${EndIf}
${GetOptions} $R1 "/PORTABLE=" $0
${If} $0 = 1
StrCpy $instType "P"
${Else}
${IfNot} ${UAC_IsAdmin}
SetErrorLevel ${ERROR_NOTADMIN}
Quit
${EndIf}
StrCpy $instType "S"
${EndIf}
${GetOptions} $R1 "/VERSION=" $0
${If} $0 = 64
StrCpy $instArc "x64"
${If} $INSTDIR == ""
StrCpy $INSTDIR "$PROGRAMFILES64\Rainmeter"
${EndIf}
${Else}
StrCpy $instArc "x86"
${If} $INSTDIR == ""
StrCpy $INSTDIR "$PROGRAMFILES\Rainmeter"
${EndIf}
${EndIf}
ClearErrors
CreateDirectory "$INSTDIR"
WriteINIStr "$INSTDIR\_rainmeter_writetest.tmp" "1" "1" "1"
Delete "$INSTDIR\_rainmeter_writetest.tmp"
${If} ${Errors}
SetErrorLevel ${ERROR_WRITEFAIL}
Quit
${EndIf}
${EndIf}
${Else}
; Sync variables with user instance
!insertmacro UAC_AsUser_Call Function ExchangeVars ${UAC_SYNCREGISTERS}
StrCpy $instType "S"
StrCpy $ctlDesktop $0
StrCpy $ctlStartup $1
StrCpy $ctlAllUsers $2
StrCpy $instArc $3
StrCpy $defLang $4
StrCpy $LANGUAGE $5
${EndIf}
FunctionEnd
Function ExchangeVars
StrCpy $0 $ctlDesktop
StrCpy $1 $ctlStartup
StrCpy $2 $ctlAllUsers
StrCpy $3 $instArc
StrCpy $4 $defLang
StrCpy $5 $LANGUAGE
HideWindow
FunctionEnd
Function PageWelcomeOnShow
; Skip to the directory page if we're the elevated process
${If} ${UAC_IsInnerInstance}
${If} ${UAC_IsAdmin}
SendMessage $HWNDPARENT "0x408" "2" ""
${Else}
MessageBox MB_OK|MB_ICONSTOP "$(ADMINERROR) (Inner)"
Quit
${EndIf}
${EndIf}
FunctionEnd
Function PageOptions
!insertmacro MUI_HEADER_TEXT "$(INSTALLOPTIONS)" "$(INSTALLOPTIONSDESC)"
nsDialogs::Create 1018
nsDialogs::SetRTL $(^RTL)
${NSD_CreateRadioButton} 0 0u 310u 12u "$(STANDARDINST)"
Pop $ctlStandard
${NSD_AddStyle} $ctlStandard ${WS_GROUP}
SendMessage $ctlStandard ${WM_SETFONT} $mui.Header.Text.Font 0
${NSD_OnClick} $ctlStandard setStandard
${NSD_CreateLabel} 12u 12u 285u 12u "$(STANDARDINSTDESC)"
${NSD_CreateRadioButton} 0 24u 310u 12u "$(PORTABLEINST)"
Pop $ctlPortable
${NSD_AddStyle} $ctlPortable ${WS_TABSTOP}
SendMessage $ctlPortable ${WM_SETFONT} $mui.Header.Text.Font 0
${NSD_OnClick} $ctlPortable setPortable
${NSD_CreateLabel} 12u 36u 285u 32u "$(PORTABLEINSTDESC)"
${NSD_CreateGroupBox} 0 72u 200u 54u "$(ADDITIONALOPTIONS)"
Push $ctlDesktop
${NSD_CreateCheckbox} 6u 84u 190u 12u "$(DESKTOPSHORTCUT)"
Pop $ctlDesktop
Pop $0
StrCmp $0 "1" 0 +2
${NSD_Check} $ctlDesktop
Push $ctlAllUsers
${NSD_CreateCheckbox} 6u 96u 190u 12u "$(ALLUSERSSHORTCUT)"
Pop $ctlAllUsers
Pop $0
StrCmp $0 "1" 0 +2
${NSD_Check} $ctlAllUsers
Push $ctlStartup
${NSD_CreateCheckbox} 6u 108u 190u 12u "$(AUTOSTARTUP)"
Pop $ctlStartup
Pop $0
StrCmp $0 "1" 0 +2
${NSD_Check} $ctlStartup
${NSD_CreateGroupBox} 205u 72u 94u 40u "$(RAINMETERVERSION)"
${NSD_CreateRadioButton} 211u 82u 80u 12u "$(32BIT)"
Pop $ctlBit32
${NSD_AddStyle} $ctlBit32 ${WS_GROUP}
${NSD_CreateRadioButton} 211u 94u 80u 12u "$(64BIT)"
Pop $ctlBit64
ReadRegStr $0 HKLM "Software\Rainmeter" ""
${If} $0 == ""
${NSD_Check} $ctlStartup
${NSD_Check} $ctlAllUsers
${Else}
SetShellVarContext all
Call GetEnvPaths
StrCpy $R1 $1
StrCpy $R2 $2
StrCpy $R3 $3
SetShellVarContext current
!insertmacro UAC_AsUser_Call Function GetEnvPaths ${UAC_SYNCREGISTERS}
${If} ${FileExists} "$R1\Rainmeter\Rainmeter.lnk"
${NSD_Check} $ctlAllUsers
${EndIf}
${If} ${FileExists} "$R2\Rainmeter.lnk"
${OrIf} ${FileExists} "$2\Rainmeter.lnk"
${NSD_Check} $ctlStartup
${EndIf}
${If} ${FileExists} "$R3\Rainmeter.lnk"
${OrIf} ${FileExists} "$3\Rainmeter.lnk"
${NSD_Check} $ctlDesktop
${EndIf}
${EndIf}
${If} $instType == "P"
${NSD_Check} $ctlPortable
Call SetPortable
${Else}
Call SetStandard
${NSD_Check} $ctlStandard
${EndIf}
nsDialogs::Show
FunctionEnd
Function SetStandard
EnableWindow $ctlDesktop 1
EnableWindow $ctlAllUsers 1
EnableWindow $ctlStartup 1
${If} ${RunningX64}
${If} ${FileExists} "$INSTDIR\Rainmeter.exe"
MoreInfo::GetProductVersion "$INSTDIR\Rainmeter.exe"
Pop $0
StrCpy $0 $0 2 -7
${If} $0 == "32"
${NSD_Check} $ctlBit32
${NSD_UnCheck} $ctlBit64
EnableWindow $ctlBit64 0
${Else}
${NSD_Check} $ctlBit64
${NSD_UnCheck} $ctlBit32
EnableWindow $ctlBit32 0
${EndIf}
${Else}
${NSD_Check} $ctlBit64
${EndIf}
${Else}
${NSD_Check} $ctlBit32
${NSD_UnCheck} $ctlBit64
EnableWindow $ctlBit64 0
${EndIf}
${IfNot} ${UAC_IsAdmin}
GetDlgItem $0 $HWNDPARENT 1
SendMessage $0 ${BCM_SETSHIELD} 0 1
${EndIf}
FunctionEnd
Function SetPortable
EnableWindow $ctlDesktop 0
EnableWindow $ctlAllUsers 0
EnableWindow $ctlStartup 0
EnableWindow $ctlBit32 1
${If} ${RunningX64}
EnableWindow $ctlBit64 1
${Endif}
${IfNot} ${UAC_IsAdmin}
GetDlgItem $0 $HWNDPARENT 1
SendMessage $0 ${BCM_SETSHIELD} 0 0
${EndIf}
FunctionEnd
Function PageOptionsOnLeave
GetDlgItem $0 $HWNDPARENT 1
EnableWindow $0 0
${NSD_GetState} $ctlDesktop $ctlDesktop
${NSD_GetState} $ctlStartup $ctlStartup
${NSD_GetState} $ctlAllUsers $ctlAllUsers
${NSD_GetState} $ctlStandard $0
${If} $0 == ${BST_CHECKED}
StrCpy $instType "S"
${Else}
StrCpy $instType "P"
${EndIf}
${NSD_GetState} $ctlBit32 $0
${If} $0 == ${BST_CHECKED}
StrCpy $instArc "x86"
${Else}
StrCpy $instArc "x64"
${EndIf}
${If} $instType == "S"
${IfNot} ${UAC_IsAdmin}
; UAC_IsAdmin seems to return incorrect result sometimes. Recheck with UserInfo::GetAccountType to be sure.
UserInfo::GetAccountType
Pop $0
${If} $0 != "Admin"
UAC_TryAgain:
!insertmacro UAC_RunElevated
${Switch} $0
${Case} 0
${IfThen} $1 = 1 ${|} Quit ${|}
${IfThen} $3 <> 0 ${|} ${Break} ${|}
${If} $1 = 3
MessageBox MB_OK|MB_ICONSTOP|MB_TOPMOST|MB_SETFOREGROUND "$(ADMINERROR)" /SD IDNO IDOK UAC_TryAgain IDNO 0
${EndIf}
${Case} 1223
Quit
${Case} 1062
MessageBox MB_OK|MB_ICONSTOP|MB_TOPMOST|MB_SETFOREGROUND "$(LOGONERROR)"
Quit
${Default}
MessageBox MB_OK|MB_ICONSTOP|MB_TOPMOST|MB_SETFOREGROUND "$(UACERROR) ($0)"
Quit
${EndSwitch}
${EndIf}
${EndIf}
${EndIf}
FunctionEnd
Function PageDirectoryOnShow
${If} $instType == "P"
${GetRoot} "$WINDIR" $0
${NSD_SetText} $mui.DirectoryPage.Directory "$0\Rainmeter"
${Else}
${If} $INSTDIR == ""
; Fresh install
${If} $instArc == "x86"
${If} ${RunningX64}
${NSD_SetText} $mui.DirectoryPage.Directory "$PROGRAMFILES32\Rainmeter"
${Else}
${NSD_SetText} $mui.DirectoryPage.Directory "$PROGRAMFILES\Rainmeter"
${EndIf}
${Else}
${NSD_SetText} $mui.DirectoryPage.Directory "$PROGRAMFILES64\Rainmeter"
${EndIf}
${Else}
; Upgrade install
EnableWindow $mui.DirectoryPage.Directory 0
EnableWindow $mui.DirectoryPage.BrowseButton 0
; Set focus on the Install button
GetDlgItem $0 $HWNDPARENT 1
System::Call "user32::SetFocus(i$0)"
${EndIf}
${EndIf}
FunctionEnd
Function PageDirectoryOnLeave
${If} $instType == "P"
ClearErrors
CreateDirectory "$INSTDIR"
WriteINIStr "$INSTDIR\_rainmeter_writetest.tmp" "1" "1" "1"
${If} ${Errors}
MessageBox MB_OK|MB_ICONEXCLAMATION "$(WRITEERROR)"
Abort
${EndIf}
Delete "$INSTDIR\_rainmeter_writetest.tmp"
${EndIf}
FunctionEnd
!macro InstallFiles DIR
File "..\..\TestBench\${DIR}\Release\Rainmeter.exe"
File "..\..\TestBench\${DIR}\Release\Rainmeter.dll"
File "..\..\TestBench\${DIR}\Release\SkinInstaller.exe"
SetOutPath "$INSTDIR\Plugins"
File /x *Example*.dll "..\..\TestBench\${DIR}\Release\Plugins\*.dll"
!macroend
!macro RemoveShortcuts
; $1=$SMPROGRAMS, $2=$SMSTARTUP, $3=$DESKTOP
Delete "$1\Rainmeter\Rainmeter.lnk"
Delete "$1\Rainmeter\Rainmeter Help.lnk"
Delete "$1\Rainmeter\Rainmeter Help.URL"
Delete "$1\Rainmeter\Remove Rainmeter.lnk"
Delete "$1\Rainmeter\RainThemes.lnk"
Delete "$1\Rainmeter\RainThemes Help.lnk"
Delete "$1\Rainmeter\RainBrowser.lnk"
Delete "$1\Rainmeter\RainBackup.lnk"
Delete "$1\Rainmeter\Rainstaller.lnk"
Delete "$1\Rainmeter\Skin Installer.lnk"
Delete "$1\Rainmeter\Rainstaller Help.lnk"
RMDir "$1\Rainmeter"
Delete "$2\Rainmeter.lnk"
Delete "$3\Rainmeter.lnk"
!macroend
Section
SetOutPath "$PLUGINSDIR"
SetShellVarContext current
${If} $instType == "S"
ReadRegDWORD $0 HKLM "SOFTWARE\Microsoft\VisualStudio\10.0\VC\VCRedist\$instArc" "Bld"
${VersionCompare} "$0" "40219" $1
ReadRegDWORD $2 HKLM "SOFTWARE\Microsoft\VisualStudio\10.0\VC\VCRedist\$instArc" "Installed"
; Download and install VC++ redist if required
${If} $1 == "2"
${OrIf} $2 != "1"
${If} ${Silent}
SetErrorLevel ${ERROR_NOVCREDIST}
Quit
${EndIf}
${If} $instArc == "x86"
NSISdl::download /TIMEOUT=30000 "http://download.microsoft.com/download/C/6/D/C6D0FD4E-9E53-4897-9B91-836EBA2AACD3/vcredist_x86.exe" "$PLUGINSDIR\vcredist.exe"
Pop $0
${Else}
NSISdl::download /TIMEOUT=30000 "http://download.microsoft.com/download/A/8/0/A80747C3-41BD-45DF-B505-E9710D2744E0/vcredist_x64.exe" "$PLUGINSDIR\vcredist.exe"
Pop $0
${EndIf}
${If} $0 != "cancel"
${AndIf} $0 != "success"
; download from MS failed, try from rainmter.net
Delete "$PLUGINSDIR\vcredist.exe"
${If} $instArc == "x86"
NSISdl::download /TIMEOUT=30000 "http://rainmeter.net/redist/vc10SP1redist_x86.exe" "$PLUGINSDIR\vcredist.exe"
Pop $0
${Else}
NSISdl::download /TIMEOUT=30000 "http://rainmeter.net/redist/vc10SP1redist_x64.exe" "$PLUGINSDIR\vcredist.exe"
Pop $0
${EndIf}
${EndIf}
${If} $0 == "success"
ExecWait '"$PLUGINSDIR\vcredist.exe" /q /norestart' $0
Delete "$PLUGINSDIR\vcredist.exe"
${If} $0 == "3010"
SetRebootFlag true
${ElseIf} $0 != "0"
MessageBox MB_OK|MB_ICONSTOP "$(VCINSTERROR)"
Quit
${EndIf}
${ElseIf} $0 == "cancel"
Quit
${Else}
MessageBox MB_OK|MB_ICONSTOP "$(VCINSTERROR)"
Quit
${EndIf}
${EndIf}
; Download and install .NET if required
ReadRegDWORD $0 HKLM "SOFTWARE\Microsoft\NET Framework Setup\NDP\v2.0.50727" "Install"
${If} $0 != "1"
${If} $instArc == "x86"
NSISdl::download /TIMEOUT=30000 "http://download.microsoft.com/download/5/6/7/567758a3-759e-473e-bf8f-52154438565a/dotnetfx.exe" "$PLUGINSDIR\dotnetfx.exe"
${Else}
NSISdl::download /TIMEOUT=30000 "http://download.microsoft.com/download/a/3/f/a3f1bf98-18f3-4036-9b68-8e6de530ce0a/NetFx64.exe" "$PLUGINSDIR\dotnetfx.exe"
${EndIf}
Pop $0
${If} $0 != "cancel"
${AndIf} $0 != "success"
Delete "$PLUGINSDIR\dotnetfx.exe"
${If} $instArc == "x86"
NSISdl::download /TIMEOUT=30000 "http://rainmeter.net/redist/dotnetfx.exe" "$PLUGINSDIR\dotnetfx.exe"
${Else}
NSISdl::download /TIMEOUT=30000 "http://rainmeter.net/redist/NetFx64.exe" "$PLUGINSDIR\dotnetfx.exe"
${EndIf}
Pop $0
${EndIf}
${If} $0 == "success"
ExecWait '"$PLUGINSDIR\dotnetfx.exe" /q:a /c:"install /q"' $0
Delete "$PLUGINSDIR\dotnetfx.exe"
${If} $0 == "3010"
SetRebootFlag true
${ElseIf} $0 != "0"
MessageBox MB_OK|MB_ICONSTOP "$(DOTNETINSTERROR)"
Quit
${EndIf}
${ElseIf} $0 == "cancel"
Quit
${Else}
MessageBox MB_OK|MB_ICONSTOP "$(DOTNETINSTERROR)"
Quit
${EndIf}
${EndIf}
${EndIf}
SetOutPath "$INSTDIR"
FindWindow $0 "RainmeterTrayClass"
${If} $0 != "0"
Exec '"$INSTDIR\Rainmeter.exe" !Quit'
; Wait up to for up to 5 seconds for Rainmeter to close
StrCpy $1 "0"
${DoWhile} ${ProcessExists} "Rainmeter.exe"
IntOp $1 $1 + 1
${If} $1 >= "10"
${If} ${Silent}
SetErrorLevel ${ERROR_CLOSEFAIL}
Quit
${Else}
MessageBox MB_RETRYCANCEL|MB_ICONSTOP "$(RAINMETERCLOSEERROR)" IDRETRY +2
Quit
${EndIf}
${EndIf}
Sleep 500
SendMessage $0 ${WM_CLOSE} 0 0
${Loop}
${EndIf}
; Check if Rainmeter.ini is located in the installation folder and
; if the installation folder is in Program Files
${IfNot} ${Silent}
${AndIf} ${FileExists} "$INSTDIR\Rainmeter.ini"
${If} $instType == "S"
!ifdef X64
StrCmp $INSTDIR "$PROGRAMFILES64\Rainmeter" 0 RainmeterIniDoesntExistLabel
!else
StrCmp $INSTDIR "$PROGRAMFILES\Rainmeter" 0 RainmeterIniDoesntExistLabel
!endif
MessageBox MB_YESNO|MB_ICONEXCLAMATION "$(SETTINGSFILEERROR)" IDNO RainmeterIniDoesntExistLabel
CreateDirectory $APPDATA\Rainmeter
Rename "$INSTDIR\Rainmeter.ini" "$APPDATA\Rainmeter\Rainmeter.ini"
${If} ${Errors}
MessageBox MB_OK|MB_ICONSTOP "$(SETTINGSMOVEERROR)"
${EndIf}
${Else}
ReadINIStr $0 "$INSTDIR\Rainmeter.ini" "Rainmeter" "SkinPath"
${If} $0 == "$INSTDIR\Skins\"
DeleteINIStr "$INSTDIR\Rainmeter.ini" "Rainmeter" "SkinPath"
${EndIf}
${EndIf}
${EndIf}
RainmeterIniDoesntExistLabel:
SetOutPath "$INSTDIR"
Delete "$INSTDIR\Rainmeter.exe.config"
Delete "$INSTDIR\Rainmeter.chm"
Delete "$INSTDIR\Default.ini"
${If} $instArc == "x86"
!insertmacro InstallFiles "x32"
${Else}
!insertmacro InstallFiles "x64"
${EndIf}
RMDir /r "$INSTDIR\Languages"
SetOutPath "$INSTDIR\Languages"
File "..\..\TestBench\x32\Release\Languages\*.*"
RMDir /r "$INSTDIR\Addons\Rainstaller"
SetOutPath "$INSTDIR\Skins"
RMDir /r "$INSTDIR\Skins\illustro"
Delete "$INSTDIR\Skins\*.txt"
File /r /x .svn ".\Skins\*.*"
SetOutPath "$INSTDIR\Themes"
File /r /x .svn ".\Themes\*.*"
SetOutPath "$INSTDIR"
${If} $instType == "S"
ReadRegStr $0 HKLM "SOFTWARE\Rainmeter" ""
WriteRegStr HKLM "SOFTWARE\Rainmeter" "" "$INSTDIR"
WriteRegStr HKLM "SOFTWARE\Rainmeter" "Language" "$LANGUAGE"
${If} $defLang == "1"
DeleteRegValue HKLM "SOFTWARE\Rainmeter" "NonDefault"
${Else}
WriteRegDWORD HKLM "SOFTWARE\Rainmeter" "NonDefault" 1
${EndIf}
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Rainmeter" "DisplayName" "Rainmeter"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Rainmeter" "DisplayIcon" "$INSTDIR\Rainmeter.exe,0"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Rainmeter" "URLInfoAbout" "http://rainmeter.net"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Rainmeter" "UninstallString" "$INSTDIR\uninst.exe"
!ifdef BETA
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Rainmeter" "DisplayVersion" "${VER} beta r${REV}"
!else
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Rainmeter" "DisplayVersion" "${VER} r${REV}"
!endif
WriteRegStr HKCR ".rmskin" "" "Rainmeter skin"
WriteRegStr HKCR "Rainmeter skin" "" "Rainmeter skin file"
WriteRegStr HKCR "Rainmeter skin\shell" "" "open"
WriteRegStr HKCR "Rainmeter skin\DefaultIcon" "" "$INSTDIR\SkinInstaller.exe,0"
WriteRegStr HKCR "Rainmeter skin\shell\open\command" "" '"$INSTDIR\SkinInstaller.exe" %1'
WriteRegStr HKCR "Rainmeter skin\shell\edit" "" "Install Rainmeter skin"
WriteRegStr HKCR "Rainmeter skin\shell\edit\command" "" '"$INSTDIR\SkinInstaller.exe" %1'
; Refresh shell icons if new install
${If} $0 == ""
System::Call 'Shell32::SHChangeNotify(i 0x8000000, i 0, i 0, i 0)'
${EndIf}
; Remove all shortcuts
${If} $ctlAllUsers == "1"
SetShellVarContext current
Call GetEnvPaths
!insertmacro RemoveShortcuts
!insertmacro UAC_AsUser_Call Function GetEnvPaths ${UAC_SYNCREGISTERS}
!insertmacro RemoveShortcuts
SetShellVarContext all
Call GetEnvPaths
!insertmacro RemoveShortcuts
${Else}
SetShellVarContext all
Call GetEnvPaths
!insertmacro RemoveShortcuts
SetShellVarContext current
Call GetEnvPaths
!insertmacro RemoveShortcuts
!insertmacro UAC_AsUser_Call Function GetEnvPaths ${UAC_SYNCREGISTERS}
!insertmacro RemoveShortcuts
${EndIf}
; Create shortcuts ($1=$SMPROGRAMS, $2=$SMSTARTUP, $3=$DESKTOP)
CreateDirectory "$1\Rainmeter"
CreateShortCut "$1\Rainmeter\Rainmeter.lnk" "$INSTDIR\Rainmeter.exe" "" "$INSTDIR\Rainmeter.exe" 0
SetOutPath "$INSTDIR"
${If} $ctlStartup == "1"
CreateShortCut "$2\Rainmeter.lnk" "$INSTDIR\Rainmeter.exe" "" "$INSTDIR\Rainmeter.exe" 0
${EndIf}
${If} $ctlDesktop == "1"
CreateShortCut "$3\Rainmeter.lnk" "$INSTDIR\Rainmeter.exe" "" "$INSTDIR\Rainmeter.exe" 0
${EndIf}
WriteUninstaller "$INSTDIR\uninst.exe"
${Else}
${IfNot} ${FileExists} "Rainmeter.ini"
CopyFiles /SILENT "$INSTDIR\Themes\illustro default\Rainmeter.thm" "$INSTDIR\Rainmeter.ini"
${EndIf}
WriteINIStr "$INSTDIR\Rainmeter.ini" "Rainmeter" "Language" "$LANGUAGE"
${EndIf}
SectionEnd
Function GetEnvPaths
StrCpy $1 $SMPROGRAMS
StrCpy $2 $SMSTARTUP
StrCpy $3 $DESKTOP
FunctionEnd
Function FinishRun
!insertmacro UAC_AsUser_ExecShell "" "$INSTDIR\Rainmeter.exe" "" "" ""
FunctionEnd
; Uninstall
; --------------------------------------
Function un.onInit
UAC_TryAgain:
; Request administrative rights
!insertmacro UAC_RunElevated
${Switch} $0
${Case} 0
${IfThen} $1 = 1 ${|} Quit ${|}
${IfThen} $3 <> 0 ${|} ${Break} ${|}
${If} $1 = 3
MessageBox MB_OK|MB_ICONSTOP|MB_TOPMOST|MB_SETFOREGROUND "$(ADMINERROR)" /SD IDNO IDOK UAC_TryAgain IDNO 0
${EndIf}
${Case} 1223
Quit
${Case} 1062
MessageBox MB_OK|MB_ICONSTOP|MB_TOPMOST|MB_SETFOREGROUND "$(LOGONERROR)"
Quit
${Default}
MessageBox MB_OK|MB_ICONSTOP|MB_TOPMOST|MB_SETFOREGROUND "$(UACERROR) ($0)"
Quit
${EndSwitch}
ReadRegStr $0 HKLM "SOFTWARE\Rainmeter" "Language"
${If} $0 != ""
StrCpy $LANGUAGE $0
${EndIf}
FunctionEnd
Function un.PageOptions
!insertmacro MUI_HEADER_TEXT "$(UNSTALLOPTIONS)" "$(UNSTALLOPTIONSDESC)"
nsDialogs::Create 1018
nsDialogs::SetRTL $(^RTL)
${NSD_CreateCheckbox} 0 0u 95% 12u "$(UNSTALLRAINMETER)"
Pop $0
EnableWindow $0 0
${NSD_Check} $0
${NSD_CreateCheckbox} 0 15u 70% 12u "$(UNSTALLSETTINGS)"
Pop $ctlDelete
${NSD_CreateLabel} 16 26u 95% 12u "$(UNSTALLSETTINGSDESC)"
nsDialogs::Show
FunctionEnd
Function un.GetOptions
${NSD_GetState} $ctlDelete $ctlDelete
FunctionEnd
Section Uninstall
FindWindow $0 "RainmeterTrayClass"
${If} $0 != "0"
Exec '"$INSTDIR\Rainmeter.exe" !RainmeterQuit'
; Wait up to for up to 5 seconds for Rainmeter to close
StrCpy $1 "0"
${DoWhile} ${ProcessExists} "Rainmeter.exe"
IntOp $1 $1 + 1
${If} $1 >= "10"
MessageBox MB_RETRYCANCEL|MB_ICONSTOP "$(RAINMETERCLOSEERROR)" IDRETRY +2
Quit
${EndIf}
Sleep 500
${Loop}
${EndIf}
RMDir /r "$TEMP\Rainmeter-Cache"
RMDir /r "$INSTDIR\Skins\Gnometer"
RMDir /r "$INSTDIR\Skins\Tranquil"
RMDir /r "$INSTDIR\Skins\Enigma"
RMDir /r "$INSTDIR\Skins\Arcs"
RMDir /r "$INSTDIR\Skins\illustro"
Delete "$INSTDIR\Skins\*.txt"
RMDir "$INSTDIR\Skins"
RMDir /r "$INSTDIR\Addons\RainThemes"
RMDir /r "$INSTDIR\Addons\RainBrowser"
RMDir /r "$INSTDIR\Addons\RainBackup"
RMDir /r "$INSTDIR\Addons\Rainstaller"
RMDir "$INSTDIR\Addons"
Delete "$INSTDIR\Plugins\*.*"
Delete "$INSTDIR\Plugins\Dependencies\*.*"
RMDir "$INSTDIR\Plugins"
RMDir /r "$INSTDIR\Languages"
RMDir /r "$INSTDIR\Themes"
Delete "$INSTDIR\*.*"
${If} $ctlDelete == "1"
RMDir /r "$INSTDIR\Skins"
RMDir /r "$INSTDIR\Addons"
RMDir /r "$INSTDIR\Plugins"
RMDir /r "$INSTDIR\Fonts"
${EndIf}
RMDir "$INSTDIR"
SetShellVarContext all
RMDir /r "$APPDATA\Rainstaller"
SetShellVarContext current
Call un.GetEnvPaths
!insertmacro RemoveShortcuts
${If} $ctlDelete == "1"
RMDir /r "$APPDATA\Rainmeter"
RMDir /r "$DOCUMENTS\Rainmeter\Skins"
RMDir "$DOCUMENTS\Rainmeter"
RMDir /r "$1\Rainmeter"
${EndIf}
!insertmacro UAC_AsUser_Call Function un.GetEnvPaths ${UAC_SYNCREGISTERS}
!insertmacro RemoveShortcuts
${If} $ctlDelete == "1"
RMDir /r "$APPDATA\Rainmeter"
RMDir /r "$DOCUMENTS\Rainmeter\Skins"
RMDir "$DOCUMENTS\Rainmeter"
${EndIf}
SetShellVarContext all
Call un.GetEnvPaths
!insertmacro RemoveShortcuts
DeleteRegKey HKLM "SOFTWARE\Rainmeter"
DeleteRegKey HKCR ".rmskin"
DeleteRegKey HKCR "Rainmeter skin"
DeleteRegKey HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Rainmeter"
System::Call 'Shell32::SHChangeNotify(i 0x8000000, i 0, i 0, i 0)'
SectionEnd
Function un.GetEnvPaths
StrCpy $1 $SMPROGRAMS
StrCpy $2 $SMSTARTUP
StrCpy $3 $DESKTOP
FunctionEnd

Binary file not shown.

View File

@ -0,0 +1,835 @@
/*
_____________________________________________________________________________
Process Functions Header v2.2
_____________________________________________________________________________
2008-2010 Erik Pilsits aka wraithdu
License: zlib/libpng
See documentation for more information about the following functions.
Usage in script:
1. !include "ProcFunc.nsh"
2. [Section|Function]
${ProcFunction} "Param1" "Param2" "..." $var
[SectionEnd|FunctionEnd]
ProcFunction=[GetProcessPID|GetProcessPath|GetProcessParent|GetProcessName|
EnumProcessPaths|ProcessWait|ProcessWait2|ProcessWaitClose|
CloseProcess|TerminateProcess|Execute]
There is also a LogicLib extension:
${If} ${ProcessExists} file.exe
...
${EndIf}
_____________________________________________________________________________
Thanks to:
_____________________________________________________________________________
Some functions based on work by Donald Miller and Phoenix1701@gmail.com
_____________________________________________________________________________
Individual documentation:
_____________________________________________________________________________
${ProcessExists} "[process]"
"[process]" ; Name or PID
Use with a LogicLib conditional command like If or Unless.
Evaluates to true if the process exists or false if it does not or
the CreateToolhelp32Snapshot fails.
${GetProcessPID} "[process]" $var
"[process]" ; Name or PID
$var(output) ; -2 - CreateToolhelp32Snapshot failed
; 0 - process does not exist
; >0 - PID
${GetProcessPath} "[process]" $var
"[process]" ; Name or PID
$var(output) ; -2 - CreateToolhelp32Snapshot failed
; -1 - OpenProcess failed
; 0 - process does not exist
; Or path to process
${GetProcessParent} "[process]" $var
"[process]" ; Name or PID
$var(output) ; -2 - CreateToolhelp32Snapshot failed
; 0 - process does not exist
; Or PPID
${GetProcessName} "[PID]" $var
"[PID]" ; PID
$var(output) ; -2 - CreateToolhelp32Snapshot failed
; 0 - process does not exist
; Or process name
${EnumProcessPaths} "Function" $var
"Function" ; Callback function
$var(output) ; -2 - EnumProcesses failed
; 1 - success
Function "Function"
Pop $var1 ; matching path string
Pop $var2 ; matching process PID
...user commands
Push [1/0] ; must return 1 on the stack to continue
; must return some value or corrupt the stack
; DO NOT save data in $0-$9
FunctionEnd
${ProcessWait} "[process]" "[timeout]" $var
"[process]" ; Name
"[timeout]" ; -1 - do not timeout
; >0 - timeout in milliseconds
$var(output) ; -2 - CreateToolhelp32Snapshot failed
; -1 - operation timed out
; Or PID
${ProcessWait2} "[process]" "[timeout]" $var
"[process]" ; Name
"[timeout]" ; -1 - do not timeout
; >0 - timeout in milliseconds
$var(output) ; -1 - operation timed out
; Or PID
${ProcessWaitClose} "[process]" "[timeout]" $var
"[process]" ; Name
"[timeout]" ; -1 - do not timeout
; >0 - timeout in milliseconds
$var(output) ; -1 - operation timed out
; 0 - process does not exist
; Or PID of ended process
${CloseProcess} "[process]" $var
"[process]" ; Name or PID
$var(output) ; 0 - process does not exist
; Or PID of ended process
${TerminateProcess} "[process]" $var
"[process]" ; Name or PID
$var(output) ; -1 - operation failed
; 0 - process does not exist
; Or PID of ended process
${Execute} "[command]" "[working_dir]" $var
"[command]" ; '"X:\path\to\prog.exe" arg1 arg2 "arg3 with space"'
"[working_dir]" ; Working directory ("X:\path\to\dir") or nothing ("")
$var(output) ; 0 - failed to create process
; Or PID
*/
;_____________________________________________________________________________
;
; Macros
;_____________________________________________________________________________
;
; Change log window verbosity (default: 3=no script)
;
; Example:
; !include "ProcFunc.nsh"
; ${PROCFUNC_VERBOSE} 4 # all verbosity
; ${PROCFUNC_VERBOSE} 3 # no script
!ifndef PROCFUNC_INCLUDED
!define PROCFUNC_INCLUDED
!include Util.nsh
!include LogicLib.nsh
!verbose push
!verbose 3
!ifndef _PROCFUNC_VERBOSE
!define _PROCFUNC_VERBOSE 3
!endif
!verbose ${_PROCFUNC_VERBOSE}
!define PROCFUNC_VERBOSE `!insertmacro PROCFUNC_VERBOSE`
!verbose pop
!macro PROCFUNC_VERBOSE _VERBOSE
!verbose push
!verbose 3
!undef _PROCFUNC_VERBOSE
!define _PROCFUNC_VERBOSE ${_VERBOSE}
!verbose pop
!macroend
!define PROCESS_QUERY_INFORMATION 0x0400
!define PROCESS_TERMINATE 0x0001
!define PROCESS_VM_READ 0x0010
!define SYNCHRONIZE 0x00100000
!define WAIT_TIMEOUT 0x00000102
!ifdef NSIS_UNICODE
!define _PROCFUNC_WSTRING "&w260"
!else
!define _PROCFUNC_WSTRING "&w520"
!endif
!macro ProcessExists
!error "ProcessExists has been renamed to GetProcessPID"
!macroend
!macro _ProcessExists _a _b _t _f
!insertmacro _LOGICLIB_TEMP
!verbose push
!verbose ${_PROCFUNC_VERBOSE}
Push `${_b}`
${CallArtificialFunction} LLProcessExists_
IntCmp $_LOGICLIB_TEMP 0 `${_f}`
Goto `${_t}`
!verbose pop
!macroend
!define ProcessExists `"" ProcessExists`
!macro GetProcessPID
!macroend
!define GetProcessPID "!insertmacro GetProcessPIDCall"
!macro GetProcessPIDCall process outVar
!verbose push
!verbose ${_PROCFUNC_VERBOSE}
Push 0
Push `${process}`
!ifdef CallArtificialFunction_TYPE ; macro nesting disallowed, breaks otherwise if used from WaitClose
${CallArtificialFunction2} ProcFuncs_
!else
${CallArtificialFunction} ProcFuncs_
!endif
Pop ${outVar}
!verbose pop
!macroend
!macro GetProcessPath
!macroend
!define GetProcessPath "!insertmacro GetProcessPathCall"
!macro GetProcessPathCall process outVar
!verbose push
!verbose ${_PROCFUNC_VERBOSE}
Push 1
Push `${process}`
${CallArtificialFunction} ProcFuncs_
Pop ${outVar}
!verbose pop
!macroend
!macro GetProcessParent
!macroend
!define GetProcessParent "!insertmacro GetProcessParentCall"
!macro GetProcessParentCall process outVar
!verbose push
!verbose ${_PROCFUNC_VERBOSE}
Push 2
Push `${process}`
${CallArtificialFunction} ProcFuncs_
Pop ${outVar}
!verbose pop
!macroend
!macro GetProcessName
!macroend
!define GetProcessName "!insertmacro GetProcessNameCall"
!macro GetProcessNameCall process outVar
!verbose push
!verbose ${_PROCFUNC_VERBOSE}
Push 6
Push `${process}`
${CallArtificialFunction} ProcFuncs_
Pop ${outVar}
!verbose pop
!macroend
!macro EnumProcessPaths
!macroend
!define EnumProcessPaths "!insertmacro EnumProcessPathsCall"
!macro EnumProcessPathsCall user_func outVar
!verbose push
!verbose ${_PROCFUNC_VERBOSE}
Push $0
GetFunctionAddress $0 `${user_func}`
Push `$0`
${CallArtificialFunction} EnumProcessPaths_
Exch
Pop $0
Pop ${outVar}
!verbose pop
!macroend
!macro ProcessWait
!macroend
!define ProcessWait "!insertmacro ProcessWaitCall"
!macro ProcessWaitCall process timeout outVar
!verbose push
!verbose ${_PROCFUNC_VERBOSE}
Push `${timeout}`
Push `${process}`
${CallArtificialFunction} ProcessWait_
Pop ${outVar}
!verbose pop
!macroend
!macro ProcessWait2
!macroend
!define ProcessWait2 "!insertmacro ProcessWait2Call"
!macro ProcessWait2Call process timeout outVar
!verbose push
!verbose ${_PROCFUNC_VERBOSE}
Push `${timeout}`
Push `${process}`
${CallArtificialFunction} ProcessWait2_
Pop ${outVar}
!verbose pop
!macroend
!macro ProcessWaitClose
!macroend
!define ProcessWaitClose "!insertmacro ProcessWaitCloseCall"
!macro ProcessWaitCloseCall process timeout outVar
!verbose push
!verbose ${_PROCFUNC_VERBOSE}
Push `${timeout}`
Push `${process}`
${CallArtificialFunction} ProcessWaitClose_
Pop ${outVar}
!verbose pop
!macroend
!macro CloseProcess
!macroend
!define CloseProcess "!insertmacro CloseProcessCall"
!macro CloseProcessCall process outVar
!verbose push
!verbose ${_PROCFUNC_VERBOSE}
Push `${process}`
${CallArtificialFunction} CloseProcess_
Pop ${outVar}
!verbose pop
!macroend
!macro TerminateProcess
!macroend
!define TerminateProcess "!insertmacro TerminateProcessCall"
!macro TerminateProcessCall process outVar
!verbose push
!verbose ${_PROCFUNC_VERBOSE}
Push `${process}`
${CallArtificialFunction} TerminateProcess_
Pop ${outVar}
!verbose pop
!macroend
!macro Execute
!macroend
!define Execute "!insertmacro ExecuteCall"
!macro ExecuteCall cmdline wrkdir outVar
!verbose push
!verbose ${_PROCFUNC_VERBOSE}
Push `${wrkdir}`
Push `${cmdline}`
${CallArtificialFunction} Execute_
Pop ${outVar}
!verbose pop
!macroend
!macro ProcFuncs_
System::Store "s" ; store registers in System's private stack
Pop $0 ; process / PID
Pop $1 ; mode
Push 0 ; set return value if not found
; set mode of operation in $1
${Select} $1 ; mode 0 = GetProcessPID, mode 1 = GetProcessPath, mode 2 = GetProcessParent
${Case} 0
StrCpy $2 $0 4 -4
${If} $2 == ".exe"
; exists from process name
StrCpy $1 0
${Else}
; exists from pid
StrCpy $1 1
${EndIf}
${Case} 1
StrCpy $2 $0 4 -4
${If} $2 == ".exe"
; get path from process name
StrCpy $1 2
${Else}
; get path from pid
StrCpy $1 3
${EndIf}
${Case} 2
StrCpy $2 $0 4 -4
${If} $2 == ".exe"
; get parent from process name
StrCpy $1 4
${Else}
; get parent from pid
StrCpy $1 5
${EndIf}
${EndSelect}
System::Call '*(&l4,i,i,i,i,i,i,i,i,${_PROCFUNC_WSTRING})i .r2' ; $2 = PROCESSENTRY32W structure
; take system process snapshot in $3
System::Call 'kernel32::CreateToolhelp32Snapshot(i 2, i 0)i .r3'
${Unless} $3 = -1
System::Call 'kernel32::Process32FirstW(i r3, i r2)i .r4'
${Unless} $4 = 0
${Do}
${Select} $1
${Case3} 0 2 4
; get process name in $5
System::Call '*$2(i,i,i,i,i,i,i,i,i,${_PROCFUNC_WSTRING} .r5)'
${Case4} 1 3 5 6
; get process PID in $5
System::Call '*$2(i,i,i .r5)'
${EndSelect}
; is this process the one we are looking for?
${If} $5 == $0 ; string test works ok for numeric PIDs as well
${Select} $1 ; mode 0/1 = GetProcessPID, mode 2/3 = GetProcessPath, mode 4/5 = GetProcessParent, mode 6 = GetProcessName
${Case2} 0 1
; return pid
Pop $5 ; old return value
System::Call '*$2(i,i,i .s)'; process pid to stack
${Case2} 2 3
; return full path
Pop $5
; open process
System::Call '*$2(i,i,i .s)'; process pid to stack
System::Call 'kernel32::OpenProcess(i ${PROCESS_QUERY_INFORMATION}|${PROCESS_VM_READ}, i 0, i s)i .r5' ; process handle to $5
${Unless} $5 = 0
; full path to stack
System::Call 'psapi::GetModuleFileNameExW(i r5, i 0, w .s, i ${NSIS_MAX_STRLEN})'
System::Call 'kernel32::CloseHandle(i r5)'
${Else}
Push -1 ; OpenProcess failure return value
${EndUnless}
${Case2} 4 5
; return parent PID
Pop $5
System::Call '*$2(i,i,i,i,i,i,i .s)'; parent pid to stack
${Case} 6
; return base name
Pop $5
System::Call '*$2(i,i,i,i,i,i,i,i,i,${_PROCFUNC_WSTRING} .s)'
${EndSelect}
${Break}
${EndIf}
System::Call 'kernel32::Process32NextW(i r3, i r2)i .r4'
${LoopUntil} $4 = 0
System::Call 'kernel32::CloseHandle(i r3)' ; close snapshot
${EndUnless}
${Else}
Pop $5
Push -2 ; function failure return value
${EndUnless}
System::Free $2 ; free buffer
System::Store "l" ; restore registers
!macroend
!macro EnumProcessPaths_
System::Store "s" ; store registers in System's private stack
Pop $0 ; user_func
StrCpy $1 1 ; OK to loop
System::Alloc 1024
Pop $2 ; process list buffer
; get an array of all process ids
System::Call 'psapi::EnumProcesses(i r2, i 1024, *i .r3)i .r4' ; $3 = sizeof buffer
${Unless} $4 = 0
IntOp $3 $3 / 4 ; Divide by sizeof(DWORD) to get $3 process count
IntOp $3 $3 - 1 ; decrement for 0 base loop
${For} $4 0 $3
${IfThen} $1 != 1 ${|} ${Break} ${|}
; get a PID from the array
IntOp $5 $4 * 4 ; calculate offset
IntOp $5 $5 + $2 ; add offset to original buffer address
System::Call '*$5(i .r5)' ; get next PID = $5
${Unless} $5 = 0
System::Call 'kernel32::OpenProcess(i ${PROCESS_QUERY_INFORMATION}|${PROCESS_VM_READ}, i 0, i r5)i .r6'
${Unless} $6 = 0 ; $6 is hProcess
; get full path
System::Call 'psapi::GetModuleFileNameExW(i r6, i 0, w .r7, i ${NSIS_MAX_STRLEN})i .r8' ; $7 = path
${Unless} $8 = 0 ; no path
System::Store "s" ; store registers in System's private stack
Push $5 ; PID to stack
Push $7 ; path to stack
Call $0 ; user func must return 1 on the stack to continue looping
System::Store "l" ; restore registers
Pop $1 ; continue?
${EndUnless}
System::Call 'kernel32::CloseHandle(i r6)'
${EndUnless}
${EndUnless}
${Next}
Push 1 ; return value
${Else}
Push -2 ; function failure return value
${EndUnless}
System::Free $2 ; free buffer
System::Store "l" ; restore registers
!macroend
!macro ProcessWait_
System::Store "s" ; store registers in System's private stack
Pop $0 ; process
Pop $1 ; timeout
StrCpy $6 1 ; initialize loop
StrCpy $7 0 ; initialize timeout counter
System::Call '*(&l4,i,i,i,i,i,i,i,i,${_PROCFUNC_WSTRING})i .r2' ; $2 = PROCESSENTRY32W structure
${DoWhile} $6 = 1 ; processwait loop
; take system process snapshot in $3
System::Call 'kernel32::CreateToolhelp32Snapshot(i 2, i 0)i .r3'
${Unless} $3 = -1
System::Call 'kernel32::Process32FirstW(i r3, i r2)i .r4'
${Unless} $4 = 0
${Do}
; get process name in $5
System::Call '*$2(i,i,i,i,i,i,i,i,i,${_PROCFUNC_WSTRING} .r5)'
${If} $5 == $0
; exists, return pid
System::Call '*$2(i,i,i .s)'; process pid to stack ; process pid
StrCpy $6 0 ; end loop
${Break}
${EndIf}
System::Call 'kernel32::Process32NextW(i r3, i r2)i .r4'
${LoopUntil} $4 = 0
System::Call 'kernel32::CloseHandle(i r3)' ; close snapshot
${EndUnless}
${Else}
Push -2
${Break}
${EndUnless}
; timeout loop
${If} $6 = 1
${If} $1 >= 0
IntOp $7 $7 + 500 ; increment timeout counter
${AndIf} $7 >= $1 ; timed out, break loop
Push -1 ; timeout return value
${Break} ; end loop if timeout
${EndIf}
Sleep 500 ; pause before looping
${EndIf}
${Loop} ; processwaitloop
System::Free $2 ; free buffer
System::Store "l" ; restore registers
!macroend
!macro ProcessWait2_
System::Store "s" ; store registers in System's private stack
System::Store "P0" ; FindProcDLL return value
Pop $0 ; process
Pop $1 ; timeout
StrCpy $2 0 ; initialize timeout counter
${Do}
FindProcDLL::FindProc $0
${IfThen} $R0 = 1 ${|} ${Break} ${|}
${If} $1 >= 0
IntOp $2 $2 + 250
${AndIf} $2 >= $1
Push -1 ; timeout return value
${Break}
${EndIf}
Sleep 250
${Loop}
${If} $R0 = 1 ; success, get pid
${GetProcessPID} $0 $0
Push $0 ; return pid
${EndIf}
System::Store "R0" ; restore registers
System::Store "l"
!macroend
!macro ProcessWaitClose_
System::Store "s" ; store registers in System's private stack
Pop $0 ; process / PID
Pop $1 ; timeout
; passed process name or pid
StrCpy $2 $0 4 -4
${If} $2 == ".exe"
${GetProcessPID} $0 $0
${EndIf}
; else passed pid directly
${Unless} $0 = 0
System::Call 'kernel32::OpenProcess(i ${SYNCHRONIZE}, i 0, i r0)i .r2'
${Unless} $2 = 0 ; $2 is hProcess
System::Call 'kernel32::WaitForSingleObject(i r2, i $1)i .r1'
${If} $1 = ${WAIT_TIMEOUT}
Push -1 ; timed out
${Else}
Push $0 ; return pid of ended process
${EndIf}
System::Call 'kernel32::CloseHandle(i r2)'
${Else}
Push 0 ; failure return value
${EndUnless}
${Else}
Push 0 ; failure return value
${EndUnless}
System::Store "l" ; restore registers
!macroend
!macro CloseProcess_
System::Store "s" ; store registers in System's private stack
Pop $0 ; process / PID
; passed process name or pid
StrCpy $1 $0 4 -4
${If} $1 == ".exe"
${GetProcessPID} $0 $0
${EndIf}
; else passed pid directly
${Unless} $0 = 0 ; $0 = target pid
Push $0 ; return pid of process
; use EnumWindows and a callback
System::Get '(i .r1, i)i sr4' ; $1 = hwnd, $4 = callback#, s (stack) = source for return value
Pop $3 ; $3 = callback address
System::Call 'user32::EnumWindows(k r3, i)i' ; enumerate top-level windows
${DoWhile} $4 == "callback1"
System::Call 'user32::GetWindowThreadProcessId(i r1, *i .r2)i' ; $2 = pid that created the window
${If} $2 = $0 ; match to target pid
SendMessage $1 16 0 0 /TIMEOUT=1 ; send WM_CLOSE to all top-level windows owned by process, timeout immediately
${EndIf}
Push 1 ; callback return value; keep enumerating windows (returning 0 stops)
StrCpy $4 "" ; clear callback#
System::Call '$3' ; return from callback
${Loop}
System::Free $3 ; free callback
${Else}
Push 0 ; failure return value
${EndUnless}
System::Store "l" ; restore registers
!macroend
!macro TerminateProcess_
System::Store "s" ; store registers in System's private stack
Pop $0 ; process / PID
; passed process name or pid
StrCpy $1 $0 4 -4
${If} $1 == ".exe"
${GetProcessPID} $0 $0
${EndIf}
; else passed pid directly
${Unless} $0 = 0
System::Call 'kernel32::OpenProcess(i ${PROCESS_TERMINATE}, i 0, i r0)i .r1'
${Unless} $1 = 0 ; $1 is hProcess
System::Call 'kernel32::TerminateProcess(i r1, i 0)i .r1'
${If} $1 = 0 ; fail
Push -1
${Else}
Push $0 ; return pid of ended process
${EndIf}
System::Call 'kernel32::CloseHandle(i r1)'
${Else}
Push 0 ; failure return value
${EndUnless}
${Else}
Push 0 ; failure return value
${EndUnless}
System::Store "l" ; restore registers
!macroend
!macro Execute_
System::Store "s" ; store registers in System's private stack
Pop $0 ; cmdline
Pop $1 ; wrkdir
System::Alloc 68 ; 4*16 + 2*2 / STARTUPINFO structure = $2
Pop $2
System::Call '*$2(i 68)' ; set cb = sizeof(STARTUPINFO)
System::Call '*(i,i,i,i)i .r3' ; PROCESS_INFORMATION structure = $3
${If} $1 == ""
StrCpy $1 "i"
${Else}
StrCpy $1 'w "$1"'
${EndIf}
System::Call `kernel32::CreateProcessW(i, w '$0', i, i, i 0, i 0, i, $1, i r2, i r3)i .r4` ; return 0 if fail
${Unless} $4 = 0 ; failed to create process
System::Call '*$3(i .r4, i .r5, i .r6)' ; read handles and PID
System::Call 'kernel32::CloseHandle(i $4)' ; close hProcess
System::Call 'kernel32::CloseHandle(i $5)' ; close hThread
Push $6 ; return PID
${Else}
Push 0 ; return val if failed
${EndUnless}
System::Free $2 ; free STARTUPINFO struct
System::Free $3 ; free PROCESS_INFORMATION struct
System::Store "l" ; restore registers
!macroend
!macro LLProcessExists_
System::Store "s" ; store registers in System's private stack
Pop $0 ; process name
StrCpy $_LOGICLIB_TEMP 0
System::Call '*(&l4,i,i,i,i,i,i,i,i,${_PROCFUNC_WSTRING})i .r2' ; $2 = PROCESSENTRY32W structure
; take system process snapshot in $3
System::Call 'kernel32::CreateToolhelp32Snapshot(i 2, i 0)i .r3'
IntCmp $3 -1 done
System::Call 'kernel32::Process32FirstW(i r3, i r2)i .r4'
IntCmp $4 0 endloop
loop:
System::Call '*$2(i,i,i,i,i,i,i,i,i,${_PROCFUNC_WSTRING} .r5)'
StrCmp $5 $0 0 next_process
StrCpy $_LOGICLIB_TEMP 1
Goto endloop
next_process:
System::Call 'kernel32::Process32NextW(i r3, i r2)i .r4'
IntCmp $4 0 endloop
Goto loop
endloop:
System::Call 'kernel32::CloseHandle(i r3)' ; close snapshot
done:
System::Free $2 ; free buffer
System::Store "l" ; restore registers
!macroend
!endif ; PROCFUNC_INCLUDED
/****************************************************************************
Functions
=========
HANDLE WINAPI OpenProcess(
__in DWORD dwDesiredAccess,
__in BOOL bInheritHandle,
__in DWORD dwProcessId
);
BOOL WINAPI CreateProcess(
__in_opt LPCTSTR lpApplicationName,
__inout_opt LPTSTR lpCommandLine,
__in_opt LPSECURITY_ATTRIBUTES lpProcessAttributes,
__in_opt LPSECURITY_ATTRIBUTES lpThreadAttributes,
__in BOOL bInheritHandles,
__in DWORD dwCreationFlags,
__in_opt LPVOID lpEnvironment,
__in_opt LPCTSTR lpCurrentDirectory,
__in LPSTARTUPINFO lpStartupInfo,
__out LPPROCESS_INFORMATION lpProcessInformation
);
typedef struct _STARTUPINFO {
DWORD cb;
LPTSTR lpReserved;
LPTSTR lpDesktop;
LPTSTR lpTitle;
DWORD dwX;
DWORD dwY;
DWORD dwXSize;
DWORD dwYSize;
DWORD dwXCountChars;
DWORD dwYCountChars;
DWORD dwFillAttribute;
DWORD dwFlags;
WORD wShowWindow;
WORD cbReserved2;
LPBYTE lpReserved2;
HANDLE hStdInput;
HANDLE hStdOutput;
HANDLE hStdError;
} STARTUPINFO,
*LPSTARTUPINFO;
typedef struct _PROCESS_INFORMATION {
HANDLE hProcess;
HANDLE hThread;
DWORD dwProcessId;
DWORD dwThreadId;
} PROCESS_INFORMATION,
*LPPROCESS_INFORMATION;
BOOL WINAPI EnumProcesses(
__out DWORD* pProcessIds,
__in DWORD cb,
__out DWORD* pBytesReturned
);
DWORD WINAPI GetModuleBaseName(
__in HANDLE hProcess,
__in_opt HMODULE hModule,
__out LPTSTR lpBaseName,
__in DWORD nSize
);
DWORD WINAPI GetModuleFileNameEx(
__in HANDLE hProcess,
__in_opt HMODULE hModule,
__out LPTSTR lpFilename,
__in DWORD nSize
);
BOOL WINAPI CloseHandle(
__in HANDLE hObject
);
DWORD WINAPI WaitForSingleObject(
__in HANDLE hHandle,
__in DWORD dwMilliseconds
);
BOOL WINAPI TerminateProcess(
__in HANDLE hProcess,
__in UINT uExitCode
);
BOOL EnumWindows(
__in WNDENUMPROC lpEnumFunc,
__in LPARAM lParam
);
DWORD GetWindowThreadProcessId(
__in HWND hWnd,
__out LPDWORD lpdwProcessId
);
BOOL PostMessage(
__in HWND hWnd,
__in UINT Msg,
__in WPARAM wParam,
__in LPARAM lParam
);
****************************************************************************/

BIN
Build/Installer/UAC.dll Normal file

Binary file not shown.

200
Build/Installer/UAC.nsh Normal file
View File

@ -0,0 +1,200 @@
!ifndef UAC_HDR__INC
!verbose push
!verbose 3
!ifndef UAC_VERBOSE
!define UAC_VERBOSE 3
!endif
!verbose ${UAC_VERBOSE}
!define UAC_HDR__INC 0x00020204 ;MMmmbbrr
!include LogicLib.nsh
!macro _UAC_definemath def val1 op val2
!define /math _UAC_definemath "${val1}" ${op} ${val2}
!ifdef ${def}
!undef ${def}
!endif
!define ${def} "${_UAC_definemath}"
!undef _UAC_definemath
!macroend
!macro _UAC_ParseDefineFlags_orin parse outflags
!searchparse /noerrors ${${parse}} "" _UAC_ParseDefineFlags_orin_f1 "|" _UAC_ParseDefineFlags_orin_f2
!define _UAC_ParseDefineFlags_orin_this ${_UAC_ParseDefineFlags_orin_f1}
!undef ${parse}
!define ${parse} ${_UAC_ParseDefineFlags_orin_f2}
!define _UAC_ParseDefineFlags_orin_saveout ${${outflags}}
!undef ${outflags}
!define /math ${outflags} "${_UAC_ParseDefineFlags_orin_saveout}" | "${_UAC_ParseDefineFlags_orin_this}"
!undef _UAC_ParseDefineFlags_orin_saveout
!undef _UAC_ParseDefineFlags_orin_this
!ifdef _UAC_ParseDefineFlags_orin_f1
!undef _UAC_ParseDefineFlags_orin_f1
!undef _UAC_ParseDefineFlags_orin_f2
!endif
!macroend
!macro _UAC_ParseDefineFlags_Begin _outdef _in
!define _UAC_PDF${_outdef}_parse "${_in}"
!define _UAC_PDF${_outdef}_flags ""
!define _UAC_PDF${_outdef}_r 0
!insertmacro _UAC_ParseDefineFlags_orin _UAC_PDF${_outdef}_parse _UAC_PDF${_outdef}_flags ;0x1
!insertmacro _UAC_ParseDefineFlags_orin _UAC_PDF${_outdef}_parse _UAC_PDF${_outdef}_flags ;0x2
!insertmacro _UAC_ParseDefineFlags_orin _UAC_PDF${_outdef}_parse _UAC_PDF${_outdef}_flags ;0x4
!insertmacro _UAC_ParseDefineFlags_orin _UAC_PDF${_outdef}_parse _UAC_PDF${_outdef}_flags ;0x8
!insertmacro _UAC_ParseDefineFlags_orin _UAC_PDF${_outdef}_parse _UAC_PDF${_outdef}_flags ;0x10
!macroend
!macro _UAC_ParseDefineFlags_End _outdef
!define ${_outdef} ${_UAC_PDF${_outdef}_r}
!undef _UAC_PDF${_outdef}_r
!undef _UAC_PDF${_outdef}_flags
!undef _UAC_PDF${_outdef}_parse
!macroend
!macro _UAC_ParseDefineFlags_IncludeFlag _outdef flag
!if ${_UAC_PDF${_outdef}_flags} & ${flag}
!insertmacro _UAC_definemath _UAC_PDF${_outdef}_r ${_UAC_PDF${_outdef}_r} | ${flag}
!endif
!macroend
!macro _UAC_ParseDefineFlagsToInt _outdef _in
!insertmacro _UAC_ParseDefineFlags_Begin _UAC_ParseDefineFlagsToInt_tmp "${_in}"
!define ${_outdef} ${_UAC_PDF_UAC_ParseDefineFlagsToInt_tmp_flags}
!insertmacro _UAC_ParseDefineFlags_End _UAC_ParseDefineFlagsToInt_tmp
!undef _UAC_ParseDefineFlagsToInt_tmp
!macroend
!macro _UAC_IncL
!insertmacro _UAC_definemath __UAC_L "${__UAC_L}" + 1
!macroend
!macro _UAC_MakeLL_Cmp cmpop cmp pluginparams
!insertmacro _LOGICLIB_TEMP
UAC::_ ${pluginparams}
pop $_LOGICLIB_TEMP
!insertmacro ${cmpop} $_LOGICLIB_TEMP ${cmp} `${_t}` `${_f}`
!macroend
!macro UAC_RunElevated
UAC::_ 0
!macroend
!macro UAC_PageElevation_RunElevated
UAC::_ 0
!macroend
/*!macro UAC_OnInitElevation_RunElevated
UAC::_ 0
!macroend
!macro UAC_OnInitElevation_OnGuiInit
!macroend*/
!macro UAC_IsAdmin
UAC::_ 2
!macroend
!define UAC_IsAdmin `"" UAC_IsAdmin ""`
!macro _UAC_IsAdmin _a _b _t _f
!insertmacro _UAC_MakeLL_Cmp _!= 0 2s
!macroend
!macro UAC_IsInnerInstance
UAC::_ 3
!macroend
!define UAC_IsInnerInstance `"" UAC_IsInnerInstance ""`
!macro _UAC_IsInnerInstance _a _b _t _f
!insertmacro _UAC_MakeLL_Cmp _!= 0 3s
!macroend
!macro UAC_Notify_OnGuiInit
UAC::_ 4
!macroend
!macro UAC_PageElevation_OnGuiInit
!insertmacro UAC_Notify_OnGuiInit
!macroend
!macro UAC_PageElevation_OnInit
UAC::_ 5
${IfThen} ${Errors} ${|} Quit ${|}
!macroend
!define UAC_SYNCREGISTERS 0x1
#!define UAC_SYNCSTACK 0x2
!define UAC_SYNCOUTDIR 0x4
!define UAC_SYNCINSTDIR 0x8
#!define UAC_CLEARERRFLAG 0x10
!macro UAC_AsUser_Call type name flags
push $0
Get${type}Address $0 ${name}
!verbose push
!verbose ${UAC_VERBOSE}
!insertmacro _UAC_ParseDefineFlagsToInt _UAC_AsUser_Call__flags ${flags}
!verbose pop
StrCpy $0 "1$0:${_UAC_AsUser_Call__flags}"
!undef _UAC_AsUser_Call__flags
Exch $0
UAC::_
!macroend
!macro _UAC_AsUser_GenOp outvar op opparam1 opparam2
!define _UAC_AUGOGR_ID _UAC_AUGOGR_OP${outvar}${op}${opparam1}${opparam2}
!ifndef ${_UAC_AUGOGR_ID} ;Has this exact action been done before?
!if ${outvar} == $0
!define ${_UAC_AUGOGR_ID} $1
!else
!define ${_UAC_AUGOGR_ID} $0
!endif
!if "${opparam1}" == ""
!define _UAC_AUGOGR_OPP1 ${${_UAC_AUGOGR_ID}}
!define _UAC_AUGOGR_OPP2 ${opparam2}
!else
!define _UAC_AUGOGR_OPP1 ${opparam1}
!define _UAC_AUGOGR_OPP2 ${${_UAC_AUGOGR_ID}}
!endif
goto ${_UAC_AUGOGR_ID}_C
${_UAC_AUGOGR_ID}_F:
${op} ${_UAC_AUGOGR_OPP1} ${_UAC_AUGOGR_OPP2}
return
${_UAC_AUGOGR_ID}_C:
!undef _UAC_AUGOGR_OPP1
!undef _UAC_AUGOGR_OPP2
!endif
push ${${_UAC_AUGOGR_ID}}
!insertmacro UAC_AsUser_Call Label ${_UAC_AUGOGR_ID}_F ${UAC_SYNCREGISTERS}
StrCpy ${outvar} ${${_UAC_AUGOGR_ID}}
pop ${${_UAC_AUGOGR_ID}}
!undef _UAC_AUGOGR_ID
!macroend
!macro UAC_AsUser_GetSection datatype secidx outvar
!insertmacro _UAC_AsUser_GenOp ${outvar} SectionGet${datatype} ${secidx} ""
!macroend
!macro UAC_AsUser_GetGlobalVar var
!insertmacro _UAC_AsUser_GenOp ${var} StrCpy "" ${var}
!macroend
!macro UAC_AsUser_GetGlobal outvar srcvar
!insertmacro _UAC_AsUser_GenOp ${outvar} StrCpy "" ${srcvar}
!macroend
!macro UAC_AsUser_ExecShell verb command params workdir show
!insertmacro _UAC_IncL
goto _UAC_L_E_${__UAC_L}
_UAC_L_F_${__UAC_L}:
ExecShell "${verb}" "${command}" ${params} ${show}
return
_UAC_L_E_${__UAC_L}:
!if "${workdir}" != ""
push $outdir
SetOutPath "${workdir}"
!endif
!insertmacro UAC_AsUser_Call Label _UAC_L_F_${__UAC_L} ${UAC_SYNCREGISTERS}|${UAC_SYNCOUTDIR}|${UAC_SYNCINSTDIR} #|${UAC_CLEARERRFLAG}
!if "${workdir}" != ""
pop $outdir
SetOutPath $outdir
!endif
!macroend
!verbose pop
!endif /* UAC_HDR__INC */

BIN
Build/Installer/Wizard.bmp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

47
Build/Instructions.txt Normal file
View File

@ -0,0 +1,47 @@
Building
--------------------------
Note: If you already have any paid version of Visual Studio 2010 installed (e.g. Professional, Premium, Ultimate, etc.), simply open Rainmeter.sln to build (and skip the instructions below).
* To build Rainmeter and C++ plugins, install the following tools in the listed order:
1. Visual C++ 2010 Express Edition
2. Visual Studio 2010 SP1 (yes, this is for Visual C++ 2010 as well)
3. Windows 7.1 SDK
4. KB2519277 compiler update
5. Open RainmeterCPP.sln to build.
* To build Rainmeter, C/C++ plugins, and C# plugins, install the following tools in the listed order:
1. Visual C++ 2010 Express Edition
2. Visual C# 2010 Express Edition
3. Visual Studio 2010 SP1 (yes, this is for Visual C++/C# 2010 as well)
4. Windows 7.1 SDK
5. KB2519277 compiler update
6. Open Rainmeter.sln to build.
* To build only C# plugins, install the following tools in the listed order:
7. Visual C# 2010 Express Edition
8. Visual Studio 2010 SP1 (yes, this is for Visual C++/C# 2010 as well)
9. Open RainmeterCS.sln to build.
Building installer
--------------------------
To build the full Rainmeter distribution, run Build.bat. If you receive "not found" errors, open Build.bat and change the variables at the top to match your system.
To sign the installer and the Rainmeter executables, create a Certificate.bat file alongside Build.bat with the following contents:
set CERTFILE=/path/to/PFXcert.p12
set CERTKEY=certpassword
Building old versions
--------------------------
The Rainmeter GitHub repository does not contain the full source code history required to build the installer for versions prior to r1249. To obtain the full source from r1 to r1248, use the old Google Code SVN repository located at:
http://rainmeter.googlecode.com/svn
The build instructions above are applicable to r1130 - r1248. Build instructions for r27 - r1129 can be found in svn/wiki/.
The language files for r963 - r1214 were in a separate repository (svn:externals), which is not available any longer. As a result, the language .dll's for those revisions cannot be built.

View File

@ -0,0 +1,139 @@
; Lines starting ; (semicolons) are commented out.
; That is, they do not affect the code and are here for demonstration purposes only.
; ----------------------------------
[Rainmeter]
; This section contains general settings that can be used to change how Rainmeter behaves.
Author=poiru
AppVersion=2000000
Update=1000
Background=#ROOTCONFIGPATH#SHARED\Background.png
; #ROOTCONFIGPATH# is a global variable. In this case, the value of the variable
; is equal to DocumentsPath\Rainmeter\Skins\illustro\
BackgroundMode=3
BackgroundMargins=0,34,0,14
[Metadata]
; Contains basic information of the skin.
Description=Displays the current date and time.
License=Creative Commons BY-NC-SA 3.0
Version=1.0.0
[Variables]
; Variables declared here can be used later on between two # characters (e.g. #MyVariable#).
fontName=Trebuchet MS
textSize=8
colorBar=235,170,0,255
colorText=255,255,255,205
; ----------------------------------
; MEASURES return some kind of value
; ----------------------------------
[measureTime]
; This measure returns the time in a 24-hour format (i.e. HH:MM).
Measure=Time
Format=%H:%M
; For a 12-hour clock, change the Format option above to: %I:%M %p
; Refer to the Rainmeter manual for other format codes.
[measureDate]
; Returns the date as DD.MM.YYYY
Measure=Time
Format=%d.%m.%Y
[measureDay]
; Returns the current day
Measure=Time
Format=%A
; ----------------------------------
; STYLES are used to "centralize" options
; ----------------------------------
[styleTitle]
StringAlign=CENTER
StringCase=UPPER
StringStyle=BOLD
StringEffect=SHADOW
FontEffectColor=0,0,0,50
FontColor=#colorText#
FontFace=#fontName#
FontSize=10
AntiAlias=1
ClipString=1
[styleLeftText]
StringAlign=LEFT
; Meters using styleLeftText will be left-aligned.
StringCase=NONE
StringStyle=BOLD
StringEffect=SHADOW
FontEffectColor=0,0,0,20
FontColor=#colorText#
FontFace=#fontName#
FontSize=#textSize#
AntiAlias=1
ClipString=1
[styleRightText]
StringAlign=RIGHT
StringCase=NONE
StringStyle=BOLD
StringEffect=SHADOW
FontEffectColor=0,0,0,20
FontColor=#colorText#
FontFace=#fontName#
FontSize=#textSize#
AntiAlias=1
ClipString=1
[styleSeperator]
SolidColor=255,255,255,15
; ----------------------------------
; METERS display images, text, bars, etc.
; ----------------------------------
[meterTitle]
Meter=STRING
MeterStyle=styleTitle
; Using MeterStyle=styleTitle will basically "copy" the
; contents of the [styleTitle] section here during runtime.
MeasureName=measureTime
X=100
Y=12
W=190
H=18
Text="%1"
; %1 stands for the value of MeasureName (measureTime in this case).
[meterDay]
Meter=STRING
MeterStyle=styleLeftText
MeasureName=measureDay
X=10
Y=40
W=190
H=14
Text="%1"
[meterDate]
Meter=STRING
MeterStyle=styleRightText
MeasureName=measureDate
X=200
Y=0r
; r stands for relative. In this case, the Y postition of meterValueCPU is 0 pixels
; below the Y value of the previous meter (i.e it's the same as in meterLabelCPU).
W=190
H=14
Text="%1"
[meterSeperator]
Meter=IMAGE
MeterStyle=styleSeperator
X=10
Y=52
W=190
H=1

View File

@ -0,0 +1,150 @@
; Lines starting ; (semicolons) are commented out.
; That is, they do not affect the code and are here for demonstration purposes only.
; ----------------------------------
; NOTE! If you want to add more disks, take a look at 'Disks 2.ini'.
[Rainmeter]
; This section contains general settings that can be used to change how Rainmeter behaves.
Author=poiru
AppVersion=2000000
Update=1000
Background=#ROOTCONFIGPATH#SHARED\Background.png
; #ROOTCONFIGPATH# is a global variable. In this case, the value of the variable
; is equal to DocumentsPath\Rainmeter\Skins\illustro\
BackgroundMode=3
BackgroundMargins=0,34,0,14
[Metadata]
; Contains basic information of the skin.
Description=Displays disk usage.
License=Creative Commons BY-NC-SA 3.0
Version=1.0.0
[Variables]
; Variables declared here can be used later on between two # characters (e.g. #MyVariable#).
fontName=Trebuchet MS
textSize=8
colorBar=235,170,0,255
colorText=255,255,255,205
disk1=C:
; ----------------------------------
; MEASURES return some kind of value
; ----------------------------------
[measureTotalDisk1]
; This measure returns the total disk space
Measure=FreeDiskSpace
Drive=#disk1#
Total=1
UpdateDivider=120
[measureUsedDisk1]
; Returns inverted value of free disk space (i.e. used disk space)
Measure=FreeDiskSpace
Drive=#disk1#
InvertMeasure=1
UpdateDivider=120
; ----------------------------------
; STYLES are used to "centralize" options
; ----------------------------------
[styleTitle]
StringAlign=CENTER
StringCase=UPPER
StringStyle=BOLD
StringEffect=SHADOW
FontEffectColor=0,0,0,50
FontColor=#colorText#
FontFace=#fontName#
FontSize=10
AntiAlias=1
ClipString=1
[styleLeftText]
StringAlign=LEFT
; Meters using styleLeftText will be left-aligned.
StringCase=NONE
StringStyle=BOLD
StringEffect=SHADOW
FontEffectColor=0,0,0,20
FontColor=#colorText#
FontFace=#fontName#
FontSize=#textSize#
AntiAlias=1
ClipString=1
[styleRightText]
StringAlign=RIGHT
StringCase=NONE
StringStyle=BOLD
StringEffect=SHADOW
FontEffectColor=0,0,0,20
FontColor=#colorText#
FontFace=#fontName#
FontSize=#textSize#
AntiAlias=1
ClipString=1
[styleBar]
BarColor=#colorBar#
BarOrientation=HORIZONTAL
SolidColor=255,255,255,15
; ----------------------------------
; METERS display images, text, bars, etc.
; ----------------------------------
[meterTitle]
Meter=STRING
MeterStyle=styleTitle
; Using MeterStyle=styleTitle will basically "copy" the
; contents of the [styleTitle] section here during runtime.
X=100
Y=12
W=190
H=18
Text="Disks"
; Even though the text is set to Disks, Rainmeter will display
; it as DISKS, because styleTitle contains StringCase=UPPER.
[meterLabelDisk1]
Meter=STRING
MeterStyle=styleLeftText
X=10
Y=40
W=190
H=14
Text="#disk1#\"
[meterValueDisk1]
Meter=STRING
MeterStyle=styleRightText
MeasureName=measureUsedDisk1
MeasureName2=measureTotalDisk1
X=200
Y=0r
; r stands for relative. In this case, the Y postition of meterValueCPU is 0 pixels
; below the Y value of the previous meter (i.e it's the same as in meterLabelCPU).
W=190
H=14
Text="%1B/%2B used"
; %1 stands for the value of MeasureName (measureUsedDisk1 in this case).
; %2 stands for the value of MeasureName2.
NumOfDecimals=1
AutoScale=1
; Because disk measures return the free/used space in bytes, we must use AutoScale=1 to
; automatically scale the value into a more readable figure.
LeftMouseUpAction=!Execute ["#disk1#\"]
; Open #disk1# on click
[meterBarDisk1]
Meter=BAR
MeterStyle=styleBar
MeasureName=measureUsedDisk1
X=10
Y=52
W=190
H=1

View File

@ -0,0 +1,210 @@
; Lines starting ; (semicolons) are commented out.
; That is, they do not affect the code and are here for demonstration purposes only.
; ----------------------------------
; HOWTO: Adding more disks
; ----------------------------------
; Adding more disks is a pretty straightforward process. Follow the following steps to turn
; this 2 disks skin into a 3 disks skin. You can then extend it even further as you wish.
;
; 1) Create a new variable called disk3=X: directly below disk2=D: in the [Variables] section
; 2) Create a copy of the [measureTotalDisk2] and [measureUsedDisk2] sections
; 3) Rename the copied sections to [measureTotalDisk3] and [measureUsedDisk3], respectively.
; Also change Drive=#disk2# to Drive=#disk3#
; 4) Create a copy of the [meterLabelDisk2], [meterValueDisk2], and [meterBarDisk2].
; Rename all Disk2's in the copied sections to Disk3.
; 5) Now we need to change the Y= values to adjust height. Change Y= under [meterLabelDisk2]
; to Y=80 (calculated by adding 20 to the Y= value of previous meterLabel).
; Then change Y= under [meterBarDisk3] to Y=92 (calculated by adding 20 to the Y= value of previous meterBar).
; 6) Save the file as '3 Disks.ini'. Now right-click on the Rainmeter tray icon and select
; 'Refresh All'. Now go activate the '3 Disks.ini' skin and enjoy! :)
[Rainmeter]
; This section contains general settings that can be used to change how Rainmeter behaves.
Author=poiru
AppVersion=2000000
Update=1000
Background=#ROOTCONFIGPATH#SHARED\Background.png
; #ROOTCONFIGPATH# is a global variable. In this case, the value of the variable
; is equal to DocumentsPath\Rainmeter\Skins\illustro\
BackgroundMode=3
BackgroundMargins=0,34,0,14
[Metadata]
; Contains basic information of the skin.
Description=Displays disk usage.
License=Creative Commons BY-NC-SA 3.0
Version=1.0.0
[Variables]
; Variables declared here can be used later on between two # characters (e.g. #MyVariable#).
fontName=Trebuchet MS
textSize=8
colorBar=235,170,0,255
colorText=255,255,255,205
disk1=C:
disk2=D:
; ----------------------------------
; MEASURES return some kind of value
; ----------------------------------
[measureTotalDisk1]
; This measure returns the total disk space
Measure=FreeDiskSpace
Drive=#disk1#
Total=1
UpdateDivider=120
[measureUsedDisk1]
; Returns inverted value of free disk space (i.e. used disk space)
Measure=FreeDiskSpace
Drive=#disk1#
InvertMeasure=1
UpdateDivider=120
[measureTotalDisk2]
Measure=FreeDiskSpace
Drive=#disk2#
Total=1
UpdateDivider=120
[measureUsedDisk2]
Measure=FreeDiskSpace
Drive=#disk2#
InvertMeasure=1
UpdateDivider=120
; ----------------------------------
; STYLES are used to "centralize" options
; ----------------------------------
[styleTitle]
StringAlign=CENTER
StringCase=UPPER
StringStyle=BOLD
StringEffect=SHADOW
FontEffectColor=0,0,0,50
FontColor=#colorText#
FontFace=#fontName#
FontSize=10
AntiAlias=1
ClipString=1
[styleLeftText]
StringAlign=LEFT
; Meters using styleLeftText will be left-aligned.
StringCase=NONE
StringStyle=BOLD
StringEffect=SHADOW
FontEffectColor=0,0,0,20
FontColor=#colorText#
FontFace=#fontName#
FontSize=#textSize#
AntiAlias=1
ClipString=1
[styleRightText]
StringAlign=RIGHT
StringCase=NONE
StringStyle=BOLD
StringEffect=SHADOW
FontEffectColor=0,0,0,20
FontColor=#colorText#
FontFace=#fontName#
FontSize=#textSize#
AntiAlias=1
ClipString=1
[styleBar]
BarColor=#colorBar#
BarOrientation=HORIZONTAL
SolidColor=255,255,255,15
; ----------------------------------
; METERS display images, text, bars, etc.
; ----------------------------------
[meterTitle]
Meter=STRING
MeterStyle=styleTitle
; Using MeterStyle=styleTitle will basically "copy" the
; contents of the [styleTitle] section here during runtime.
X=100
Y=12
W=190
H=18
Text="Disk"
; Even though the text is set to Disk, Rainmeter will display
; it as DISK, because styleTitle contains StringCase=UPPER.
[meterLabelDisk1]
Meter=STRING
MeterStyle=styleLeftText
X=10
Y=40
W=190
H=14
Text="#disk1#\"
[meterValueDisk1]
Meter=STRING
MeterStyle=styleRightText
MeasureName=measureUsedDisk1
MeasureName2=measureTotalDisk1
X=200
Y=0r
; r stands for relative. In this case, the Y postition of meterValueCPU is 0 pixels
; below the Y value of the previous meter (i.e it's the same as in meterLabelCPU).
W=190
H=14
Text="%1B/%2B used"
; %1 stands for the value of MeasureName (measureUsedDisk1 in this case).
; %2 stands for the value of MeasureName2.
NumOfDecimals=1
AutoScale=1
; Because disk measures return the free/used space in bytes, we must use AutoScale=1 to
; automatically scale the value into a more readable figure.
LeftMouseUpAction=!Execute ["#disk1#\"]
; Open #disk1# on click
[meterBarDisk1]
Meter=BAR
MeterStyle=styleBar
MeasureName=measureUsedDisk1
X=10
Y=52
W=190
H=1
[meterLabelDisk2]
Meter=STRING
MeterStyle=styleLeftText
X=10
Y=60
W=190
H=14
Text="#disk2#\"
LeftMouseUpAction=!Execute ["#disk2#\"]
[meterValueDisk2]
Meter=STRING
MeterStyle=styleRightText
MeasureName=measureUsedDisk2
MeasureName2=measureTotalDisk2
X=200
Y=0r
W=190
H=14
Text="%1B/%2B used"
NumOfDecimals=1
AutoScale=1
[meterBarDisk2]
Meter=BAR
MeterStyle=styleBar
MeasureName=measureUsedDisk2
X=10
Y=72
W=190
H=1

View File

@ -0,0 +1,367 @@
; Lines starting ; (semicolons) are commented out.
; That is, they do not affect the code and are here for demonstration purposes only.
; ----------------------------------
[Rainmeter]
; This section contains general settings that can be used to change how Rainmeter behaves.
Author=poiru
AppVersion=2000000
Update=1000
Background=#ROOTCONFIGPATH#SHARED\Background.png
; #ROOTCONFIGPATH# is a global variable. In this case, the value of the variable
; is equal to DocumentsPath\Rainmeter\Skins\illustro\
BackgroundMode=3
BackgroundMargins=0,34,0,14
[Metadata]
; Contains basic information of the skin
Description=Displays the latest entries of a RSS or Atom feed.
License=Creative Commons BY-NC-SA 3.0
Version=1.0.0
[Variables]
; Variables declared here can be used later on between two # characters (e.g. #MyVariable#).
fontName=Trebuchet MS
textSize=8
colorBar=235,170,0,255
colorText=255,255,255,205
getItem=.*(?(?=.*<div class="item">).*<div class="item">.*<a href="(.*)">(.*)</a>)
feedURL=http://feeds.gawker.com/lifehacker/full
; edit feedURL to change displayed feed
; ----------------------------------
; MEASURES return some kind of value
; ----------------------------------
[measureFeed]
; WebParser measures are relatively complicated. If you're a beginner with
; Rainmeter, take a look at some of the other illustro skins before modifying this one.
Measure=Plugin
Plugin=WebParser.dll
Url=http://www.google.com/reader/view/feed/#feedURL#?n=8
RegExp="(?siU)<h1>(.*)</h1>#getItem##getItem##getItem##getItem##getItem##getItem##getItem##getItem#"
UpdateRate=1500
StringIndex=1
Substitute="":"N/A"
; Substitute works as follows: "A":"B" where A is a string to substitute and B is a string
; to substitute with. In this case, it substutes "" (i.e. empty) to N/A
; The WebParser plugin requires a unique measure for every string index it returns that needs to be read.
; The RegExp parameter only needs to be specified once per URL.
[measureLink1]
Measure=Plugin
Plugin=WebParser.dll
Url=[measureFeed]
StringIndex=2
[measureItem1]
Measure=Plugin
Plugin=WebParser.dll
Url=[measureFeed]
StringIndex=3
DecodeCharacterReference=1
; When is set to DecodeCharacterReference=1, WebParser automatically decodes numeric character references
; and character entity references. For example, &quot; will automatically be decoded to "
[measureLink2]
Measure=Plugin
Plugin=WebParser.dll
Url=[measureFeed]
StringIndex=4
[measureItem2]
Measure=Plugin
Plugin=WebParser.dll
Url=[measureFeed]
StringIndex=5
DecodeCharacterReference=1
[measureLink3]
Measure=Plugin
Plugin=WebParser.dll
Url=[measureFeed]
StringIndex=6
[measureItem3]
Measure=Plugin
Plugin=WebParser.dll
Url=[measureFeed]
StringIndex=7
DecodeCharacterReference=1
[measureLink4]
Measure=Plugin
Plugin=WebParser.dll
Url=[measureFeed]
StringIndex=8
[measureItem4]
Measure=Plugin
Plugin=WebParser.dll
Url=[measureFeed]
StringIndex=9
DecodeCharacterReference=1
[measureLink5]
Measure=Plugin
Plugin=WebParser.dll
Url=[measureFeed]
StringIndex=10
[measureItem5]
Measure=Plugin
Plugin=WebParser.dll
Url=[measureFeed]
StringIndex=11
DecodeCharacterReference=1
[measureLink6]
Measure=Plugin
Plugin=WebParser.dll
Url=[measureFeed]
StringIndex=12
[measureItem6]
Measure=Plugin
Plugin=WebParser.dll
Url=[measureFeed]
StringIndex=13
DecodeCharacterReference=1
[measureLink7]
Measure=Plugin
Plugin=WebParser.dll
Url=[measureFeed]
StringIndex=14
[measureItem7]
Measure=Plugin
Plugin=WebParser.dll
Url=[measureFeed]
StringIndex=15
DecodeCharacterReference=1
[measureLink8]
Measure=Plugin
Plugin=WebParser.dll
Url=[measureFeed]
StringIndex=16
[measureItem8]
Measure=Plugin
Plugin=WebParser.dll
Url=[measureFeed]
StringIndex=17
DecodeCharacterReference=1
; ----------------------------------
; STYLES are used to "centralize" options
; ----------------------------------
[styleTitle]
StringAlign=CENTER
StringCase=UPPER
StringStyle=BOLD
StringEffect=SHADOW
FontEffectColor=0,0,0,50
FontColor=#colorText#
FontFace=#fontName#
FontSize=10
AntiAlias=1
ClipString=1
[styleLeftText]
StringAlign=LEFT
; Meters using styleLeftText will be left-aligned.
StringCase=NONE
StringStyle=BOLD
StringEffect=SHADOW
FontEffectColor=0,0,0,20
FontColor=#colorText#
FontFace=#fontName#
FontSize=#textSize#
AntiAlias=1
ClipString=1
[styleSeperator]
SolidColor=255,255,255,15
; ----------------------------------
; METERS display images, text, bars, etc.
; ----------------------------------
[meterTitle]
Meter=STRING
MeterStyle=styleTitle
; Using MeterStyle=styleTitle will basically "copy" the contents
; of the [styleTitle] section here during runtime.
MeasureName=measureFeed
X=100
Y=12
W=190
H=18
Text="%1"
; %1 stands for the value of MeasureName (measureFeed in this case).
[meterItem1]
Meter=STRING
MeterStyle=styleLeftText
MeasureName=measureItem1
X=10
Y=40
W=190
H=14
Text="%1"
LeftMouseUpAction=!Execute ["[measureLink1]"]
; When the mouse is clicked and released on this meter, the value of
; measureLink1 (an address) will be opened in the default browser.
ToolTipText="%1"
; Hovering over this meter will display a tooltip with the text of %1 (i.e. the value of measureItem1).
[meterSeperator1]
Meter=IMAGE
MeterStyle=styleSeperator
X=10
Y=52
W=190
H=1
[meterItem2]
Meter=STRING
MeterStyle=styleLeftText
MeasureName=measureItem2
X=10
Y=60
W=190
H=14
Text="%1"
LeftMouseUpAction=!Execute ["[measureLink2]"]
ToolTipText="%1"
[meterSeperator2]
Meter=IMAGE
MeterStyle=styleSeperator
X=10
Y=72
W=190
H=1
[meterItem3]
Meter=STRING
MeterStyle=styleLeftText
MeasureName=measureItem3
X=10
Y=80
W=190
H=14
Text="%1"
LeftMouseUpAction=!Execute ["[measureLink3]"]
ToolTipText="%1"
[meterSeperator3]
Meter=IMAGE
MeterStyle=styleSeperator
X=10
Y=92
W=190
H=1
[meterItem4]
Meter=STRING
MeterStyle=styleLeftText
MeasureName=measureItem4
X=10
Y=100
W=190
H=14
Text="%1"
LeftMouseUpAction=!Execute ["[measureLink4]"]
ToolTipText="%1"
[meterSeperator4]
Meter=IMAGE
MeterStyle=styleSeperator
X=10
Y=112
W=190
H=1
[meterItem5]
Meter=STRING
MeterStyle=styleLeftText
MeasureName=measureItem5
X=10
Y=120
W=190
H=14
Text="%1"
LeftMouseUpAction=!Execute ["[measureLink5]"]
ToolTipText="%1"
[meterSeperator5]
Meter=IMAGE
MeterStyle=styleSeperator
X=10
Y=132
W=190
H=1
[meterItem6]
Meter=STRING
MeterStyle=styleLeftText
MeasureName=measureItem6
X=10
Y=140
W=190
H=14
Text="%1"
LeftMouseUpAction=!Execute ["[measureLink6]"]
ToolTipText="%1"
[meterSeperator6]
Meter=IMAGE
MeterStyle=styleSeperator
X=10
Y=152
W=190
H=1
[meterItem7]
Meter=STRING
MeterStyle=styleLeftText
MeasureName=measureItem7
X=10
Y=160
W=190
H=14
Text="%1"
LeftMouseUpAction=!Execute ["[measureLink7]"]
ToolTipText="%1"
[meterSeperator7]
Meter=IMAGE
MeterStyle=styleSeperator
X=10
Y=172
W=190
H=1
[meterItem8]
Meter=STRING
MeterStyle=styleLeftText
MeasureName=measureItem8
X=10
Y=180
W=190
H=14
Text="%1"
LeftMouseUpAction=!Execute ["[measureLink8]"]
ToolTipText="%1"
[meterSeperator8]
Meter=IMAGE
MeterStyle=styleSeperator
X=10
Y=192
W=190
H=1

View File

@ -0,0 +1,120 @@
; Lines starting ; (semicolons) are commented out.
; That is, they do not affect the code and are here for demonstration purposes only.
; ----------------------------------
[Rainmeter]
; This section contains general settings that can be used to change how Rainmeter behaves.
Author=poiru
AppVersion=2000000
Update=1000
Background=#ROOTCONFIGPATH#SHARED\Background.png
; #ROOTCONFIGPATH# is a global variable. In this case, the value of the variable
; is equal to DocumentsPath\Rainmeter\Skins\illustro\
BackgroundMode=3
BackgroundMargins=0,34,0,14
[Metadata]
; Contains basic information of the skin.
Description=Allows searching through Google.
License=Creative Commons BY-NC-SA 3.0
Version=1.0.0
[Variables]
; Variables declared here can be used later on between two # characters (e.g. #MyVariable#).
fontName=Trebuchet MS
textSize=8
colorBar=235,170,0,255
colorText=255,255,255,205
; ----------------------------------
; MEASURES return some kind of value
; ----------------------------------
[measureInput]
; The InputText.dll plugin has special powers: it allows user input.
; However, it's not the easiest way to start learning Rainmeter. Get a
; hold of the basics, and then check out the manual entry for InputText.
Measure=Plugin
Plugin=InputText.dll
SolidColor=20,20,20,255
StringAlign=LEFT
StringCase=NONE
StringStyle=BOLD
StringEffect=SHADOW
FontEffectColor=0,0,0,20
FontColor=#colorText#
FontFace=#fontName#
FontSize=#textSize#
X=10
Y=38
W=188
H=17
FocusDismiss=1
DefaultValue=""
Command1=!Execute ["http://www.google.com/search?q=$UserInput$"]
UpdateDivider=86400
; ----------------------------------
; STYLES are used to "centralize" options
; ----------------------------------
[styleTitle]
StringAlign=CENTER
StringCase=UPPER
StringStyle=BOLD
StringEffect=SHADOW
FontEffectColor=0,0,0,50
FontColor=#colorText#
FontFace=#fontName#
FontSize=10
AntiAlias=1
ClipString=1
[styleLeftText]
StringAlign=LEFT
; Meters using styleLeftText will be left-aligned.
StringCase=NONE
StringStyle=BOLD
StringEffect=SHADOW
FontEffectColor=0,0,0,20
FontColor=#colorText#
FontFace=#fontName#
FontSize=#textSize#
AntiAlias=1
ClipString=1
[styleSeperator]
SolidColor=255,255,255,15
; ----------------------------------
; METERS display images, text, bars, etc.
; ----------------------------------
[meterTitle]
Meter=STRING
MeterStyle=styleTitle
; Using MeterStyle=styleTitle will basically "copy" the
; contents of the [styleTitle] section here during runtime.
X=100
Y=12
W=190
H=18
Text="Google"
[meterSearch]
Meter=STRING
MeterStyle=styleLeftText
X=10
Y=40
W=190
H=14
Text="Search..."
LeftMouseUpAction=!PluginBang "measureInput ExecuteBatch 1"
[meterSeperator]
Meter=IMAGE
MeterStyle=styleSeperator
X=10
Y=52
W=190
H=1

View File

@ -0,0 +1,216 @@
; Lines starting ; (semicolons) are commented out.
; That is, they do not affect the code and are here for demonstration purposes only.
; ----------------------------------
[Rainmeter]
; This section contains general settings that can be used to change how Rainmeter behaves.
Author=poiru
AppVersion=2000000
Update=1000
Background=#ROOTCONFIGPATH#SHARED\Background.png
; #ROOTCONFIGPATH# is a global variable. In this case, the value of the variable
; is equal to DocumentsPath\Rainmeter\Skins\illustro\
BackgroundMode=3
BackgroundMargins=0,34,0,14
[Metadata]
; Contains basic information of the skin.
Description=Shows your IP address and network activity.
License=Creative Commons BY-NC-SA 3.0
Version=1.0.0
[Variables]
; Variables declared here can be used later on between two # characters (e.g. #MyVariable#).
fontName=Trebuchet MS
textSize=8
colorBar=235,170,0,255
colorText=255,255,255,205
maxDownload=10485760
MaxUpload=10485760
; Set maxDownload and maxUpload to your maximum download and upload speed in bits.
; To convert kilobits, megabits, kilobytes, and megabytes into bits, go to www.google.com
; and search for something like "10 megabytes in bits".
; ----------------------------------
; MEASURES return some kind of value
; ----------------------------------
[measureIP]
; This measure returns your IP. WebParser measures are relatively complicated. If you're a beginner with
; Rainmeter, take a look at some of the other illustro skins before modifying this one.
Measure=Plugin
Plugin=WebParser.dll
Url=http://checkip.dyndns.org
UpdateRate=14400
RegExp="(?siU)Address: (.*)</body>"
StringIndex=1
Substitute="":"N/A"
; Substitute works as follows: "A":"B" where A is a string to substitute and B is a string
; to substitute with. In this case, it substutes "" (i.e. empty) to N/A
[measureNetIn]
Measure=NetIn
NetInSpeed=#maxDownload#
; NetInSpeed must be set so your maximun download speed for the download bar to scale correctly
[measureNetOut]
Measure=NetOut
NetOutSpeed=#maxUpload#
; ----------------------------------
; STYLES are used to "centralize" options
; ----------------------------------
[styleTitle]
StringAlign=CENTER
StringCase=UPPER
StringStyle=BOLD
StringEffect=SHADOW
FontEffectColor=0,0,0,50
FontColor=#colorText#
FontFace=#fontName#
FontSize=10
AntiAlias=1
ClipString=1
[styleLeftText]
StringAlign=LEFT
; Meters using styleLeftText will be left-aligned.
StringCase=NONE
StringStyle=BOLD
StringEffect=SHADOW
FontEffectColor=0,0,0,20
FontColor=#colorText#
FontFace=#fontName#
FontSize=#textSize#
AntiAlias=1
ClipString=1
[styleRightText]
StringAlign=RIGHT
StringCase=NONE
StringStyle=BOLD
StringEffect=SHADOW
FontEffectColor=0,0,0,20
FontColor=#colorText#
FontFace=#fontName#
FontSize=#textSize#
AntiAlias=1
ClipString=1
[styleBar]
BarColor=#colorBar#
BarOrientation=HORIZONTAL
SolidColor=255,255,255,15
[styleSeperator]
SolidColor=255,255,255,15
; ----------------------------------
; METERS display images, text, bars, etc.
; ----------------------------------
[meterTitle]
Meter=STRING
MeterStyle=styleTitle
; Using MeterStyle=styleTitle will basically "copy" the
; contents of the [styleTitle] section here during runtime.
X=100
Y=12
W=190
H=18
Text="Network"
; Even though the text is set to Network, Rainmeter will display
; it as NETWORK, because styleTitle contains StringCase=UPPER.
[meterIPLabel]
Meter=STRING
MeterStyle=styleLeftText
X=10
Y=40
W=190
H=14
Text="IP Address"
[meterIPValue]
Meter=STRING
MeterStyle=styleRightText
MeasureName=measureIP
X=200
Y=0r
; r stands for relative. In this case, the Y postition of meterValueCPU is 0 pixels
; below the Y value of the previous meter (i.e it's the same as in meterLabelCPU).
W=190
H=14
Text="%1"
; %1 stands for the value of MeasureName (measureIP in this case).
[meterSeperator]
Meter=IMAGE
MeterStyle=styleSeperator
X=10
Y=52
W=190
H=1
[meterUploadLabel]
Meter=STRING
MeterStyle=styleLeftText
X=10
Y=60
W=190
H=14
Text="Upload"
[meterUploadValue]
Meter=STRING
MeterStyle=styleRightText
MeasureName=measureNetOut
X=200
Y=0r
W=190
H=14
Text="%1B/s"
NumOfDecimals=1
AutoScale=1
; Because measureIP returns the current upload speed in bytes, we must use AutoScale=1 to
; automatically scale the value into a more readable figure.
[meterUploadBar]
Meter=BAR
MeterStyle=styleBar
MeasureName=measureNetOut
X=10
Y=72
W=190
H=1
[meterDownloadLabel]
Meter=STRING
MeterStyle=styleLeftText
X=10
Y=80
W=190
H=14
Text="Download"
[meterDownloadValue]
Meter=STRING
MeterStyle=styleRightText
MeasureName=measureNetIn
X=200
Y=0r
W=190
H=14
Text="%1B/s"
NumOfDecimals=1
AutoScale=1
[meterDownloadBar]
Meter=BAR
MeterStyle=styleBar
MeasureName=measureNetIn
X=10
Y=92
W=190
H=1

View File

@ -0,0 +1,149 @@
; Lines starting ; (semicolons) are commented out.
; That is, they do not affect the code and are here for demonstration purposes only.
; ----------------------------------
[Rainmeter]
; This section contains general settings that can be used to change how Rainmeter behaves.
Author=poiru
AppVersion=2000000
Update=1000
Background=#ROOTCONFIGPATH#SHARED\Background.png
; #ROOTCONFIGPATH# is a global variable. In this case, the value of the variable
; is equal to DocumentsPath\Rainmeter\Skins\illustro\
BackgroundMode=3
BackgroundMargins=0,34,0,14
[Metadata]
; Contains basic information of the skin.
Description=Shows the state and size of your Recycle Bin.
License=Creative Commons BY-NC-SA 3.0
Version=1.0.0
[Variables]
; Variables declared here can be used later on between two # characters (e.g. #MyVariable#).
fontName=Trebuchet MS
textSize=8
colorBar=235,170,0,255
colorText=255,255,255,205
; ----------------------------------
; MEASURES return some kind of value
; ----------------------------------
[measureBinItems]
; This measure returns the amount of items in the Recycle Bin.
Measure=Plugin
Plugin=RecycleManager.dll
RecycleType=COUNT
Drives=D:|C:
UpdateDivider=3
; UpdateDivider sets the rate at which the value of the measure is updated. It is
; calculated as follows: UpdateDivider x Update. In this case, Update is set to
; 1000 milliseconds (in the [Rainmeter] section). 1000 x 3 = 3000 ms or 3 seconds.
[measureBinSize]
; Returns the total size of the Recycle Bin in bytes.
Measure=Plugin
Plugin=RecycleManager.dll
RecycleType=SIZE
UpdateDivider=3
; ----------------------------------
; STYLES are used to "centralize" options
; ----------------------------------
[styleTitle]
StringAlign=CENTER
StringCase=UPPER
StringStyle=BOLD
StringEffect=SHADOW
FontEffectColor=0,0,0,50
FontColor=#colorText#
FontFace=#fontName#
FontSize=10
AntiAlias=1
ClipString=1
[styleLeftText]
StringAlign=LEFT
; Meters using styleLeftText will be left-aligned.
StringCase=NONE
StringStyle=BOLD
StringEffect=SHADOW
FontEffectColor=0,0,0,20
FontColor=#colorText#
FontFace=#fontName#
FontSize=#textSize#
AntiAlias=1
ClipString=1
[styleRightText]
StringAlign=RIGHT
StringCase=NONE
StringStyle=BOLD
StringEffect=SHADOW
FontEffectColor=0,0,0,20
FontColor=#colorText#
FontFace=#fontName#
FontSize=#textSize#
AntiAlias=1
ClipString=1
[styleSeperator]
SolidColor=255,255,255,15
; ----------------------------------
; METERS display images, text, bars, etc.
; ----------------------------------
[meterTitle]
Meter=STRING
MeterStyle=styleTitle
; Using MeterStyle=styleTitle will basically "copy" the
; contents of the [styleTitle] section here during runtime.
X=100
Y=12
W=190
H=18
Text="Recycle Bin"
; Even though the text is set to Recycle Bin, Rainmeter will display
; it as RECYCLE BIN, because styleTitle contains StringCase=UPPER.
LeftMouseUpAction=!Execute [!PluginBang "measureBinItems OpenBin"]
RightMouseUpAction=!Execute [!PluginBang "measureBinItems EmptyBin"]
ToolTipText="Left-click to open Recycle Bin#CRLF#Right-click to empty"
; Hovering over this meter will display a tooltip with the text above.
; The #CRLF# variable creates a new line.
[meterBinItems]
Meter=STRING
MeterStyle=styleLeftText
MeasureName=measureBinItems
X=10
Y=40
W=190
H=14
Text="%1 items"
; %1 stands for the value of MeasureName (measureBinItems in this case).
[meterBinSize]
Meter=STRING
MeterStyle=styleRightText
MeasureName=measureBinSize
X=200
Y=0r
; r stands for relative. In this case, the Y postition of meterValueCPU is 0 pixels
; below the Y value of the previous meter (i.e it's the same as in meterLabelCPU).
W=190
H=14
Text="%1B"
AutoScale=1
; Because measureBinSize returns the size in bytes, we must use AutoScale=1 to
; automatically scale the value into a more readable figure.
[meterSeperator]
Meter=IMAGE
MeterStyle=styleSeperator
X=10
Y=52
W=190
H=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

View File

@ -0,0 +1,207 @@
; Lines starting ; (semicolons) are commented out.
; That is, they do not affect the code and are here for demonstration purposes only.
; ----------------------------------
[Rainmeter]
; This section contains general settings that can be used to change how Rainmeter behaves.
Author=poiru
AppVersion=2000000
Update=1000
Background=#ROOTCONFIGPATH#SHARED\Background.png
; #ROOTCONFIGPATH# is a global variable. In this case, the value of the variable
; is equal to DocumentsPath\Rainmeter\Skins\illustro\
BackgroundMode=3
BackgroundMargins=0,34,0,14
[Metadata]
; Contains basic information of the skin.
Description=Displays basic system stats.
License=Creative Commons BY-NC-SA 3.0
Version=1.0.0
[Variables]
; Variables declared here can be used later on between two # characters (e.g. #MyVariable#).
fontName=Trebuchet MS
textSize=8
colorBar=235,170,0,255
colorText=255,255,255,205
; ----------------------------------
; MEASURES return some kind of value
; ----------------------------------
[measureCPU]
; This measure returns the average CPU load between all cores.
Measure=CPU
Processor=0
[measureRAM]
; Returns the amount of RAM used in bytes.
Measure=PhysicalMemory
UpdateDivider=20
; UpdateDivider sets the rate at which the value of the measure is updated. It is
; calculated as follows: UpdateDivider x Update. In this case, Update is set to
; 1000 milliseconds (in the [Rainmeter] section). 1000 x 20 = 20000 ms or 20 seconds.
[measureSWAP]
; Returns the amount of SWAP (pagefile) used in bytes.
Measure=SWAPMemory
UpdateDivider=20
; ----------------------------------
; STYLES are used to "centralize" options
; ----------------------------------
[styleTitle]
StringAlign=CENTER
StringCase=UPPER
StringStyle=BOLD
StringEffect=SHADOW
FontEffectColor=0,0,0,50
FontColor=#colorText#
FontFace=#fontName#
FontSize=10
AntiAlias=1
ClipString=1
[styleLeftText]
StringAlign=LEFT
; Meters using styleLeftText will be left-aligned.
StringCase=NONE
StringStyle=BOLD
StringEffect=SHADOW
FontEffectColor=0,0,0,20
FontColor=#colorText#
FontFace=#fontName#
FontSize=#textSize#
AntiAlias=1
ClipString=1
[styleRightText]
StringAlign=RIGHT
StringCase=NONE
StringStyle=BOLD
StringEffect=SHADOW
FontEffectColor=0,0,0,20
FontColor=#colorText#
FontFace=#fontName#
FontSize=#textSize#
AntiAlias=1
ClipString=1
[styleBar]
BarColor=#colorBar#
BarOrientation=HORIZONTAL
SolidColor=255,255,255,15
; ----------------------------------
; METERS display images, text, bars, etc.
; ----------------------------------
[meterTitle]
Meter=STRING
MeterStyle=styleTitle
; Using MeterStyle=styleTitle will basically "copy" the
; contents of the [styleTitle] section here during runtime.
X=100
Y=12
W=190
H=18
Text="System"
; Even though the text is set to System, Rainmeter will display
; it as SYSTEM, because styleTitle contains StringCase=UPPER.
LeftMouseUpAction=!Execute ["taskmgr.exe"]
; Left-clicking this meter will launch taskmgr.exe (the Task Manager).
ToolTipText="Open Task Manager"
; Hovering over this meter will display a tooltip with the text above.
[meterLabelCPU]
Meter=STRING
MeterStyle=styleLeftText
X=10
Y=40
W=190
H=14
Text="CPU Usage"
[meterValueCPU]
Meter=STRING
MeterStyle=styleRightText
MeasureName=measureCPU
X=200
Y=0r
; r stands for relative. In this case, the Y postition of meterValueCPU is 0 pixels
; below the Y value of the previous meter (i.e it's the same as in meterLabelCPU).
W=190
H=14
Text="%1%"
; %1 stands for the value of MeasureName (measureCPU in this case).
[meterBarCPU]
Meter=BAR
MeterStyle=styleBar
MeasureName=measureCPU
X=10
Y=52
W=190
H=1
[meterLabelRAM]
Meter=STRING
MeterStyle=styleLeftText
X=10
Y=60
W=190
H=14
Text="RAM Usage"
[meterValueRAM]
Meter=STRING
MeterStyle=styleRightText
MeasureName=measureRAM
X=200
Y=0r
W=190
H=14
Text="%1%"
Percentual=1
; Percentual=1 needs to be added her because measureRAM returns the amount
; of RAM used in bytes. Using Percentual=1 will convert that into a percentual value.
[meterBarRAM]
Meter=BAR
MeterStyle=styleBar
MeasureName=measureRAM
X=10
Y=72
W=190
H=1
[meterLabelSWAP]
Meter=STRING
MeterStyle=styleLeftText
X=10
Y=80
W=190
H=14
Text="SWAP Usage"
[meterValueSWAP]
Meter=STRING
MeterStyle=styleRightText
MeasureName=measureSWAP
X=200
Y=0r
W=190
H=14
Text="%1%"
Percentual=1
[meterBarSWAP]
Meter=BAR
MeterStyle=styleBar
MeasureName=measureSWAP
X=10
Y=92
W=190
H=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

View File

@ -0,0 +1,173 @@
; Lines starting ; (semicolons) are commented out.
; That is, they do not affect the code and are here for demonstration purposes only.
; ----------------------------------
[Rainmeter]
; This section contains general settings that can be used to change how Rainmeter behaves.
Author=poiru
AppVersion=2000000
Update=1000
[Metadata]
; Contains basic information of the skin.
Description=The welcome skin for illustro.
License=Creative Commons BY-NC-SA 3.0
Version=1.0.0
[Variables]
; Variables declared here can be used later on between two # characters (e.g. #MyVariable#).
fontName=Trebuchet MS
textSize=9
colorBar=235,170,0,255
colorText=255,255,255,205
; ----------------------------------
; STYLES are used to "centralize" options
; ----------------------------------
[styleTitle]
StringAlign=LEFT
StringCase=UPPER
StringStyle=BOLD
StringEffect=SHADOW
FontEffectColor=0,0,0,50
FontColor=#colorText#
FontFace=#fontName#
FontSize=10
AntiAlias=1
ClipString=1
[styleLeftText]
StringAlign=LEFT
; Meters using styleLeftText will be left-aligned.
StringCase=NONE
StringStyle=BOLD
StringEffect=SHADOW
FontEffectColor=0,0,0,20
FontColor=#colorText#
FontFace=#fontName#
FontSize=#textSize#
AntiAlias=1
ClipString=1
[styleSeperator]
SolidColor=255,255,255,15
; ----------------------------------
; METERS display images, text, bars, etc.
; ----------------------------------
[meterBackground]
Meter=IMAGE
ImageName=Background.png
X=0
Y=0
[meterMidLine]
Meter=IMAGE
SolidColor=255,255,255,80
W=1
H=200
X=245
Y=60
[meterTitle]
Meter=STRING
MeterStyle=styleTitle
; Using MeterStyle=styleTitle will basically "copy" the
; contents of the [styleTitle] section here during runtime.
X=20
Y=18
W=400
H=18
FontSize=11
Text="Welcome to Rainmeter!"
[meterIllustroTitle]
Meter=STRING
MeterStyle=styleLeftText
X=20
Y=55
W=240
H=30
FontColor=255,217,120,255
FontSize=10
Text="illustro: Getting started with Rainmeter skinning"
[meterIllustroLine]
Meter=STRING
MeterStyle=styleLeftText
X=20
Y=95
W=225
H=175
FontColor=#colorText#
FontSize=9
Text="illustro is a simple set of skins designed to show some of the capabilities of Rainmeter. It offers a good place to start learning how to edit Rainmeter to make it your own. Use the "Rainmeter 101" link on the right to learn the basics.#CRLF##CRLF#To explore installed skins and change Rainmeter settings, simply click on the Rainmeter tray icon."
; #CRLF# is a pre-defined varaible for newline.
[meterLinksTitle]
Meter=STRING
MeterStyle=styleLeftText
X=260
Y=55
W=235
H=30
FontColor=255,217,120,255
FontSize=10
Text=Recommended skin suites: Start using Rainmeter now!
[meterLinksLine]
Meter=STRING
MeterStyle=styleLeftText
X=260
Y=95
W=225
H=80
FontColor=#colorText#
FontSize=9
Text=There are literally thousands of skins available for Rainmeter. We have a few popular ones we recommend, which you can install with just a few clicks.
[meterLink1]
Meter=STRING
MeterStyle=styleLeftText
X=260
Y=175
W=225
H=14
FontColor=255,217,120,255
Text="<22> Recommended Skin Suites"
LeftMouseUpAction=!Execute ["http://rainmeter.net/cms/Discover"]
[meterLink2]
Meter=STRING
MeterStyle=styleLeftText
X=260
Y=195
W=225
H=14
FontColor=255,174,69,255
Text="<22> Rainmeter 101"
LeftMouseUpAction=!Execute ["http://rainmeter.net/cms/Rainmeter101"]
[meterLink3]
Meter=STRING
MeterStyle=styleLeftText
X=260
Y=215
W=225
H=14
FontColor=255,174,69,255
Text="<22> Rainmeter Manual"
LeftMouseUpAction=!Execute ["http://rainmeter.net/cms/Support"]
[meterLink4]
Meter=STRING
MeterStyle=styleLeftText
X=260
Y=235
W=225
H=14
FontColor=255,174,69,255
Text="<22> Rainmeter Forums"
LeftMouseUpAction=!Execute ["http://rainmeter.net/forums"]

View File

@ -0,0 +1,28 @@
[Rainmeter]
[illustro\Clock]
Active=1
WindowX=(#SCREENAREAWIDTH#-200)
WindowY=0
[illustro\Disk]
Active=2
WindowX=(#SCREENAREAWIDTH#-200)
WindowY=176
[illustro\Feeds]
Active=1
WindowX=(#SCREENAREAWIDTH#-200)
WindowY=264
[illustro\System]
Active=1
WindowX=(#SCREENAREAWIDTH#-200)
WindowY=68
[illustro\Welcome]
Active=1
WindowX=50.000000%
WindowY=50.000000%
AnchorX=50.000000%
AnchorY=50.000000%