mirror of
https://github.com/chibicitiberiu/rainmeter-studio.git
synced 2024-02-24 04:33:31 +00:00
Added /Build
This commit is contained in:
167
Build/Build.bat
Normal file
167
Build/Build.bat
Normal 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
2
Build/BuildLanguages.bat
Normal file
@ -0,0 +1,2 @@
|
||||
@echo off
|
||||
"Build.bat" BUILDLANGUAGES
|
242
Build/BuildLog.txt
Normal file
242
Build/BuildLog.txt
Normal 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
2
Build/BuildVersion.bat
Normal file
@ -0,0 +1,2 @@
|
||||
@echo off
|
||||
"Build.bat" BUILDVERSION
|
BIN
Build/Installer/Header.bmp
Normal file
BIN
Build/Installer/Header.bmp
Normal file
Binary file not shown.
After Width: | Height: | Size: 10 KiB |
BIN
Build/Installer/Icon.ico
Normal file
BIN
Build/Installer/Icon.ico
Normal file
Binary file not shown.
After Width: | Height: | Size: 25 KiB |
937
Build/Installer/Installer.nsi
Normal file
937
Build/Installer/Installer.nsi
Normal 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
|
BIN
Build/Installer/MoreInfo.dll
Normal file
BIN
Build/Installer/MoreInfo.dll
Normal file
Binary file not shown.
835
Build/Installer/ProcFunc.nsh
Normal file
835
Build/Installer/ProcFunc.nsh
Normal 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
BIN
Build/Installer/UAC.dll
Normal file
Binary file not shown.
200
Build/Installer/UAC.nsh
Normal file
200
Build/Installer/UAC.nsh
Normal 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
BIN
Build/Installer/Wizard.bmp
Normal file
Binary file not shown.
After Width: | Height: | Size: 51 KiB |
47
Build/Instructions.txt
Normal file
47
Build/Instructions.txt
Normal 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.
|
139
Build/Skins/illustro/Clock/Clock.ini
Normal file
139
Build/Skins/illustro/Clock/Clock.ini
Normal 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
|
150
Build/Skins/illustro/Disk/1 Disk.ini
Normal file
150
Build/Skins/illustro/Disk/1 Disk.ini
Normal 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
|
210
Build/Skins/illustro/Disk/2 Disks.ini
Normal file
210
Build/Skins/illustro/Disk/2 Disks.ini
Normal 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
|
367
Build/Skins/illustro/Feeds/Feeds.ini
Normal file
367
Build/Skins/illustro/Feeds/Feeds.ini
Normal 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, " 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
|
120
Build/Skins/illustro/Google/Google.ini
Normal file
120
Build/Skins/illustro/Google/Google.ini
Normal 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
|
216
Build/Skins/illustro/Network/Network.ini
Normal file
216
Build/Skins/illustro/Network/Network.ini
Normal 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
|
149
Build/Skins/illustro/Recycle Bin/Recycle Bin.ini
Normal file
149
Build/Skins/illustro/Recycle Bin/Recycle Bin.ini
Normal 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
|
BIN
Build/Skins/illustro/SHARED/Background.png
Normal file
BIN
Build/Skins/illustro/SHARED/Background.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.9 KiB |
207
Build/Skins/illustro/System/System.ini
Normal file
207
Build/Skins/illustro/System/System.ini
Normal 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
|
BIN
Build/Skins/illustro/Welcome/Background.png
Normal file
BIN
Build/Skins/illustro/Welcome/Background.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.8 KiB |
173
Build/Skins/illustro/Welcome/Welcome.ini
Normal file
173
Build/Skins/illustro/Welcome/Welcome.ini
Normal 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"]
|
28
Build/Themes/illustro default/Rainmeter.thm
Normal file
28
Build/Themes/illustro default/Rainmeter.thm
Normal 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%
|
Reference in New Issue
Block a user