21 Commits

Author SHA1 Message Date
Anixx
e2758ec376 Support for unthemed taskbar (#2369)
* Support for unthemed taskbar

See this discussion:
https://github.com/Open-Shell/Open-Shell-Menu/discussions/2367

* Refactor color handling in StartMenuDLL
2026-01-24 11:26:25 +01:00
ge0rdi
dd57854da1 Scale custom button image according to current DPI (#2248)
Fixes #2246
2025-12-12 09:09:21 +01:00
ge0rdi
40d8f5b119 AppVeyor: New deployment token 2025-11-30 16:02:35 +01:00
benja2998
4ebeadd949 Remove another '>' symbol (#2243)
Remove another 'z
2025-06-25 17:27:18 +02:00
benja2998
dc1994e713 Remove random '>' symbol in readme (#2223) 2025-05-25 07:23:42 +02:00
ge0rdi
8c713cc5fd Update ARM notice in readme 2025-05-24 08:31:51 +02:00
Matthijs Lavrijsen
58b909037f Add ARM64 support (#641)
* Add ARM64 build configurations to projects

* StartMenu: add ARM64 support

* Add support for IAT hooking on ARM64

* Add ARM64 support to Classic IE

* Add ARM64 support to installer

NB: WiX 3.14.0.3910 or higher is required to create the MSI

* Revert whitespace change

* Separate x86/x64 and ARM64 installers

* Change suffix of ARM64 binaries

* Put also ARM64 MSI to final installer

* Fix sln

* Build some DLLs as ARM64X

These are meant to be loaded to both x64 and ARM64 processes.
We will compile them as ARM64X (when building for ARM64).
That way they will contain both x64 and ARM64 code paths.

https://learn.microsoft.com/en-us/windows/arm/arm64x-pe

* Make sure x64 installer cannot be installed on ARM64

In case if somebody manually tries to install x64 MSI on ARM64.
This is not supported/working scenario.

---------

Co-authored-by: ge0rdi <ge0rdi@users.noreply.github.com>
2025-05-08 10:14:56 +02:00
ge0rdi
146c27ecd2 Fix tray button positioning 2025-03-13 07:11:37 +01:00
ge0rdi
4943938d0f [ExplorerPatcher] Don't shift custom start button on Win11 2025-03-13 07:11:36 +01:00
ge0rdi
d5c561720d [ExplorerPatcher] Fix taskbar texturing
Fixes #2094.
2025-03-13 07:11:26 +01:00
ge0rdi
58d804d22a Remove obsolete links from help
Fixes #2148
2025-03-02 11:18:32 +01:00
vodek3
a280fa92e1 Update StartMenuL10N.ini (#2103) 2025-01-13 07:01:26 +01:00
ge0rdi
f22f10c7d5 Apply taskbar customizations to News and interests
Fixes #676
2025-01-04 16:10:52 +01:00
ge0rdi
faf79de4d5 Fix custom button position on auto-hiding taskbar
Fixes #2067.
2025-01-04 16:10:52 +01:00
ge0rdi
552fbd8296 Set position of tray buttons on primary taskbar only
It seems that secondary taskbars handle try button positioning
correctly. So there is no need for this workaround.

Original change was introduced in 674a486 due to #1232 issue.
2025-01-04 16:10:52 +01:00
ge0rdi
055ac87039 Fix modern settings on Win11 24H2+ (#2091) 2025-01-04 09:47:32 +01:00
Curious Insatiable
d82fadb926 Update StartMenuL10N.ini for all languages (#2086) 2025-01-02 21:02:28 +01:00
ge0rdi
31acb6b092 Remove obsolete product version fallback 2024-12-20 14:11:20 +01:00
ge0rdi
077afd2377 Add missing version info 2024-12-20 14:07:09 +01:00
ge0rdi
680e6eedbb AppVeyor: New deployment token 2024-12-06 07:25:00 +01:00
ge0rdi
f60e2a18cb Fix custom button auto-hiding (#2041) 2024-12-04 19:54:58 +01:00
40 changed files with 911 additions and 98 deletions

3
.gitignore vendored
View File

@@ -20,12 +20,15 @@
# Build results # Build results
[Dd]ebug/ [Dd]ebug/
[Dd]ebug64/ [Dd]ebug64/
[Dd]ebugARM64/
[Dd]ebugPublic/ [Dd]ebugPublic/
[Rr]elease/ [Rr]elease/
[Rr]elease64/ [Rr]elease64/
[Rr]eleaseARM64/
[Rr]eleases/ [Rr]eleases/
x64/ x64/
x86/ x86/
ARM64/
bld/ bld/
[Bb]in/ [Bb]in/
[Oo]bj/ [Oo]bj/

View File

@@ -23,8 +23,11 @@ You can find the latest stable version here:
[![GitHub All Releases](https://img.shields.io/github/downloads/Open-Shell/Open-Shell-Menu/total?style=for-the-badge&color=4bc2ee&logo=github)](https://github.com/Open-Shell/Open-Shell-Menu/releases/latest) [![GitHub All Releases](https://img.shields.io/github/downloads/Open-Shell/Open-Shell-Menu/total?style=for-the-badge&color=4bc2ee&logo=github)](https://github.com/Open-Shell/Open-Shell-Menu/releases/latest)
### ⚠️ Windows for ARM compatibility ⚠️ > [!IMPORTANT]
Open-Shell is not compatible with Windows for ARM. If you install it on a Windows for ARM installation (ex. using Parallels Desktop on an Apple Silicon Mac), you will no longer be able to log into your account the next time you reboot. Please refrain from installing Open-Shell on Windows for ARM. > #### Windows for ARM compatibility
> Open-Shell is compatible with Windows for ARM since version [4.4.196](https://github.com/Open-Shell/Open-Shell-Menu/releases/tag/v4.4.196).
>
> If you install older one on a Windows for ARM installation (ex. using Parallels Desktop on an Apple Silicon Mac), you will no longer be able to log into your account the next time you reboot. Please refrain from installing Open-Shell on Windows for ARM.
### Temporary Translation/Language Solution ### Temporary Translation/Language Solution
1. Download [language DLL](https://coddec.github.io/Classic-Shell/www.classicshell.net/translations/index.html) 1. Download [language DLL](https://coddec.github.io/Classic-Shell/www.classicshell.net/translations/index.html)

View File

@@ -1,6 +1,14 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations"> <ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|ARM64">
<Configuration>Debug</Configuration>
<Platform>ARM64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|ARM64EC">
<Configuration>Debug</Configuration>
<Platform>ARM64EC</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|Win32"> <ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration> <Configuration>Debug</Configuration>
<Platform>Win32</Platform> <Platform>Win32</Platform>
@@ -9,6 +17,14 @@
<Configuration>Debug</Configuration> <Configuration>Debug</Configuration>
<Platform>x64</Platform> <Platform>x64</Platform>
</ProjectConfiguration> </ProjectConfiguration>
<ProjectConfiguration Include="Release|ARM64">
<Configuration>Release</Configuration>
<Platform>ARM64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|ARM64EC">
<Configuration>Release</Configuration>
<Platform>ARM64EC</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32"> <ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration> <Configuration>Release</Configuration>
<Platform>Win32</Platform> <Platform>Win32</Platform>
@@ -17,6 +33,14 @@
<Configuration>Release</Configuration> <Configuration>Release</Configuration>
<Platform>x64</Platform> <Platform>x64</Platform>
</ProjectConfiguration> </ProjectConfiguration>
<ProjectConfiguration Include="Setup|ARM64">
<Configuration>Setup</Configuration>
<Platform>ARM64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Setup|ARM64EC">
<Configuration>Setup</Configuration>
<Platform>ARM64EC</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Setup|Win32"> <ProjectConfiguration Include="Setup|Win32">
<Configuration>Setup</Configuration> <Configuration>Setup</Configuration>
<Platform>Win32</Platform> <Platform>Win32</Platform>
@@ -53,6 +77,13 @@
<PropertyGroup Condition="'$(Platform)'=='x64'"> <PropertyGroup Condition="'$(Platform)'=='x64'">
<TargetName>$(ProjectName)64</TargetName> <TargetName>$(ProjectName)64</TargetName>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Platform)'=='ARM64EC'">
<TargetName>$(ProjectName)64</TargetName>
</PropertyGroup>
<PropertyGroup Condition="'$(Platform)'=='ARM64'">
<TargetName>$(ProjectName)64</TargetName>
<BuildAsX>true</BuildAsX>
</PropertyGroup>
<PropertyGroup> <PropertyGroup>
<IgnoreImportLibrary>true</IgnoreImportLibrary> <IgnoreImportLibrary>true</IgnoreImportLibrary>
</PropertyGroup> </PropertyGroup>

View File

@@ -146,4 +146,4 @@
<Filter>Resource Files</Filter> <Filter>Resource Files</Filter>
</Image> </Image>
</ItemGroup> </ItemGroup>
</Project> </Project>

View File

@@ -1,6 +1,10 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations"> <ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|ARM64">
<Configuration>Debug</Configuration>
<Platform>ARM64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|Win32"> <ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration> <Configuration>Debug</Configuration>
<Platform>Win32</Platform> <Platform>Win32</Platform>
@@ -9,6 +13,10 @@
<Configuration>Debug</Configuration> <Configuration>Debug</Configuration>
<Platform>x64</Platform> <Platform>x64</Platform>
</ProjectConfiguration> </ProjectConfiguration>
<ProjectConfiguration Include="Release|ARM64">
<Configuration>Release</Configuration>
<Platform>ARM64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32"> <ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration> <Configuration>Release</Configuration>
<Platform>Win32</Platform> <Platform>Win32</Platform>
@@ -17,6 +25,10 @@
<Configuration>Release</Configuration> <Configuration>Release</Configuration>
<Platform>x64</Platform> <Platform>x64</Platform>
</ProjectConfiguration> </ProjectConfiguration>
<ProjectConfiguration Include="Setup|ARM64">
<Configuration>Setup</Configuration>
<Platform>ARM64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Setup|Win32"> <ProjectConfiguration Include="Setup|Win32">
<Configuration>Setup</Configuration> <Configuration>Setup</Configuration>
<Platform>Win32</Platform> <Platform>Win32</Platform>
@@ -53,6 +65,9 @@
<PropertyGroup Condition="'$(Platform)'=='x64'"> <PropertyGroup Condition="'$(Platform)'=='x64'">
<TargetName>$(ProjectName)_64</TargetName> <TargetName>$(ProjectName)_64</TargetName>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Platform)'=='ARM64'">
<TargetName>$(ProjectName)_64</TargetName>
</PropertyGroup>
<ItemDefinitionGroup> <ItemDefinitionGroup>
<ClCompile> <ClCompile>
<PrecompiledHeader>NotUsing</PrecompiledHeader> <PrecompiledHeader>NotUsing</PrecompiledHeader>

View File

@@ -1,6 +1,14 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations"> <ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|ARM64">
<Configuration>Debug</Configuration>
<Platform>ARM64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|ARM64EC">
<Configuration>Debug</Configuration>
<Platform>ARM64EC</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|Win32"> <ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration> <Configuration>Debug</Configuration>
<Platform>Win32</Platform> <Platform>Win32</Platform>
@@ -9,6 +17,14 @@
<Configuration>Debug</Configuration> <Configuration>Debug</Configuration>
<Platform>x64</Platform> <Platform>x64</Platform>
</ProjectConfiguration> </ProjectConfiguration>
<ProjectConfiguration Include="Release|ARM64">
<Configuration>Release</Configuration>
<Platform>ARM64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|ARM64EC">
<Configuration>Release</Configuration>
<Platform>ARM64EC</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32"> <ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration> <Configuration>Release</Configuration>
<Platform>Win32</Platform> <Platform>Win32</Platform>
@@ -17,6 +33,14 @@
<Configuration>Release</Configuration> <Configuration>Release</Configuration>
<Platform>x64</Platform> <Platform>x64</Platform>
</ProjectConfiguration> </ProjectConfiguration>
<ProjectConfiguration Include="Setup|ARM64">
<Configuration>Setup</Configuration>
<Platform>ARM64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Setup|ARM64EC">
<Configuration>Setup</Configuration>
<Platform>ARM64EC</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Setup|Win32"> <ProjectConfiguration Include="Setup|Win32">
<Configuration>Setup</Configuration> <Configuration>Setup</Configuration>
<Platform>Win32</Platform> <Platform>Win32</Platform>
@@ -53,6 +77,13 @@
<PropertyGroup Condition="'$(Platform)'=='x64'"> <PropertyGroup Condition="'$(Platform)'=='x64'">
<TargetName>$(ProjectName)_64</TargetName> <TargetName>$(ProjectName)_64</TargetName>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Platform)'=='ARM64EC'">
<TargetName>$(ProjectName)_64</TargetName>
</PropertyGroup>
<PropertyGroup Condition="'$(Platform)'=='ARM64'">
<TargetName>$(ProjectName)_64</TargetName>
<BuildAsX>true</BuildAsX>
</PropertyGroup>
<ItemDefinitionGroup> <ItemDefinitionGroup>
<ClCompile> <ClCompile>
<PreprocessorDefinitions>_USRDLL;CLASSICIEDLL_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessorDefinitions>_USRDLL;CLASSICIEDLL_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>

View File

@@ -98,4 +98,4 @@
<Filter>Resource Files</Filter> <Filter>Resource Files</Filter>
</Image> </Image>
</ItemGroup> </ItemGroup>
</Project> </Project>

View File

@@ -16,6 +16,14 @@
<OutDir>$(MSBuildThisFileDirectory)..\build\bin\$(Configuration)64\</OutDir> <OutDir>$(MSBuildThisFileDirectory)..\build\bin\$(Configuration)64\</OutDir>
<IntDir>$(MSBuildThisFileDirectory)..\build\obj\$(ProjectName)\$(Configuration)64\</IntDir> <IntDir>$(MSBuildThisFileDirectory)..\build\obj\$(ProjectName)\$(Configuration)64\</IntDir>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Platform)'=='ARM64'">
<OutDir>$(MSBuildThisFileDirectory)..\build\bin\$(Configuration)ARM64\</OutDir>
<IntDir>$(MSBuildThisFileDirectory)..\build\obj\$(ProjectName)\$(Configuration)ARM64\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Platform)'=='ARM64EC'">
<OutDir>$(MSBuildThisFileDirectory)..\build\bin\$(Configuration)ARM64EC\</OutDir>
<IntDir>$(MSBuildThisFileDirectory)..\build\obj\$(ProjectName)\$(Configuration)ARM64EC\</IntDir>
</PropertyGroup>
<!-- Common settings for all configurations --> <!-- Common settings for all configurations -->
<ItemDefinitionGroup> <ItemDefinitionGroup>

View File

@@ -70,12 +70,17 @@ IatHookData *SetIatHook( IMAGE_DOS_HEADER *dosHeader, DWORD iatOffset, DWORD int
{ {
IatHookData *hook=g_IatHooks+g_IatHookCount; IatHookData *hook=g_IatHooks+g_IatHookCount;
g_IatHookCount++; g_IatHookCount++;
#if defined(_M_AMD64) || defined(_M_IX86)
hook->jump[0]=hook->jump[1]=0x90; // NOP hook->jump[0]=hook->jump[1]=0x90; // NOP
hook->jump[2]=0xFF; hook->jump[3]=0x25; // JUMP hook->jump[2]=0xFF; hook->jump[3]=0x25; // JUMP
#ifdef _WIN64 #if defined(_M_AMD64)
hook->jumpOffs=0; hook->jumpOffs=0;
#else #else
hook->jumpOffs=(DWORD)(hook)+8; hook->jumpOffs=(DWORD)(hook)+8;
#endif
#elif defined(_M_ARM64)
hook->jump[0]=0x48; hook->jump[1]=0x00; hook->jump[2]=0x00; hook->jump[3]=0x58; // LDR X8, newProc
hook->jump[4]=0x00; hook->jump[5]=0x01; hook->jump[6]=0x1F; hook->jump[7]=0xD6; // BR X8
#endif #endif
hook->newProc=newProc; hook->newProc=newProc;
hook->oldProc=(void*)thunk->u1.Function; hook->oldProc=(void*)thunk->u1.Function;

View File

@@ -6,8 +6,12 @@
struct IatHookData struct IatHookData
{ {
#if defined(_M_AMD64) || defined(_M_IX86)
unsigned char jump[4]; // jump instruction 0x90, 0x90, 0xFF, 0x25 unsigned char jump[4]; // jump instruction 0x90, 0x90, 0xFF, 0x25
DWORD jumpOffs; // jump instruction offset DWORD jumpOffs; // jump instruction offset
#elif defined(_M_ARM64)
unsigned char jump[8]; // LDR <address>, BR
#endif
void *newProc; // the address of the new proc void *newProc; // the address of the new proc
void *oldProc; // the address of the old proc void *oldProc; // the address of the old proc
IMAGE_THUNK_DATA *thunk; // the IAT thunk IMAGE_THUNK_DATA *thunk; // the IAT thunk

View File

@@ -1,6 +1,14 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations"> <ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|ARM64">
<Configuration>Debug</Configuration>
<Platform>ARM64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|ARM64EC">
<Configuration>Debug</Configuration>
<Platform>ARM64EC</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|Win32"> <ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration> <Configuration>Debug</Configuration>
<Platform>Win32</Platform> <Platform>Win32</Platform>
@@ -9,6 +17,14 @@
<Configuration>Debug</Configuration> <Configuration>Debug</Configuration>
<Platform>x64</Platform> <Platform>x64</Platform>
</ProjectConfiguration> </ProjectConfiguration>
<ProjectConfiguration Include="Release|ARM64">
<Configuration>Release</Configuration>
<Platform>ARM64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|ARM64EC">
<Configuration>Release</Configuration>
<Platform>ARM64EC</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32"> <ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration> <Configuration>Release</Configuration>
<Platform>Win32</Platform> <Platform>Win32</Platform>
@@ -42,6 +58,9 @@
<PropertyGroup> <PropertyGroup>
<OutDir>$(IntDir)</OutDir> <OutDir>$(IntDir)</OutDir>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Platform)'=='ARM64'">
<BuildAsX>true</BuildAsX>
</PropertyGroup>
<ItemDefinitionGroup> <ItemDefinitionGroup>
<ClCompile> <ClCompile>
<PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>

View File

@@ -384,14 +384,14 @@ HICON CreateDisabledIcon( HICON hIcon, int iconSize )
} }
// Loads an image file into a bitmap and optionally resizes it // Loads an image file into a bitmap and optionally resizes it
HBITMAP LoadImageFile( const wchar_t *path, const SIZE *pSize, bool bUseAlpha, bool bPremultiply, std::vector<unsigned int> *pButtonAnim ) HBITMAP LoadImageFile( const wchar_t *path, const SIZE *pSize, bool bUseAlpha, bool bPremultiply, std::vector<unsigned int> *pButtonAnim, UINT dpi )
{ {
HBITMAP srcBmp=NULL; HBITMAP srcBmp=NULL;
if (_wcsicmp(PathFindExtension(path),L".bmp")==0) if (_wcsicmp(PathFindExtension(path),L".bmp")==0)
{ {
srcBmp=(HBITMAP)LoadImage(NULL,path,IMAGE_BITMAP,0,0,LR_CREATEDIBSECTION|LR_LOADFROMFILE); srcBmp=(HBITMAP)LoadImage(NULL,path,IMAGE_BITMAP,0,0,LR_CREATEDIBSECTION|LR_LOADFROMFILE);
} }
if (srcBmp && !pSize) if (srcBmp && !pSize && !dpi)
return srcBmp; return srcBmp;
CComPtr<IWICImagingFactory> pFactory; CComPtr<IWICImagingFactory> pFactory;
if (FAILED(pFactory.CoCreateInstance(CLSID_WICImagingFactory))) if (FAILED(pFactory.CoCreateInstance(CLSID_WICImagingFactory)))
@@ -482,6 +482,12 @@ HBITMAP LoadImageFile( const wchar_t *path, const SIZE *pSize, bool bUseAlpha, b
else else
frameHeightD=frameWidthD*frameHeightS/frameWidthS; frameHeightD=frameWidthD*frameHeightS/frameWidthS;
} }
if (dpi)
{
frameWidthD=ScaleForDpi(dpi,frameWidthD);
frameHeightD=ScaleForDpi(dpi,frameHeightD);
}
} }
BITMAPINFO bi={0}; BITMAPINFO bi={0};
@@ -946,7 +952,12 @@ UINT GetDpi(HWND hwnd)
return dpi; return dpi;
} }
int ScaleForDpi(UINT dpi, int value)
{
return MulDiv(value, dpi, USER_DEFAULT_SCREEN_DPI);
}
int ScaleForDpi(HWND hwnd, int value) int ScaleForDpi(HWND hwnd, int value)
{ {
return MulDiv(value, GetDpi(hwnd), USER_DEFAULT_SCREEN_DPI); return ScaleForDpi(GetDpi(hwnd), value);
} }

View File

@@ -35,7 +35,7 @@ HICON ShExtractIcon( const char *path, int index, int iconSize );
HBITMAP BitmapFromIcon( HICON hIcon, int iconSize, unsigned int **pBits, bool bDestroyIcon ); HBITMAP BitmapFromIcon( HICON hIcon, int iconSize, unsigned int **pBits, bool bDestroyIcon );
// Loads an image file into a bitmap and optionally resizes it // Loads an image file into a bitmap and optionally resizes it
HBITMAP LoadImageFile( const wchar_t *path, const SIZE *pSize, bool bUseAlpha, bool bPremultiply, std::vector<unsigned int> *pButtonAnim ); HBITMAP LoadImageFile( const wchar_t *path, const SIZE *pSize, bool bUseAlpha, bool bPremultiply, std::vector<unsigned int> *pButtonAnim, UINT dpi=0 );
// Loads a bitmap from a IMAGE resource // Loads a bitmap from a IMAGE resource
HBITMAP LoadImageResource( HMODULE hModule, const wchar_t *name, bool bTopDown, bool bPremultiply ); HBITMAP LoadImageResource( HMODULE hModule, const wchar_t *name, bool bTopDown, bool bPremultiply );
@@ -88,6 +88,8 @@ HFONT CreateFontSetting( const wchar_t *fontStr, int dpi );
// Return DPI of given window (or system DPI on older systems) // Return DPI of given window (or system DPI on older systems)
UINT GetDpi(HWND hwnd = nullptr); UINT GetDpi(HWND hwnd = nullptr);
// Scale given value according to given DPI
int ScaleForDpi(UINT dpi, int value);
// Scale given value according to DPI of window // Scale given value according to DPI of window
int ScaleForDpi(HWND hwnd, int value); int ScaleForDpi(HWND hwnd, int value);

View File

@@ -24,23 +24,15 @@ body {
<a target="_blank" href="https://github.com/Open-Shell/Open-Shell-Menu"><img src="images/OpenShell.png" style="border: 0px solid ; width: 64px; height: 64px; float:left;" alt="Open-Shell website" title="Open-Shell website"></a><h1 style="padding-top: 12px; padding-bottom: 12px;">&nbsp; Links</h1> <a target="_blank" href="https://github.com/Open-Shell/Open-Shell-Menu"><img src="images/OpenShell.png" style="border: 0px solid ; width: 64px; height: 64px; float:left;" alt="Open-Shell website" title="Open-Shell website"></a><h1 style="padding-top: 12px; padding-bottom: 12px;">&nbsp; Links</h1>
<span style="font-style: italic; color: #2b88d8; font-weight: bold;"></span><br>The latest version can be found on the Open-Shell website:<br> <span style="font-style: italic; color: #2b88d8; font-weight: bold;"></span><br>The latest version can be found on the Open-Shell website:<br>
<a target="_blank" href="https://github.com/Open-Shell/Open-Shell-Menu/releases/latest">https://github.com/Open-Shell/Open-Shell-Menu/releases/latest/</a><br> <a target="_blank" href="https://github.com/Open-Shell/Open-Shell-Menu/releases/latest">https://github.com/Open-Shell/Open-Shell-Menu/releases/latest/</a><br>
<br>
View the project history here:<br>
<span style="font-weight: bold;">History: </span><a target="_blank" href="https://coddec.github.io/Classic-Shell/www.classicshell.net/history/">https://coddec.github.io/Classic-Shell/www.classicshell.net/history/</a><br>
<br>
<br> <br>
<h2>Get Help</h1> <h2>Get Help</h1>
For answers to frequently asked questions look here:<br> Discussion forums:<br>
<span style="font-weight: bold;">FAQ: </span><a target="_blank" href="https://coddec.github.io/Classic-Shell/www.classicshell.net/faq/" target="_blank">https://coddec.github.io/Classic-Shell/www.classicshell.net/faq/</a><br> <a target="_blank" href="https://github.com/Open-Shell/Open-Shell-Menu/discussions" target="_blank">https://github.com/Open-Shell/Open-Shell-Menu/discussions</a><br>
<br>
If you don't find your answer in the FAQ, try the discussion forums:<br>
<span style="font-weight: bold;">Discussion Forums: </span><a target="_blank" href="https://github.com/Open-Shell/Open-Shell-Menu/discussions" target="_blank">https://github.com/Open-Shell/Open-Shell-Menu/discussions</a><br>
<br>
<br> <br>
<h2>Report a Problem</h1> <h2>Report a Problem</h1>
Report bugs and feature requests in the development forums:<br> Report bugs and feature requests in the development forums:<br>
<span style="font-weight: bold;">Development Forums: </span><a target="_blank" href="https://github.com/Open-Shell/Open-Shell-Menu/issues" target="_blank">https://github.com/Open-Shell/Open-Shell-Menu/issues</a><br> <a target="_blank" href="https://github.com/Open-Shell/Open-Shell-Menu/issues" target="_blank">https://github.com/Open-Shell/Open-Shell-Menu/issues</a><br>
</body></html> </body></html>

View File

@@ -9,10 +9,7 @@
The latest version can be found on the Open-Shell website:\par The latest version can be found on the Open-Shell website:\par
{{\field{\*\fldinst{HYPERLINK https://github.com/Open-Shell/Open-Shell-Menu }}{\fldrslt{https://github.com/Open-Shell/Open-Shell-Menu\ul0\cf0}}}}\f1\fs22\par {{\field{\*\fldinst{HYPERLINK https://github.com/Open-Shell/Open-Shell-Menu }}{\fldrslt{https://github.com/Open-Shell/Open-Shell-Menu\ul0\cf0}}}}\f1\fs22\par
\par \par
For answers to frequently asked questions look here:\par Use the discussion forums to get help:\par
{{\field{\*\fldinst{HYPERLINK https://coddec.github.io/Classic-Shell/www.classicshell.net/faq/ }}{\fldrslt{https://coddec.github.io/Classic-Shell/www.classicshell.net/faq/\ul0\cf0}}}}\f1\fs22\par
\par
Or use the discussion forums to get help:\par
{{\field{\*\fldinst{HYPERLINK https://github.com/Open-Shell/Open-Shell-Menu/discussions }}{\fldrslt{https://github.com/Open-Shell/Open-Shell-Menu/discussions\ul0\cf0}}}}\f1\fs22\par {{\field{\*\fldinst{HYPERLINK https://github.com/Open-Shell/Open-Shell-Menu/discussions }}{\fldrslt{https://github.com/Open-Shell/Open-Shell-Menu/discussions\ul0\cf0}}}}\f1\fs22\par
\par \par
Report problems in the Open-Shell development forums:\par Report problems in the Open-Shell development forums:\par

View File

@@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<WixLocalization Culture="en-US" Codepage="1252" xmlns="http://schemas.microsoft.com/wix/2006/localization"> <WixLocalization Culture="en-US" Codepage="1252" xmlns="http://schemas.microsoft.com/wix/2006/localization">
<String Id="Error32bit" Overridable="yes">This installer is only for 32-bit version of Windows. For 64-bit Windows you need to run Setup64.</String> <String Id="Error32bit" Overridable="yes">This installer is only for 32-bit version of Windows. For 64-bit Windows you need to run Setup64.</String>
<String Id="Error64bit" Overridable="yes">This installer is only for 64-bit version of Windows. For ARM64 Windows you need to run SetupARM64.</String>
<String Id="ErrorWin7" Overridable="yes">Open-Shell requires Windows 7 or above.</String> <String Id="ErrorWin7" Overridable="yes">Open-Shell requires Windows 7 or above.</String>
<String Id="ErrorNewVersion" Overridable="yes">A newer version of [ProductName] is already installed. The setup will now exit.</String> <String Id="ErrorNewVersion" Overridable="yes">A newer version of [ProductName] is already installed. The setup will now exit.</String>
<String Id="ExplorerTitle" Overridable="yes">Classic Explorer</String> <String Id="ExplorerTitle" Overridable="yes">Classic Explorer</String>

View File

@@ -72,337 +72,498 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Immersive7", "Skins\Immersi
EndProject EndProject
Global Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|ARM64 = Debug|ARM64
Debug|Win32 = Debug|Win32 Debug|Win32 = Debug|Win32
Debug|x64 = Debug|x64 Debug|x64 = Debug|x64
Release|ARM64 = Release|ARM64
Release|Win32 = Release|Win32 Release|Win32 = Release|Win32
Release|x64 = Release|x64 Release|x64 = Release|x64
Setup|ARM64 = Setup|ARM64
Setup|Win32 = Setup|Win32 Setup|Win32 = Setup|Win32
Setup|x64 = Setup|x64 Setup|x64 = Setup|x64
EndGlobalSection EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution GlobalSection(ProjectConfigurationPlatforms) = postSolution
{87D5FE20-AF86-458A-9AA3-3131EB06179B}.Debug|ARM64.ActiveCfg = Debug|ARM64
{87D5FE20-AF86-458A-9AA3-3131EB06179B}.Debug|ARM64.Build.0 = Debug|ARM64
{87D5FE20-AF86-458A-9AA3-3131EB06179B}.Debug|ARM64.Deploy.0 = Debug|ARM64
{87D5FE20-AF86-458A-9AA3-3131EB06179B}.Debug|Win32.ActiveCfg = Debug|Win32 {87D5FE20-AF86-458A-9AA3-3131EB06179B}.Debug|Win32.ActiveCfg = Debug|Win32
{87D5FE20-AF86-458A-9AA3-3131EB06179B}.Debug|Win32.Build.0 = Debug|Win32 {87D5FE20-AF86-458A-9AA3-3131EB06179B}.Debug|Win32.Build.0 = Debug|Win32
{87D5FE20-AF86-458A-9AA3-3131EB06179B}.Debug|x64.ActiveCfg = Debug|x64 {87D5FE20-AF86-458A-9AA3-3131EB06179B}.Debug|x64.ActiveCfg = Debug|x64
{87D5FE20-AF86-458A-9AA3-3131EB06179B}.Debug|x64.Build.0 = Debug|x64 {87D5FE20-AF86-458A-9AA3-3131EB06179B}.Debug|x64.Build.0 = Debug|x64
{87D5FE20-AF86-458A-9AA3-3131EB06179B}.Release|ARM64.ActiveCfg = Release|ARM64
{87D5FE20-AF86-458A-9AA3-3131EB06179B}.Release|ARM64.Build.0 = Release|ARM64
{87D5FE20-AF86-458A-9AA3-3131EB06179B}.Release|ARM64.Deploy.0 = Release|ARM64
{87D5FE20-AF86-458A-9AA3-3131EB06179B}.Release|Win32.ActiveCfg = Release|Win32 {87D5FE20-AF86-458A-9AA3-3131EB06179B}.Release|Win32.ActiveCfg = Release|Win32
{87D5FE20-AF86-458A-9AA3-3131EB06179B}.Release|Win32.Build.0 = Release|Win32 {87D5FE20-AF86-458A-9AA3-3131EB06179B}.Release|Win32.Build.0 = Release|Win32
{87D5FE20-AF86-458A-9AA3-3131EB06179B}.Release|x64.ActiveCfg = Release|x64 {87D5FE20-AF86-458A-9AA3-3131EB06179B}.Release|x64.ActiveCfg = Release|x64
{87D5FE20-AF86-458A-9AA3-3131EB06179B}.Release|x64.Build.0 = Release|x64 {87D5FE20-AF86-458A-9AA3-3131EB06179B}.Release|x64.Build.0 = Release|x64
{87D5FE20-AF86-458A-9AA3-3131EB06179B}.Setup|ARM64.ActiveCfg = Setup|ARM64
{87D5FE20-AF86-458A-9AA3-3131EB06179B}.Setup|ARM64.Build.0 = Setup|ARM64
{87D5FE20-AF86-458A-9AA3-3131EB06179B}.Setup|Win32.ActiveCfg = Setup|Win32 {87D5FE20-AF86-458A-9AA3-3131EB06179B}.Setup|Win32.ActiveCfg = Setup|Win32
{87D5FE20-AF86-458A-9AA3-3131EB06179B}.Setup|Win32.Build.0 = Setup|Win32 {87D5FE20-AF86-458A-9AA3-3131EB06179B}.Setup|Win32.Build.0 = Setup|Win32
{87D5FE20-AF86-458A-9AA3-3131EB06179B}.Setup|x64.ActiveCfg = Setup|x64 {87D5FE20-AF86-458A-9AA3-3131EB06179B}.Setup|x64.ActiveCfg = Setup|x64
{87D5FE20-AF86-458A-9AA3-3131EB06179B}.Setup|x64.Build.0 = Setup|x64 {87D5FE20-AF86-458A-9AA3-3131EB06179B}.Setup|x64.Build.0 = Setup|x64
{85DEECBB-1F9B-4983-9D54-3BF42182B7E7}.Debug|ARM64.ActiveCfg = Debug|ARM64
{85DEECBB-1F9B-4983-9D54-3BF42182B7E7}.Debug|ARM64.Build.0 = Debug|ARM64
{85DEECBB-1F9B-4983-9D54-3BF42182B7E7}.Debug|ARM64.Deploy.0 = Debug|ARM64
{85DEECBB-1F9B-4983-9D54-3BF42182B7E7}.Debug|Win32.ActiveCfg = Debug|Win32 {85DEECBB-1F9B-4983-9D54-3BF42182B7E7}.Debug|Win32.ActiveCfg = Debug|Win32
{85DEECBB-1F9B-4983-9D54-3BF42182B7E7}.Debug|Win32.Build.0 = Debug|Win32 {85DEECBB-1F9B-4983-9D54-3BF42182B7E7}.Debug|Win32.Build.0 = Debug|Win32
{85DEECBB-1F9B-4983-9D54-3BF42182B7E7}.Debug|x64.ActiveCfg = Debug|x64 {85DEECBB-1F9B-4983-9D54-3BF42182B7E7}.Debug|x64.ActiveCfg = Debug|x64
{85DEECBB-1F9B-4983-9D54-3BF42182B7E7}.Debug|x64.Build.0 = Debug|x64 {85DEECBB-1F9B-4983-9D54-3BF42182B7E7}.Debug|x64.Build.0 = Debug|x64
{85DEECBB-1F9B-4983-9D54-3BF42182B7E7}.Release|ARM64.ActiveCfg = Release|ARM64
{85DEECBB-1F9B-4983-9D54-3BF42182B7E7}.Release|ARM64.Build.0 = Release|ARM64
{85DEECBB-1F9B-4983-9D54-3BF42182B7E7}.Release|ARM64.Deploy.0 = Release|ARM64
{85DEECBB-1F9B-4983-9D54-3BF42182B7E7}.Release|Win32.ActiveCfg = Release|Win32 {85DEECBB-1F9B-4983-9D54-3BF42182B7E7}.Release|Win32.ActiveCfg = Release|Win32
{85DEECBB-1F9B-4983-9D54-3BF42182B7E7}.Release|Win32.Build.0 = Release|Win32 {85DEECBB-1F9B-4983-9D54-3BF42182B7E7}.Release|Win32.Build.0 = Release|Win32
{85DEECBB-1F9B-4983-9D54-3BF42182B7E7}.Release|x64.ActiveCfg = Release|x64 {85DEECBB-1F9B-4983-9D54-3BF42182B7E7}.Release|x64.ActiveCfg = Release|x64
{85DEECBB-1F9B-4983-9D54-3BF42182B7E7}.Release|x64.Build.0 = Release|x64 {85DEECBB-1F9B-4983-9D54-3BF42182B7E7}.Release|x64.Build.0 = Release|x64
{85DEECBB-1F9B-4983-9D54-3BF42182B7E7}.Setup|ARM64.ActiveCfg = Setup|ARM64
{85DEECBB-1F9B-4983-9D54-3BF42182B7E7}.Setup|ARM64.Build.0 = Setup|ARM64
{85DEECBB-1F9B-4983-9D54-3BF42182B7E7}.Setup|Win32.ActiveCfg = Setup|Win32 {85DEECBB-1F9B-4983-9D54-3BF42182B7E7}.Setup|Win32.ActiveCfg = Setup|Win32
{85DEECBB-1F9B-4983-9D54-3BF42182B7E7}.Setup|Win32.Build.0 = Setup|Win32 {85DEECBB-1F9B-4983-9D54-3BF42182B7E7}.Setup|Win32.Build.0 = Setup|Win32
{85DEECBB-1F9B-4983-9D54-3BF42182B7E7}.Setup|x64.ActiveCfg = Setup|x64 {85DEECBB-1F9B-4983-9D54-3BF42182B7E7}.Setup|x64.ActiveCfg = Setup|x64
{85DEECBB-1F9B-4983-9D54-3BF42182B7E7}.Setup|x64.Build.0 = Setup|x64 {85DEECBB-1F9B-4983-9D54-3BF42182B7E7}.Setup|x64.Build.0 = Setup|x64
{9AF324B7-F786-4D85-B2E1-6E51720F874E}.Debug|ARM64.ActiveCfg = Debug|ARM64
{9AF324B7-F786-4D85-B2E1-6E51720F874E}.Debug|ARM64.Build.0 = Debug|ARM64
{9AF324B7-F786-4D85-B2E1-6E51720F874E}.Debug|Win32.ActiveCfg = Debug|Win32 {9AF324B7-F786-4D85-B2E1-6E51720F874E}.Debug|Win32.ActiveCfg = Debug|Win32
{9AF324B7-F786-4D85-B2E1-6E51720F874E}.Debug|Win32.Build.0 = Debug|Win32 {9AF324B7-F786-4D85-B2E1-6E51720F874E}.Debug|Win32.Build.0 = Debug|Win32
{9AF324B7-F786-4D85-B2E1-6E51720F874E}.Debug|x64.ActiveCfg = Debug|x64 {9AF324B7-F786-4D85-B2E1-6E51720F874E}.Debug|x64.ActiveCfg = Debug|x64
{9AF324B7-F786-4D85-B2E1-6E51720F874E}.Debug|x64.Build.0 = Debug|x64 {9AF324B7-F786-4D85-B2E1-6E51720F874E}.Debug|x64.Build.0 = Debug|x64
{9AF324B7-F786-4D85-B2E1-6E51720F874E}.Release|ARM64.ActiveCfg = Release|ARM64
{9AF324B7-F786-4D85-B2E1-6E51720F874E}.Release|ARM64.Build.0 = Release|ARM64
{9AF324B7-F786-4D85-B2E1-6E51720F874E}.Release|Win32.ActiveCfg = Release|Win32 {9AF324B7-F786-4D85-B2E1-6E51720F874E}.Release|Win32.ActiveCfg = Release|Win32
{9AF324B7-F786-4D85-B2E1-6E51720F874E}.Release|Win32.Build.0 = Release|Win32 {9AF324B7-F786-4D85-B2E1-6E51720F874E}.Release|Win32.Build.0 = Release|Win32
{9AF324B7-F786-4D85-B2E1-6E51720F874E}.Release|x64.ActiveCfg = Release|x64 {9AF324B7-F786-4D85-B2E1-6E51720F874E}.Release|x64.ActiveCfg = Release|x64
{9AF324B7-F786-4D85-B2E1-6E51720F874E}.Release|x64.Build.0 = Release|x64 {9AF324B7-F786-4D85-B2E1-6E51720F874E}.Release|x64.Build.0 = Release|x64
{9AF324B7-F786-4D85-B2E1-6E51720F874E}.Setup|ARM64.ActiveCfg = Setup|ARM64
{9AF324B7-F786-4D85-B2E1-6E51720F874E}.Setup|ARM64.Build.0 = Setup|ARM64
{9AF324B7-F786-4D85-B2E1-6E51720F874E}.Setup|Win32.ActiveCfg = Setup|Win32 {9AF324B7-F786-4D85-B2E1-6E51720F874E}.Setup|Win32.ActiveCfg = Setup|Win32
{9AF324B7-F786-4D85-B2E1-6E51720F874E}.Setup|Win32.Build.0 = Setup|Win32 {9AF324B7-F786-4D85-B2E1-6E51720F874E}.Setup|Win32.Build.0 = Setup|Win32
{9AF324B7-F786-4D85-B2E1-6E51720F874E}.Setup|x64.ActiveCfg = Setup|x64 {9AF324B7-F786-4D85-B2E1-6E51720F874E}.Setup|x64.ActiveCfg = Setup|x64
{9AF324B7-F786-4D85-B2E1-6E51720F874E}.Setup|x64.Build.0 = Setup|x64 {9AF324B7-F786-4D85-B2E1-6E51720F874E}.Setup|x64.Build.0 = Setup|x64
{A4A4D3B1-24E7-401E-A37C-72141D7603DC}.Debug|ARM64.ActiveCfg = Debug|Win32
{A4A4D3B1-24E7-401E-A37C-72141D7603DC}.Debug|ARM64.Build.0 = Debug|Win32
{A4A4D3B1-24E7-401E-A37C-72141D7603DC}.Debug|Win32.ActiveCfg = Debug|Win32 {A4A4D3B1-24E7-401E-A37C-72141D7603DC}.Debug|Win32.ActiveCfg = Debug|Win32
{A4A4D3B1-24E7-401E-A37C-72141D7603DC}.Debug|Win32.Build.0 = Debug|Win32 {A4A4D3B1-24E7-401E-A37C-72141D7603DC}.Debug|Win32.Build.0 = Debug|Win32
{A4A4D3B1-24E7-401E-A37C-72141D7603DC}.Debug|x64.ActiveCfg = Debug|Win32 {A4A4D3B1-24E7-401E-A37C-72141D7603DC}.Debug|x64.ActiveCfg = Debug|Win32
{A4A4D3B1-24E7-401E-A37C-72141D7603DC}.Debug|x64.Build.0 = Debug|Win32
{A4A4D3B1-24E7-401E-A37C-72141D7603DC}.Release|ARM64.ActiveCfg = Release|Win32
{A4A4D3B1-24E7-401E-A37C-72141D7603DC}.Release|ARM64.Build.0 = Release|Win32
{A4A4D3B1-24E7-401E-A37C-72141D7603DC}.Release|Win32.ActiveCfg = Release|Win32 {A4A4D3B1-24E7-401E-A37C-72141D7603DC}.Release|Win32.ActiveCfg = Release|Win32
{A4A4D3B1-24E7-401E-A37C-72141D7603DC}.Release|Win32.Build.0 = Release|Win32 {A4A4D3B1-24E7-401E-A37C-72141D7603DC}.Release|Win32.Build.0 = Release|Win32
{A4A4D3B1-24E7-401E-A37C-72141D7603DC}.Release|x64.ActiveCfg = Release|Win32 {A4A4D3B1-24E7-401E-A37C-72141D7603DC}.Release|x64.ActiveCfg = Release|Win32
{A4A4D3B1-24E7-401E-A37C-72141D7603DC}.Release|x64.Build.0 = Release|Win32
{A4A4D3B1-24E7-401E-A37C-72141D7603DC}.Setup|ARM64.ActiveCfg = Release|Win32
{A4A4D3B1-24E7-401E-A37C-72141D7603DC}.Setup|Win32.ActiveCfg = Release|Win32 {A4A4D3B1-24E7-401E-A37C-72141D7603DC}.Setup|Win32.ActiveCfg = Release|Win32
{A4A4D3B1-24E7-401E-A37C-72141D7603DC}.Setup|x64.ActiveCfg = Release|Win32 {A4A4D3B1-24E7-401E-A37C-72141D7603DC}.Setup|x64.ActiveCfg = Release|Win32
{EA65FDDD-CB77-417F-8BB4-2F3ECB5B3E75}.Debug|ARM64.ActiveCfg = Resource|Win32
{EA65FDDD-CB77-417F-8BB4-2F3ECB5B3E75}.Debug|ARM64.Build.0 = Resource|Win32
{EA65FDDD-CB77-417F-8BB4-2F3ECB5B3E75}.Debug|Win32.ActiveCfg = Resource|Win32 {EA65FDDD-CB77-417F-8BB4-2F3ECB5B3E75}.Debug|Win32.ActiveCfg = Resource|Win32
{EA65FDDD-CB77-417F-8BB4-2F3ECB5B3E75}.Debug|Win32.Build.0 = Resource|Win32 {EA65FDDD-CB77-417F-8BB4-2F3ECB5B3E75}.Debug|Win32.Build.0 = Resource|Win32
{EA65FDDD-CB77-417F-8BB4-2F3ECB5B3E75}.Debug|x64.ActiveCfg = Resource|Win32 {EA65FDDD-CB77-417F-8BB4-2F3ECB5B3E75}.Debug|x64.ActiveCfg = Resource|Win32
{EA65FDDD-CB77-417F-8BB4-2F3ECB5B3E75}.Debug|x64.Build.0 = Resource|Win32 {EA65FDDD-CB77-417F-8BB4-2F3ECB5B3E75}.Debug|x64.Build.0 = Resource|Win32
{EA65FDDD-CB77-417F-8BB4-2F3ECB5B3E75}.Release|ARM64.ActiveCfg = Resource|Win32
{EA65FDDD-CB77-417F-8BB4-2F3ECB5B3E75}.Release|ARM64.Build.0 = Resource|Win32
{EA65FDDD-CB77-417F-8BB4-2F3ECB5B3E75}.Release|Win32.ActiveCfg = Resource|Win32 {EA65FDDD-CB77-417F-8BB4-2F3ECB5B3E75}.Release|Win32.ActiveCfg = Resource|Win32
{EA65FDDD-CB77-417F-8BB4-2F3ECB5B3E75}.Release|Win32.Build.0 = Resource|Win32 {EA65FDDD-CB77-417F-8BB4-2F3ECB5B3E75}.Release|Win32.Build.0 = Resource|Win32
{EA65FDDD-CB77-417F-8BB4-2F3ECB5B3E75}.Release|x64.ActiveCfg = Resource|Win32 {EA65FDDD-CB77-417F-8BB4-2F3ECB5B3E75}.Release|x64.ActiveCfg = Resource|Win32
{EA65FDDD-CB77-417F-8BB4-2F3ECB5B3E75}.Release|x64.Build.0 = Resource|Win32 {EA65FDDD-CB77-417F-8BB4-2F3ECB5B3E75}.Release|x64.Build.0 = Resource|Win32
{EA65FDDD-CB77-417F-8BB4-2F3ECB5B3E75}.Setup|ARM64.ActiveCfg = Resource|Win32
{EA65FDDD-CB77-417F-8BB4-2F3ECB5B3E75}.Setup|Win32.ActiveCfg = Resource|Win32 {EA65FDDD-CB77-417F-8BB4-2F3ECB5B3E75}.Setup|Win32.ActiveCfg = Resource|Win32
{EA65FDDD-CB77-417F-8BB4-2F3ECB5B3E75}.Setup|Win32.Build.0 = Resource|Win32 {EA65FDDD-CB77-417F-8BB4-2F3ECB5B3E75}.Setup|Win32.Build.0 = Resource|Win32
{EA65FDDD-CB77-417F-8BB4-2F3ECB5B3E75}.Setup|x64.ActiveCfg = Resource|Win32 {EA65FDDD-CB77-417F-8BB4-2F3ECB5B3E75}.Setup|x64.ActiveCfg = Resource|Win32
{404821C5-4EE4-4908-A759-5EF6DAC14AB6}.Debug|ARM64.ActiveCfg = Resource|Win32
{404821C5-4EE4-4908-A759-5EF6DAC14AB6}.Debug|ARM64.Build.0 = Resource|Win32
{404821C5-4EE4-4908-A759-5EF6DAC14AB6}.Debug|Win32.ActiveCfg = Resource|Win32 {404821C5-4EE4-4908-A759-5EF6DAC14AB6}.Debug|Win32.ActiveCfg = Resource|Win32
{404821C5-4EE4-4908-A759-5EF6DAC14AB6}.Debug|Win32.Build.0 = Resource|Win32 {404821C5-4EE4-4908-A759-5EF6DAC14AB6}.Debug|Win32.Build.0 = Resource|Win32
{404821C5-4EE4-4908-A759-5EF6DAC14AB6}.Debug|x64.ActiveCfg = Resource|Win32 {404821C5-4EE4-4908-A759-5EF6DAC14AB6}.Debug|x64.ActiveCfg = Resource|Win32
{404821C5-4EE4-4908-A759-5EF6DAC14AB6}.Debug|x64.Build.0 = Resource|Win32 {404821C5-4EE4-4908-A759-5EF6DAC14AB6}.Debug|x64.Build.0 = Resource|Win32
{404821C5-4EE4-4908-A759-5EF6DAC14AB6}.Release|ARM64.ActiveCfg = Resource|Win32
{404821C5-4EE4-4908-A759-5EF6DAC14AB6}.Release|ARM64.Build.0 = Resource|Win32
{404821C5-4EE4-4908-A759-5EF6DAC14AB6}.Release|Win32.ActiveCfg = Resource|Win32 {404821C5-4EE4-4908-A759-5EF6DAC14AB6}.Release|Win32.ActiveCfg = Resource|Win32
{404821C5-4EE4-4908-A759-5EF6DAC14AB6}.Release|Win32.Build.0 = Resource|Win32 {404821C5-4EE4-4908-A759-5EF6DAC14AB6}.Release|Win32.Build.0 = Resource|Win32
{404821C5-4EE4-4908-A759-5EF6DAC14AB6}.Release|x64.ActiveCfg = Resource|Win32 {404821C5-4EE4-4908-A759-5EF6DAC14AB6}.Release|x64.ActiveCfg = Resource|Win32
{404821C5-4EE4-4908-A759-5EF6DAC14AB6}.Release|x64.Build.0 = Resource|Win32 {404821C5-4EE4-4908-A759-5EF6DAC14AB6}.Release|x64.Build.0 = Resource|Win32
{404821C5-4EE4-4908-A759-5EF6DAC14AB6}.Setup|ARM64.ActiveCfg = Resource|Win32
{404821C5-4EE4-4908-A759-5EF6DAC14AB6}.Setup|Win32.ActiveCfg = Resource|Win32 {404821C5-4EE4-4908-A759-5EF6DAC14AB6}.Setup|Win32.ActiveCfg = Resource|Win32
{404821C5-4EE4-4908-A759-5EF6DAC14AB6}.Setup|Win32.Build.0 = Resource|Win32 {404821C5-4EE4-4908-A759-5EF6DAC14AB6}.Setup|Win32.Build.0 = Resource|Win32
{404821C5-4EE4-4908-A759-5EF6DAC14AB6}.Setup|x64.ActiveCfg = Resource|Win32 {404821C5-4EE4-4908-A759-5EF6DAC14AB6}.Setup|x64.ActiveCfg = Resource|Win32
{9EC23CA9-384A-4EEB-979E-69879DC1A78C}.Debug|ARM64.ActiveCfg = Resource|Win32
{9EC23CA9-384A-4EEB-979E-69879DC1A78C}.Debug|ARM64.Build.0 = Resource|Win32
{9EC23CA9-384A-4EEB-979E-69879DC1A78C}.Debug|Win32.ActiveCfg = Resource|Win32 {9EC23CA9-384A-4EEB-979E-69879DC1A78C}.Debug|Win32.ActiveCfg = Resource|Win32
{9EC23CA9-384A-4EEB-979E-69879DC1A78C}.Debug|Win32.Build.0 = Resource|Win32 {9EC23CA9-384A-4EEB-979E-69879DC1A78C}.Debug|Win32.Build.0 = Resource|Win32
{9EC23CA9-384A-4EEB-979E-69879DC1A78C}.Debug|x64.ActiveCfg = Resource|Win32 {9EC23CA9-384A-4EEB-979E-69879DC1A78C}.Debug|x64.ActiveCfg = Resource|Win32
{9EC23CA9-384A-4EEB-979E-69879DC1A78C}.Debug|x64.Build.0 = Resource|Win32 {9EC23CA9-384A-4EEB-979E-69879DC1A78C}.Debug|x64.Build.0 = Resource|Win32
{9EC23CA9-384A-4EEB-979E-69879DC1A78C}.Release|ARM64.ActiveCfg = Resource|Win32
{9EC23CA9-384A-4EEB-979E-69879DC1A78C}.Release|ARM64.Build.0 = Resource|Win32
{9EC23CA9-384A-4EEB-979E-69879DC1A78C}.Release|Win32.ActiveCfg = Resource|Win32 {9EC23CA9-384A-4EEB-979E-69879DC1A78C}.Release|Win32.ActiveCfg = Resource|Win32
{9EC23CA9-384A-4EEB-979E-69879DC1A78C}.Release|Win32.Build.0 = Resource|Win32 {9EC23CA9-384A-4EEB-979E-69879DC1A78C}.Release|Win32.Build.0 = Resource|Win32
{9EC23CA9-384A-4EEB-979E-69879DC1A78C}.Release|x64.ActiveCfg = Resource|Win32 {9EC23CA9-384A-4EEB-979E-69879DC1A78C}.Release|x64.ActiveCfg = Resource|Win32
{9EC23CA9-384A-4EEB-979E-69879DC1A78C}.Release|x64.Build.0 = Resource|Win32 {9EC23CA9-384A-4EEB-979E-69879DC1A78C}.Release|x64.Build.0 = Resource|Win32
{9EC23CA9-384A-4EEB-979E-69879DC1A78C}.Setup|ARM64.ActiveCfg = Resource|Win32
{9EC23CA9-384A-4EEB-979E-69879DC1A78C}.Setup|Win32.ActiveCfg = Resource|Win32 {9EC23CA9-384A-4EEB-979E-69879DC1A78C}.Setup|Win32.ActiveCfg = Resource|Win32
{9EC23CA9-384A-4EEB-979E-69879DC1A78C}.Setup|Win32.Build.0 = Resource|Win32 {9EC23CA9-384A-4EEB-979E-69879DC1A78C}.Setup|Win32.Build.0 = Resource|Win32
{9EC23CA9-384A-4EEB-979E-69879DC1A78C}.Setup|x64.ActiveCfg = Resource|Win32 {9EC23CA9-384A-4EEB-979E-69879DC1A78C}.Setup|x64.ActiveCfg = Resource|Win32
{066C9721-26D5-4C4D-868E-50C2BA0A8196}.Debug|ARM64.ActiveCfg = Resource|Win32
{066C9721-26D5-4C4D-868E-50C2BA0A8196}.Debug|ARM64.Build.0 = Resource|Win32
{066C9721-26D5-4C4D-868E-50C2BA0A8196}.Debug|Win32.ActiveCfg = Resource|Win32 {066C9721-26D5-4C4D-868E-50C2BA0A8196}.Debug|Win32.ActiveCfg = Resource|Win32
{066C9721-26D5-4C4D-868E-50C2BA0A8196}.Debug|Win32.Build.0 = Resource|Win32 {066C9721-26D5-4C4D-868E-50C2BA0A8196}.Debug|Win32.Build.0 = Resource|Win32
{066C9721-26D5-4C4D-868E-50C2BA0A8196}.Debug|x64.ActiveCfg = Resource|Win32 {066C9721-26D5-4C4D-868E-50C2BA0A8196}.Debug|x64.ActiveCfg = Resource|Win32
{066C9721-26D5-4C4D-868E-50C2BA0A8196}.Debug|x64.Build.0 = Resource|Win32 {066C9721-26D5-4C4D-868E-50C2BA0A8196}.Debug|x64.Build.0 = Resource|Win32
{066C9721-26D5-4C4D-868E-50C2BA0A8196}.Release|ARM64.ActiveCfg = Resource|Win32
{066C9721-26D5-4C4D-868E-50C2BA0A8196}.Release|ARM64.Build.0 = Resource|Win32
{066C9721-26D5-4C4D-868E-50C2BA0A8196}.Release|Win32.ActiveCfg = Resource|Win32 {066C9721-26D5-4C4D-868E-50C2BA0A8196}.Release|Win32.ActiveCfg = Resource|Win32
{066C9721-26D5-4C4D-868E-50C2BA0A8196}.Release|Win32.Build.0 = Resource|Win32 {066C9721-26D5-4C4D-868E-50C2BA0A8196}.Release|Win32.Build.0 = Resource|Win32
{066C9721-26D5-4C4D-868E-50C2BA0A8196}.Release|x64.ActiveCfg = Resource|Win32 {066C9721-26D5-4C4D-868E-50C2BA0A8196}.Release|x64.ActiveCfg = Resource|Win32
{066C9721-26D5-4C4D-868E-50C2BA0A8196}.Release|x64.Build.0 = Resource|Win32 {066C9721-26D5-4C4D-868E-50C2BA0A8196}.Release|x64.Build.0 = Resource|Win32
{066C9721-26D5-4C4D-868E-50C2BA0A8196}.Setup|ARM64.ActiveCfg = Resource|Win32
{066C9721-26D5-4C4D-868E-50C2BA0A8196}.Setup|Win32.ActiveCfg = Resource|Win32 {066C9721-26D5-4C4D-868E-50C2BA0A8196}.Setup|Win32.ActiveCfg = Resource|Win32
{066C9721-26D5-4C4D-868E-50C2BA0A8196}.Setup|Win32.Build.0 = Resource|Win32 {066C9721-26D5-4C4D-868E-50C2BA0A8196}.Setup|Win32.Build.0 = Resource|Win32
{066C9721-26D5-4C4D-868E-50C2BA0A8196}.Setup|x64.ActiveCfg = Resource|Win32 {066C9721-26D5-4C4D-868E-50C2BA0A8196}.Setup|x64.ActiveCfg = Resource|Win32
{66D1EAA4-65D1-45CC-9989-E616FC0575EB}.Debug|ARM64.ActiveCfg = Resource|Win32
{66D1EAA4-65D1-45CC-9989-E616FC0575EB}.Debug|ARM64.Build.0 = Resource|Win32
{66D1EAA4-65D1-45CC-9989-E616FC0575EB}.Debug|Win32.ActiveCfg = Resource|Win32 {66D1EAA4-65D1-45CC-9989-E616FC0575EB}.Debug|Win32.ActiveCfg = Resource|Win32
{66D1EAA4-65D1-45CC-9989-E616FC0575EB}.Debug|Win32.Build.0 = Resource|Win32 {66D1EAA4-65D1-45CC-9989-E616FC0575EB}.Debug|Win32.Build.0 = Resource|Win32
{66D1EAA4-65D1-45CC-9989-E616FC0575EB}.Debug|x64.ActiveCfg = Resource|Win32 {66D1EAA4-65D1-45CC-9989-E616FC0575EB}.Debug|x64.ActiveCfg = Resource|Win32
{66D1EAA4-65D1-45CC-9989-E616FC0575EB}.Debug|x64.Build.0 = Resource|Win32 {66D1EAA4-65D1-45CC-9989-E616FC0575EB}.Debug|x64.Build.0 = Resource|Win32
{66D1EAA4-65D1-45CC-9989-E616FC0575EB}.Release|ARM64.ActiveCfg = Resource|Win32
{66D1EAA4-65D1-45CC-9989-E616FC0575EB}.Release|ARM64.Build.0 = Resource|Win32
{66D1EAA4-65D1-45CC-9989-E616FC0575EB}.Release|Win32.ActiveCfg = Resource|Win32 {66D1EAA4-65D1-45CC-9989-E616FC0575EB}.Release|Win32.ActiveCfg = Resource|Win32
{66D1EAA4-65D1-45CC-9989-E616FC0575EB}.Release|Win32.Build.0 = Resource|Win32 {66D1EAA4-65D1-45CC-9989-E616FC0575EB}.Release|Win32.Build.0 = Resource|Win32
{66D1EAA4-65D1-45CC-9989-E616FC0575EB}.Release|x64.ActiveCfg = Resource|Win32 {66D1EAA4-65D1-45CC-9989-E616FC0575EB}.Release|x64.ActiveCfg = Resource|Win32
{66D1EAA4-65D1-45CC-9989-E616FC0575EB}.Release|x64.Build.0 = Resource|Win32 {66D1EAA4-65D1-45CC-9989-E616FC0575EB}.Release|x64.Build.0 = Resource|Win32
{66D1EAA4-65D1-45CC-9989-E616FC0575EB}.Setup|ARM64.ActiveCfg = Resource|Win32
{66D1EAA4-65D1-45CC-9989-E616FC0575EB}.Setup|Win32.ActiveCfg = Resource|Win32 {66D1EAA4-65D1-45CC-9989-E616FC0575EB}.Setup|Win32.ActiveCfg = Resource|Win32
{66D1EAA4-65D1-45CC-9989-E616FC0575EB}.Setup|Win32.Build.0 = Resource|Win32 {66D1EAA4-65D1-45CC-9989-E616FC0575EB}.Setup|Win32.Build.0 = Resource|Win32
{66D1EAA4-65D1-45CC-9989-E616FC0575EB}.Setup|x64.ActiveCfg = Resource|Win32 {66D1EAA4-65D1-45CC-9989-E616FC0575EB}.Setup|x64.ActiveCfg = Resource|Win32
{81EB6336-366C-47DD-82CF-FF6C36CCD2B5}.Debug|ARM64.ActiveCfg = Resource|Win32
{81EB6336-366C-47DD-82CF-FF6C36CCD2B5}.Debug|ARM64.Build.0 = Resource|Win32
{81EB6336-366C-47DD-82CF-FF6C36CCD2B5}.Debug|Win32.ActiveCfg = Resource|Win32 {81EB6336-366C-47DD-82CF-FF6C36CCD2B5}.Debug|Win32.ActiveCfg = Resource|Win32
{81EB6336-366C-47DD-82CF-FF6C36CCD2B5}.Debug|Win32.Build.0 = Resource|Win32 {81EB6336-366C-47DD-82CF-FF6C36CCD2B5}.Debug|Win32.Build.0 = Resource|Win32
{81EB6336-366C-47DD-82CF-FF6C36CCD2B5}.Debug|x64.ActiveCfg = Resource|Win32 {81EB6336-366C-47DD-82CF-FF6C36CCD2B5}.Debug|x64.ActiveCfg = Resource|Win32
{81EB6336-366C-47DD-82CF-FF6C36CCD2B5}.Debug|x64.Build.0 = Resource|Win32 {81EB6336-366C-47DD-82CF-FF6C36CCD2B5}.Debug|x64.Build.0 = Resource|Win32
{81EB6336-366C-47DD-82CF-FF6C36CCD2B5}.Release|ARM64.ActiveCfg = Resource|Win32
{81EB6336-366C-47DD-82CF-FF6C36CCD2B5}.Release|ARM64.Build.0 = Resource|Win32
{81EB6336-366C-47DD-82CF-FF6C36CCD2B5}.Release|Win32.ActiveCfg = Resource|Win32 {81EB6336-366C-47DD-82CF-FF6C36CCD2B5}.Release|Win32.ActiveCfg = Resource|Win32
{81EB6336-366C-47DD-82CF-FF6C36CCD2B5}.Release|Win32.Build.0 = Resource|Win32 {81EB6336-366C-47DD-82CF-FF6C36CCD2B5}.Release|Win32.Build.0 = Resource|Win32
{81EB6336-366C-47DD-82CF-FF6C36CCD2B5}.Release|x64.ActiveCfg = Resource|Win32 {81EB6336-366C-47DD-82CF-FF6C36CCD2B5}.Release|x64.ActiveCfg = Resource|Win32
{81EB6336-366C-47DD-82CF-FF6C36CCD2B5}.Release|x64.Build.0 = Resource|Win32 {81EB6336-366C-47DD-82CF-FF6C36CCD2B5}.Release|x64.Build.0 = Resource|Win32
{81EB6336-366C-47DD-82CF-FF6C36CCD2B5}.Setup|ARM64.ActiveCfg = Resource|Win32
{81EB6336-366C-47DD-82CF-FF6C36CCD2B5}.Setup|Win32.ActiveCfg = Resource|Win32 {81EB6336-366C-47DD-82CF-FF6C36CCD2B5}.Setup|Win32.ActiveCfg = Resource|Win32
{81EB6336-366C-47DD-82CF-FF6C36CCD2B5}.Setup|Win32.Build.0 = Resource|Win32 {81EB6336-366C-47DD-82CF-FF6C36CCD2B5}.Setup|Win32.Build.0 = Resource|Win32
{81EB6336-366C-47DD-82CF-FF6C36CCD2B5}.Setup|x64.ActiveCfg = Resource|Win32 {81EB6336-366C-47DD-82CF-FF6C36CCD2B5}.Setup|x64.ActiveCfg = Resource|Win32
{E1017135-9916-4B11-9AC5-1EC0BD8F8CD6}.Debug|ARM64.ActiveCfg = Debug|Win32
{E1017135-9916-4B11-9AC5-1EC0BD8F8CD6}.Debug|Win32.ActiveCfg = Debug|Win32 {E1017135-9916-4B11-9AC5-1EC0BD8F8CD6}.Debug|Win32.ActiveCfg = Debug|Win32
{E1017135-9916-4B11-9AC5-1EC0BD8F8CD6}.Debug|Win32.Build.0 = Debug|Win32 {E1017135-9916-4B11-9AC5-1EC0BD8F8CD6}.Debug|Win32.Build.0 = Debug|Win32
{E1017135-9916-4B11-9AC5-1EC0BD8F8CD6}.Debug|x64.ActiveCfg = Debug|Win32 {E1017135-9916-4B11-9AC5-1EC0BD8F8CD6}.Debug|x64.ActiveCfg = Debug|Win32
{E1017135-9916-4B11-9AC5-1EC0BD8F8CD6}.Release|ARM64.ActiveCfg = Release|Win32
{E1017135-9916-4B11-9AC5-1EC0BD8F8CD6}.Release|Win32.ActiveCfg = Release|Win32 {E1017135-9916-4B11-9AC5-1EC0BD8F8CD6}.Release|Win32.ActiveCfg = Release|Win32
{E1017135-9916-4B11-9AC5-1EC0BD8F8CD6}.Release|Win32.Build.0 = Release|Win32 {E1017135-9916-4B11-9AC5-1EC0BD8F8CD6}.Release|Win32.Build.0 = Release|Win32
{E1017135-9916-4B11-9AC5-1EC0BD8F8CD6}.Release|x64.ActiveCfg = Release|Win32 {E1017135-9916-4B11-9AC5-1EC0BD8F8CD6}.Release|x64.ActiveCfg = Release|Win32
{E1017135-9916-4B11-9AC5-1EC0BD8F8CD6}.Setup|ARM64.ActiveCfg = Release|Win32
{E1017135-9916-4B11-9AC5-1EC0BD8F8CD6}.Setup|Win32.ActiveCfg = Release|Win32 {E1017135-9916-4B11-9AC5-1EC0BD8F8CD6}.Setup|Win32.ActiveCfg = Release|Win32
{E1017135-9916-4B11-9AC5-1EC0BD8F8CD6}.Setup|Win32.Build.0 = Release|Win32 {E1017135-9916-4B11-9AC5-1EC0BD8F8CD6}.Setup|Win32.Build.0 = Release|Win32
{E1017135-9916-4B11-9AC5-1EC0BD8F8CD6}.Setup|x64.ActiveCfg = Release|Win32 {E1017135-9916-4B11-9AC5-1EC0BD8F8CD6}.Setup|x64.ActiveCfg = Release|Win32
{E93271C8-0252-4A08-8227-1978C64C2D34}.Debug|ARM64.ActiveCfg = Debug|Win32
{E93271C8-0252-4A08-8227-1978C64C2D34}.Debug|Win32.ActiveCfg = Debug|Win32 {E93271C8-0252-4A08-8227-1978C64C2D34}.Debug|Win32.ActiveCfg = Debug|Win32
{E93271C8-0252-4A08-8227-1978C64C2D34}.Debug|Win32.Build.0 = Debug|Win32 {E93271C8-0252-4A08-8227-1978C64C2D34}.Debug|Win32.Build.0 = Debug|Win32
{E93271C8-0252-4A08-8227-1978C64C2D34}.Debug|x64.ActiveCfg = Debug|Win32 {E93271C8-0252-4A08-8227-1978C64C2D34}.Debug|x64.ActiveCfg = Debug|Win32
{E93271C8-0252-4A08-8227-1978C64C2D34}.Release|ARM64.ActiveCfg = Release|Win32
{E93271C8-0252-4A08-8227-1978C64C2D34}.Release|Win32.ActiveCfg = Release|Win32 {E93271C8-0252-4A08-8227-1978C64C2D34}.Release|Win32.ActiveCfg = Release|Win32
{E93271C8-0252-4A08-8227-1978C64C2D34}.Release|Win32.Build.0 = Release|Win32 {E93271C8-0252-4A08-8227-1978C64C2D34}.Release|Win32.Build.0 = Release|Win32
{E93271C8-0252-4A08-8227-1978C64C2D34}.Release|x64.ActiveCfg = Release|Win32 {E93271C8-0252-4A08-8227-1978C64C2D34}.Release|x64.ActiveCfg = Release|Win32
{E93271C8-0252-4A08-8227-1978C64C2D34}.Setup|ARM64.ActiveCfg = Setup|Win32
{E93271C8-0252-4A08-8227-1978C64C2D34}.Setup|Win32.ActiveCfg = Setup|Win32 {E93271C8-0252-4A08-8227-1978C64C2D34}.Setup|Win32.ActiveCfg = Setup|Win32
{E93271C8-0252-4A08-8227-1978C64C2D34}.Setup|Win32.Build.0 = Setup|Win32 {E93271C8-0252-4A08-8227-1978C64C2D34}.Setup|Win32.Build.0 = Setup|Win32
{E93271C8-0252-4A08-8227-1978C64C2D34}.Setup|x64.ActiveCfg = Setup|Win32 {E93271C8-0252-4A08-8227-1978C64C2D34}.Setup|x64.ActiveCfg = Setup|Win32
{0A60FD06-3A81-4651-A869-9850DBC115EA}.Debug|ARM64.ActiveCfg = Resource|Win32
{0A60FD06-3A81-4651-A869-9850DBC115EA}.Debug|Win32.ActiveCfg = Resource|Win32 {0A60FD06-3A81-4651-A869-9850DBC115EA}.Debug|Win32.ActiveCfg = Resource|Win32
{0A60FD06-3A81-4651-A869-9850DBC115EA}.Debug|Win32.Build.0 = Resource|Win32 {0A60FD06-3A81-4651-A869-9850DBC115EA}.Debug|Win32.Build.0 = Resource|Win32
{0A60FD06-3A81-4651-A869-9850DBC115EA}.Debug|x64.ActiveCfg = Resource|Win32 {0A60FD06-3A81-4651-A869-9850DBC115EA}.Debug|x64.ActiveCfg = Resource|Win32
{0A60FD06-3A81-4651-A869-9850DBC115EA}.Release|ARM64.ActiveCfg = Resource|Win32
{0A60FD06-3A81-4651-A869-9850DBC115EA}.Release|Win32.ActiveCfg = Resource|Win32 {0A60FD06-3A81-4651-A869-9850DBC115EA}.Release|Win32.ActiveCfg = Resource|Win32
{0A60FD06-3A81-4651-A869-9850DBC115EA}.Release|Win32.Build.0 = Resource|Win32 {0A60FD06-3A81-4651-A869-9850DBC115EA}.Release|Win32.Build.0 = Resource|Win32
{0A60FD06-3A81-4651-A869-9850DBC115EA}.Release|x64.ActiveCfg = Resource|Win32 {0A60FD06-3A81-4651-A869-9850DBC115EA}.Release|x64.ActiveCfg = Resource|Win32
{0A60FD06-3A81-4651-A869-9850DBC115EA}.Setup|ARM64.ActiveCfg = Resource|Win32
{0A60FD06-3A81-4651-A869-9850DBC115EA}.Setup|Win32.ActiveCfg = Resource|Win32 {0A60FD06-3A81-4651-A869-9850DBC115EA}.Setup|Win32.ActiveCfg = Resource|Win32
{0A60FD06-3A81-4651-A869-9850DBC115EA}.Setup|Win32.Build.0 = Resource|Win32 {0A60FD06-3A81-4651-A869-9850DBC115EA}.Setup|Win32.Build.0 = Resource|Win32
{0A60FD06-3A81-4651-A869-9850DBC115EA}.Setup|x64.ActiveCfg = Resource|Win32 {0A60FD06-3A81-4651-A869-9850DBC115EA}.Setup|x64.ActiveCfg = Resource|Win32
{D42FE717-485B-492D-884A-1999F6D51154}.Debug|ARM64.ActiveCfg = Debug|ARM64
{D42FE717-485B-492D-884A-1999F6D51154}.Debug|ARM64.Build.0 = Debug|ARM64
{D42FE717-485B-492D-884A-1999F6D51154}.Debug|Win32.ActiveCfg = Debug|Win32 {D42FE717-485B-492D-884A-1999F6D51154}.Debug|Win32.ActiveCfg = Debug|Win32
{D42FE717-485B-492D-884A-1999F6D51154}.Debug|Win32.Build.0 = Debug|Win32 {D42FE717-485B-492D-884A-1999F6D51154}.Debug|Win32.Build.0 = Debug|Win32
{D42FE717-485B-492D-884A-1999F6D51154}.Debug|x64.ActiveCfg = Debug|x64 {D42FE717-485B-492D-884A-1999F6D51154}.Debug|x64.ActiveCfg = Debug|x64
{D42FE717-485B-492D-884A-1999F6D51154}.Debug|x64.Build.0 = Debug|x64 {D42FE717-485B-492D-884A-1999F6D51154}.Debug|x64.Build.0 = Debug|x64
{D42FE717-485B-492D-884A-1999F6D51154}.Release|ARM64.ActiveCfg = Release|ARM64
{D42FE717-485B-492D-884A-1999F6D51154}.Release|ARM64.Build.0 = Release|ARM64
{D42FE717-485B-492D-884A-1999F6D51154}.Release|Win32.ActiveCfg = Release|Win32 {D42FE717-485B-492D-884A-1999F6D51154}.Release|Win32.ActiveCfg = Release|Win32
{D42FE717-485B-492D-884A-1999F6D51154}.Release|Win32.Build.0 = Release|Win32 {D42FE717-485B-492D-884A-1999F6D51154}.Release|Win32.Build.0 = Release|Win32
{D42FE717-485B-492D-884A-1999F6D51154}.Release|x64.ActiveCfg = Release|x64 {D42FE717-485B-492D-884A-1999F6D51154}.Release|x64.ActiveCfg = Release|x64
{D42FE717-485B-492D-884A-1999F6D51154}.Release|x64.Build.0 = Release|x64 {D42FE717-485B-492D-884A-1999F6D51154}.Release|x64.Build.0 = Release|x64
{D42FE717-485B-492D-884A-1999F6D51154}.Setup|ARM64.ActiveCfg = Release|ARM64
{D42FE717-485B-492D-884A-1999F6D51154}.Setup|ARM64.Build.0 = Release|ARM64
{D42FE717-485B-492D-884A-1999F6D51154}.Setup|Win32.ActiveCfg = Release|Win32 {D42FE717-485B-492D-884A-1999F6D51154}.Setup|Win32.ActiveCfg = Release|Win32
{D42FE717-485B-492D-884A-1999F6D51154}.Setup|Win32.Build.0 = Release|Win32 {D42FE717-485B-492D-884A-1999F6D51154}.Setup|Win32.Build.0 = Release|Win32
{D42FE717-485B-492D-884A-1999F6D51154}.Setup|x64.ActiveCfg = Release|x64 {D42FE717-485B-492D-884A-1999F6D51154}.Setup|x64.ActiveCfg = Release|x64
{D42FE717-485B-492D-884A-1999F6D51154}.Setup|x64.Build.0 = Release|x64 {D42FE717-485B-492D-884A-1999F6D51154}.Setup|x64.Build.0 = Release|x64
{65D5C193-E807-4094-AE19-19E6A310A312}.Debug|ARM64.ActiveCfg = Debug|ARM64
{65D5C193-E807-4094-AE19-19E6A310A312}.Debug|ARM64.Build.0 = Debug|ARM64
{65D5C193-E807-4094-AE19-19E6A310A312}.Debug|Win32.ActiveCfg = Debug|Win32 {65D5C193-E807-4094-AE19-19E6A310A312}.Debug|Win32.ActiveCfg = Debug|Win32
{65D5C193-E807-4094-AE19-19E6A310A312}.Debug|Win32.Build.0 = Debug|Win32 {65D5C193-E807-4094-AE19-19E6A310A312}.Debug|Win32.Build.0 = Debug|Win32
{65D5C193-E807-4094-AE19-19E6A310A312}.Debug|x64.ActiveCfg = Debug|x64 {65D5C193-E807-4094-AE19-19E6A310A312}.Debug|x64.ActiveCfg = Debug|x64
{65D5C193-E807-4094-AE19-19E6A310A312}.Debug|x64.Build.0 = Debug|x64 {65D5C193-E807-4094-AE19-19E6A310A312}.Debug|x64.Build.0 = Debug|x64
{65D5C193-E807-4094-AE19-19E6A310A312}.Release|ARM64.ActiveCfg = Release|ARM64
{65D5C193-E807-4094-AE19-19E6A310A312}.Release|ARM64.Build.0 = Release|ARM64
{65D5C193-E807-4094-AE19-19E6A310A312}.Release|Win32.ActiveCfg = Release|Win32 {65D5C193-E807-4094-AE19-19E6A310A312}.Release|Win32.ActiveCfg = Release|Win32
{65D5C193-E807-4094-AE19-19E6A310A312}.Release|Win32.Build.0 = Release|Win32 {65D5C193-E807-4094-AE19-19E6A310A312}.Release|Win32.Build.0 = Release|Win32
{65D5C193-E807-4094-AE19-19E6A310A312}.Release|x64.ActiveCfg = Release|x64 {65D5C193-E807-4094-AE19-19E6A310A312}.Release|x64.ActiveCfg = Release|x64
{65D5C193-E807-4094-AE19-19E6A310A312}.Release|x64.Build.0 = Release|x64 {65D5C193-E807-4094-AE19-19E6A310A312}.Release|x64.Build.0 = Release|x64
{65D5C193-E807-4094-AE19-19E6A310A312}.Setup|ARM64.ActiveCfg = Setup|ARM64
{65D5C193-E807-4094-AE19-19E6A310A312}.Setup|ARM64.Build.0 = Setup|ARM64
{65D5C193-E807-4094-AE19-19E6A310A312}.Setup|Win32.ActiveCfg = Setup|Win32 {65D5C193-E807-4094-AE19-19E6A310A312}.Setup|Win32.ActiveCfg = Setup|Win32
{65D5C193-E807-4094-AE19-19E6A310A312}.Setup|Win32.Build.0 = Setup|Win32 {65D5C193-E807-4094-AE19-19E6A310A312}.Setup|Win32.Build.0 = Setup|Win32
{65D5C193-E807-4094-AE19-19E6A310A312}.Setup|x64.ActiveCfg = Setup|x64 {65D5C193-E807-4094-AE19-19E6A310A312}.Setup|x64.ActiveCfg = Setup|x64
{65D5C193-E807-4094-AE19-19E6A310A312}.Setup|x64.Build.0 = Setup|x64 {65D5C193-E807-4094-AE19-19E6A310A312}.Setup|x64.Build.0 = Setup|x64
{BC0E6E7C-08C1-4F12-A754-4608E5A22FA8}.Debug|ARM64.ActiveCfg = Debug|ARM64
{BC0E6E7C-08C1-4F12-A754-4608E5A22FA8}.Debug|ARM64.Build.0 = Debug|ARM64
{BC0E6E7C-08C1-4F12-A754-4608E5A22FA8}.Debug|Win32.ActiveCfg = Debug|Win32 {BC0E6E7C-08C1-4F12-A754-4608E5A22FA8}.Debug|Win32.ActiveCfg = Debug|Win32
{BC0E6E7C-08C1-4F12-A754-4608E5A22FA8}.Debug|Win32.Build.0 = Debug|Win32 {BC0E6E7C-08C1-4F12-A754-4608E5A22FA8}.Debug|Win32.Build.0 = Debug|Win32
{BC0E6E7C-08C1-4F12-A754-4608E5A22FA8}.Debug|x64.ActiveCfg = Debug|x64 {BC0E6E7C-08C1-4F12-A754-4608E5A22FA8}.Debug|x64.ActiveCfg = Debug|x64
{BC0E6E7C-08C1-4F12-A754-4608E5A22FA8}.Debug|x64.Build.0 = Debug|x64 {BC0E6E7C-08C1-4F12-A754-4608E5A22FA8}.Debug|x64.Build.0 = Debug|x64
{BC0E6E7C-08C1-4F12-A754-4608E5A22FA8}.Release|ARM64.ActiveCfg = Release|ARM64
{BC0E6E7C-08C1-4F12-A754-4608E5A22FA8}.Release|ARM64.Build.0 = Release|ARM64
{BC0E6E7C-08C1-4F12-A754-4608E5A22FA8}.Release|Win32.ActiveCfg = Release|Win32 {BC0E6E7C-08C1-4F12-A754-4608E5A22FA8}.Release|Win32.ActiveCfg = Release|Win32
{BC0E6E7C-08C1-4F12-A754-4608E5A22FA8}.Release|Win32.Build.0 = Release|Win32 {BC0E6E7C-08C1-4F12-A754-4608E5A22FA8}.Release|Win32.Build.0 = Release|Win32
{BC0E6E7C-08C1-4F12-A754-4608E5A22FA8}.Release|x64.ActiveCfg = Release|x64 {BC0E6E7C-08C1-4F12-A754-4608E5A22FA8}.Release|x64.ActiveCfg = Release|x64
{BC0E6E7C-08C1-4F12-A754-4608E5A22FA8}.Release|x64.Build.0 = Release|x64 {BC0E6E7C-08C1-4F12-A754-4608E5A22FA8}.Release|x64.Build.0 = Release|x64
{BC0E6E7C-08C1-4F12-A754-4608E5A22FA8}.Setup|ARM64.ActiveCfg = Setup|ARM64
{BC0E6E7C-08C1-4F12-A754-4608E5A22FA8}.Setup|ARM64.Build.0 = Setup|ARM64
{BC0E6E7C-08C1-4F12-A754-4608E5A22FA8}.Setup|Win32.ActiveCfg = Setup|Win32 {BC0E6E7C-08C1-4F12-A754-4608E5A22FA8}.Setup|Win32.ActiveCfg = Setup|Win32
{BC0E6E7C-08C1-4F12-A754-4608E5A22FA8}.Setup|Win32.Build.0 = Setup|Win32 {BC0E6E7C-08C1-4F12-A754-4608E5A22FA8}.Setup|Win32.Build.0 = Setup|Win32
{BC0E6E7C-08C1-4F12-A754-4608E5A22FA8}.Setup|x64.ActiveCfg = Setup|x64 {BC0E6E7C-08C1-4F12-A754-4608E5A22FA8}.Setup|x64.ActiveCfg = Setup|x64
{BC0E6E7C-08C1-4F12-A754-4608E5A22FA8}.Setup|x64.Build.0 = Setup|x64 {BC0E6E7C-08C1-4F12-A754-4608E5A22FA8}.Setup|x64.Build.0 = Setup|x64
{171B46B0-6083-4D9E-BD33-946EA3BD76FA}.Debug|ARM64.ActiveCfg = Debug|Win32
{171B46B0-6083-4D9E-BD33-946EA3BD76FA}.Debug|Win32.ActiveCfg = Debug|Win32 {171B46B0-6083-4D9E-BD33-946EA3BD76FA}.Debug|Win32.ActiveCfg = Debug|Win32
{171B46B0-6083-4D9E-BD33-946EA3BD76FA}.Debug|Win32.Build.0 = Debug|Win32 {171B46B0-6083-4D9E-BD33-946EA3BD76FA}.Debug|Win32.Build.0 = Debug|Win32
{171B46B0-6083-4D9E-BD33-946EA3BD76FA}.Debug|x64.ActiveCfg = Debug|Win32 {171B46B0-6083-4D9E-BD33-946EA3BD76FA}.Debug|x64.ActiveCfg = Debug|Win32
{171B46B0-6083-4D9E-BD33-946EA3BD76FA}.Release|ARM64.ActiveCfg = Release|Win32
{171B46B0-6083-4D9E-BD33-946EA3BD76FA}.Release|Win32.ActiveCfg = Release|Win32 {171B46B0-6083-4D9E-BD33-946EA3BD76FA}.Release|Win32.ActiveCfg = Release|Win32
{171B46B0-6083-4D9E-BD33-946EA3BD76FA}.Release|Win32.Build.0 = Release|Win32 {171B46B0-6083-4D9E-BD33-946EA3BD76FA}.Release|Win32.Build.0 = Release|Win32
{171B46B0-6083-4D9E-BD33-946EA3BD76FA}.Release|x64.ActiveCfg = Release|Win32 {171B46B0-6083-4D9E-BD33-946EA3BD76FA}.Release|x64.ActiveCfg = Release|Win32
{171B46B0-6083-4D9E-BD33-946EA3BD76FA}.Setup|ARM64.ActiveCfg = Release|Win32
{171B46B0-6083-4D9E-BD33-946EA3BD76FA}.Setup|Win32.ActiveCfg = Release|Win32 {171B46B0-6083-4D9E-BD33-946EA3BD76FA}.Setup|Win32.ActiveCfg = Release|Win32
{171B46B0-6083-4D9E-BD33-946EA3BD76FA}.Setup|Win32.Build.0 = Release|Win32 {171B46B0-6083-4D9E-BD33-946EA3BD76FA}.Setup|Win32.Build.0 = Release|Win32
{171B46B0-6083-4D9E-BD33-946EA3BD76FA}.Setup|x64.ActiveCfg = Release|Win32 {171B46B0-6083-4D9E-BD33-946EA3BD76FA}.Setup|x64.ActiveCfg = Release|Win32
{A2CCDE9F-17CE-461E-8BD9-00261B8855A6}.Debug|ARM64.ActiveCfg = Resource|Win32
{A2CCDE9F-17CE-461E-8BD9-00261B8855A6}.Debug|ARM64.Build.0 = Resource|Win32
{A2CCDE9F-17CE-461E-8BD9-00261B8855A6}.Debug|Win32.ActiveCfg = Resource|Win32 {A2CCDE9F-17CE-461E-8BD9-00261B8855A6}.Debug|Win32.ActiveCfg = Resource|Win32
{A2CCDE9F-17CE-461E-8BD9-00261B8855A6}.Debug|Win32.Build.0 = Resource|Win32 {A2CCDE9F-17CE-461E-8BD9-00261B8855A6}.Debug|Win32.Build.0 = Resource|Win32
{A2CCDE9F-17CE-461E-8BD9-00261B8855A6}.Debug|x64.ActiveCfg = Resource|Win32 {A2CCDE9F-17CE-461E-8BD9-00261B8855A6}.Debug|x64.ActiveCfg = Resource|Win32
{A2CCDE9F-17CE-461E-8BD9-00261B8855A6}.Debug|x64.Build.0 = Resource|Win32 {A2CCDE9F-17CE-461E-8BD9-00261B8855A6}.Debug|x64.Build.0 = Resource|Win32
{A2CCDE9F-17CE-461E-8BD9-00261B8855A6}.Release|ARM64.ActiveCfg = Resource|Win32
{A2CCDE9F-17CE-461E-8BD9-00261B8855A6}.Release|ARM64.Build.0 = Resource|Win32
{A2CCDE9F-17CE-461E-8BD9-00261B8855A6}.Release|Win32.ActiveCfg = Resource|Win32 {A2CCDE9F-17CE-461E-8BD9-00261B8855A6}.Release|Win32.ActiveCfg = Resource|Win32
{A2CCDE9F-17CE-461E-8BD9-00261B8855A6}.Release|Win32.Build.0 = Resource|Win32 {A2CCDE9F-17CE-461E-8BD9-00261B8855A6}.Release|Win32.Build.0 = Resource|Win32
{A2CCDE9F-17CE-461E-8BD9-00261B8855A6}.Release|x64.ActiveCfg = Resource|Win32 {A2CCDE9F-17CE-461E-8BD9-00261B8855A6}.Release|x64.ActiveCfg = Resource|Win32
{A2CCDE9F-17CE-461E-8BD9-00261B8855A6}.Release|x64.Build.0 = Resource|Win32 {A2CCDE9F-17CE-461E-8BD9-00261B8855A6}.Release|x64.Build.0 = Resource|Win32
{A2CCDE9F-17CE-461E-8BD9-00261B8855A6}.Setup|ARM64.ActiveCfg = Resource|Win32
{A2CCDE9F-17CE-461E-8BD9-00261B8855A6}.Setup|Win32.ActiveCfg = Resource|Win32 {A2CCDE9F-17CE-461E-8BD9-00261B8855A6}.Setup|Win32.ActiveCfg = Resource|Win32
{A2CCDE9F-17CE-461E-8BD9-00261B8855A6}.Setup|Win32.Build.0 = Resource|Win32 {A2CCDE9F-17CE-461E-8BD9-00261B8855A6}.Setup|Win32.Build.0 = Resource|Win32
{A2CCDE9F-17CE-461E-8BD9-00261B8855A6}.Setup|x64.ActiveCfg = Resource|Win32 {A2CCDE9F-17CE-461E-8BD9-00261B8855A6}.Setup|x64.ActiveCfg = Resource|Win32
{31C016FB-9EA1-4AF5-987A-37210C04DA06}.Debug|ARM64.ActiveCfg = Resource|Win32
{31C016FB-9EA1-4AF5-987A-37210C04DA06}.Debug|ARM64.Build.0 = Resource|Win32
{31C016FB-9EA1-4AF5-987A-37210C04DA06}.Debug|Win32.ActiveCfg = Resource|Win32 {31C016FB-9EA1-4AF5-987A-37210C04DA06}.Debug|Win32.ActiveCfg = Resource|Win32
{31C016FB-9EA1-4AF5-987A-37210C04DA06}.Debug|Win32.Build.0 = Resource|Win32 {31C016FB-9EA1-4AF5-987A-37210C04DA06}.Debug|Win32.Build.0 = Resource|Win32
{31C016FB-9EA1-4AF5-987A-37210C04DA06}.Debug|x64.ActiveCfg = Resource|Win32 {31C016FB-9EA1-4AF5-987A-37210C04DA06}.Debug|x64.ActiveCfg = Resource|Win32
{31C016FB-9EA1-4AF5-987A-37210C04DA06}.Debug|x64.Build.0 = Resource|Win32 {31C016FB-9EA1-4AF5-987A-37210C04DA06}.Debug|x64.Build.0 = Resource|Win32
{31C016FB-9EA1-4AF5-987A-37210C04DA06}.Release|ARM64.ActiveCfg = Resource|Win32
{31C016FB-9EA1-4AF5-987A-37210C04DA06}.Release|ARM64.Build.0 = Resource|Win32
{31C016FB-9EA1-4AF5-987A-37210C04DA06}.Release|Win32.ActiveCfg = Resource|Win32 {31C016FB-9EA1-4AF5-987A-37210C04DA06}.Release|Win32.ActiveCfg = Resource|Win32
{31C016FB-9EA1-4AF5-987A-37210C04DA06}.Release|Win32.Build.0 = Resource|Win32 {31C016FB-9EA1-4AF5-987A-37210C04DA06}.Release|Win32.Build.0 = Resource|Win32
{31C016FB-9EA1-4AF5-987A-37210C04DA06}.Release|x64.ActiveCfg = Resource|Win32 {31C016FB-9EA1-4AF5-987A-37210C04DA06}.Release|x64.ActiveCfg = Resource|Win32
{31C016FB-9EA1-4AF5-987A-37210C04DA06}.Release|x64.Build.0 = Resource|Win32 {31C016FB-9EA1-4AF5-987A-37210C04DA06}.Release|x64.Build.0 = Resource|Win32
{31C016FB-9EA1-4AF5-987A-37210C04DA06}.Setup|ARM64.ActiveCfg = Resource|Win32
{31C016FB-9EA1-4AF5-987A-37210C04DA06}.Setup|Win32.ActiveCfg = Resource|Win32 {31C016FB-9EA1-4AF5-987A-37210C04DA06}.Setup|Win32.ActiveCfg = Resource|Win32
{31C016FB-9EA1-4AF5-987A-37210C04DA06}.Setup|Win32.Build.0 = Resource|Win32 {31C016FB-9EA1-4AF5-987A-37210C04DA06}.Setup|Win32.Build.0 = Resource|Win32
{31C016FB-9EA1-4AF5-987A-37210C04DA06}.Setup|x64.ActiveCfg = Resource|Win32 {31C016FB-9EA1-4AF5-987A-37210C04DA06}.Setup|x64.ActiveCfg = Resource|Win32
{5C875214-0E3A-4CF0-BC0C-BFF6FAA4C089}.Debug|ARM64.ActiveCfg = Resource|Win32
{5C875214-0E3A-4CF0-BC0C-BFF6FAA4C089}.Debug|ARM64.Build.0 = Resource|Win32
{5C875214-0E3A-4CF0-BC0C-BFF6FAA4C089}.Debug|Win32.ActiveCfg = Resource|Win32 {5C875214-0E3A-4CF0-BC0C-BFF6FAA4C089}.Debug|Win32.ActiveCfg = Resource|Win32
{5C875214-0E3A-4CF0-BC0C-BFF6FAA4C089}.Debug|Win32.Build.0 = Resource|Win32 {5C875214-0E3A-4CF0-BC0C-BFF6FAA4C089}.Debug|Win32.Build.0 = Resource|Win32
{5C875214-0E3A-4CF0-BC0C-BFF6FAA4C089}.Debug|x64.ActiveCfg = Resource|Win32 {5C875214-0E3A-4CF0-BC0C-BFF6FAA4C089}.Debug|x64.ActiveCfg = Resource|Win32
{5C875214-0E3A-4CF0-BC0C-BFF6FAA4C089}.Debug|x64.Build.0 = Resource|Win32 {5C875214-0E3A-4CF0-BC0C-BFF6FAA4C089}.Debug|x64.Build.0 = Resource|Win32
{5C875214-0E3A-4CF0-BC0C-BFF6FAA4C089}.Release|ARM64.ActiveCfg = Resource|Win32
{5C875214-0E3A-4CF0-BC0C-BFF6FAA4C089}.Release|ARM64.Build.0 = Resource|Win32
{5C875214-0E3A-4CF0-BC0C-BFF6FAA4C089}.Release|Win32.ActiveCfg = Resource|Win32 {5C875214-0E3A-4CF0-BC0C-BFF6FAA4C089}.Release|Win32.ActiveCfg = Resource|Win32
{5C875214-0E3A-4CF0-BC0C-BFF6FAA4C089}.Release|Win32.Build.0 = Resource|Win32 {5C875214-0E3A-4CF0-BC0C-BFF6FAA4C089}.Release|Win32.Build.0 = Resource|Win32
{5C875214-0E3A-4CF0-BC0C-BFF6FAA4C089}.Release|x64.ActiveCfg = Resource|Win32 {5C875214-0E3A-4CF0-BC0C-BFF6FAA4C089}.Release|x64.ActiveCfg = Resource|Win32
{5C875214-0E3A-4CF0-BC0C-BFF6FAA4C089}.Release|x64.Build.0 = Resource|Win32 {5C875214-0E3A-4CF0-BC0C-BFF6FAA4C089}.Release|x64.Build.0 = Resource|Win32
{5C875214-0E3A-4CF0-BC0C-BFF6FAA4C089}.Setup|ARM64.ActiveCfg = Resource|Win32
{5C875214-0E3A-4CF0-BC0C-BFF6FAA4C089}.Setup|Win32.ActiveCfg = Resource|Win32 {5C875214-0E3A-4CF0-BC0C-BFF6FAA4C089}.Setup|Win32.ActiveCfg = Resource|Win32
{5C875214-0E3A-4CF0-BC0C-BFF6FAA4C089}.Setup|Win32.Build.0 = Resource|Win32 {5C875214-0E3A-4CF0-BC0C-BFF6FAA4C089}.Setup|Win32.Build.0 = Resource|Win32
{5C875214-0E3A-4CF0-BC0C-BFF6FAA4C089}.Setup|x64.ActiveCfg = Resource|Win32 {5C875214-0E3A-4CF0-BC0C-BFF6FAA4C089}.Setup|x64.ActiveCfg = Resource|Win32
{ED74EBA9-1BCB-4B8F-9AE1-DC63B3C24A94}.Debug|ARM64.ActiveCfg = Resource|Win32
{ED74EBA9-1BCB-4B8F-9AE1-DC63B3C24A94}.Debug|ARM64.Build.0 = Resource|Win32
{ED74EBA9-1BCB-4B8F-9AE1-DC63B3C24A94}.Debug|Win32.ActiveCfg = Resource|Win32 {ED74EBA9-1BCB-4B8F-9AE1-DC63B3C24A94}.Debug|Win32.ActiveCfg = Resource|Win32
{ED74EBA9-1BCB-4B8F-9AE1-DC63B3C24A94}.Debug|Win32.Build.0 = Resource|Win32 {ED74EBA9-1BCB-4B8F-9AE1-DC63B3C24A94}.Debug|Win32.Build.0 = Resource|Win32
{ED74EBA9-1BCB-4B8F-9AE1-DC63B3C24A94}.Debug|x64.ActiveCfg = Resource|Win32 {ED74EBA9-1BCB-4B8F-9AE1-DC63B3C24A94}.Debug|x64.ActiveCfg = Resource|Win32
{ED74EBA9-1BCB-4B8F-9AE1-DC63B3C24A94}.Debug|x64.Build.0 = Resource|Win32 {ED74EBA9-1BCB-4B8F-9AE1-DC63B3C24A94}.Debug|x64.Build.0 = Resource|Win32
{ED74EBA9-1BCB-4B8F-9AE1-DC63B3C24A94}.Release|ARM64.ActiveCfg = Resource|Win32
{ED74EBA9-1BCB-4B8F-9AE1-DC63B3C24A94}.Release|ARM64.Build.0 = Resource|Win32
{ED74EBA9-1BCB-4B8F-9AE1-DC63B3C24A94}.Release|Win32.ActiveCfg = Resource|Win32 {ED74EBA9-1BCB-4B8F-9AE1-DC63B3C24A94}.Release|Win32.ActiveCfg = Resource|Win32
{ED74EBA9-1BCB-4B8F-9AE1-DC63B3C24A94}.Release|Win32.Build.0 = Resource|Win32 {ED74EBA9-1BCB-4B8F-9AE1-DC63B3C24A94}.Release|Win32.Build.0 = Resource|Win32
{ED74EBA9-1BCB-4B8F-9AE1-DC63B3C24A94}.Release|x64.ActiveCfg = Resource|Win32 {ED74EBA9-1BCB-4B8F-9AE1-DC63B3C24A94}.Release|x64.ActiveCfg = Resource|Win32
{ED74EBA9-1BCB-4B8F-9AE1-DC63B3C24A94}.Release|x64.Build.0 = Resource|Win32 {ED74EBA9-1BCB-4B8F-9AE1-DC63B3C24A94}.Release|x64.Build.0 = Resource|Win32
{ED74EBA9-1BCB-4B8F-9AE1-DC63B3C24A94}.Setup|ARM64.ActiveCfg = Resource|Win32
{ED74EBA9-1BCB-4B8F-9AE1-DC63B3C24A94}.Setup|Win32.ActiveCfg = Resource|Win32 {ED74EBA9-1BCB-4B8F-9AE1-DC63B3C24A94}.Setup|Win32.ActiveCfg = Resource|Win32
{ED74EBA9-1BCB-4B8F-9AE1-DC63B3C24A94}.Setup|Win32.Build.0 = Resource|Win32 {ED74EBA9-1BCB-4B8F-9AE1-DC63B3C24A94}.Setup|Win32.Build.0 = Resource|Win32
{ED74EBA9-1BCB-4B8F-9AE1-DC63B3C24A94}.Setup|x64.ActiveCfg = Resource|Win32 {ED74EBA9-1BCB-4B8F-9AE1-DC63B3C24A94}.Setup|x64.ActiveCfg = Resource|Win32
{A42C6159-ACA8-46D1-A0FB-19C398B137D5}.Debug|ARM64.ActiveCfg = Debug|ARM64
{A42C6159-ACA8-46D1-A0FB-19C398B137D5}.Debug|ARM64.Build.0 = Debug|ARM64
{A42C6159-ACA8-46D1-A0FB-19C398B137D5}.Debug|ARM64.Deploy.0 = Debug|ARM64
{A42C6159-ACA8-46D1-A0FB-19C398B137D5}.Debug|Win32.ActiveCfg = Debug|Win32 {A42C6159-ACA8-46D1-A0FB-19C398B137D5}.Debug|Win32.ActiveCfg = Debug|Win32
{A42C6159-ACA8-46D1-A0FB-19C398B137D5}.Debug|Win32.Build.0 = Debug|Win32 {A42C6159-ACA8-46D1-A0FB-19C398B137D5}.Debug|Win32.Build.0 = Debug|Win32
{A42C6159-ACA8-46D1-A0FB-19C398B137D5}.Debug|x64.ActiveCfg = Debug|x64 {A42C6159-ACA8-46D1-A0FB-19C398B137D5}.Debug|x64.ActiveCfg = Debug|x64
{A42C6159-ACA8-46D1-A0FB-19C398B137D5}.Debug|x64.Build.0 = Debug|x64 {A42C6159-ACA8-46D1-A0FB-19C398B137D5}.Debug|x64.Build.0 = Debug|x64
{A42C6159-ACA8-46D1-A0FB-19C398B137D5}.Release|ARM64.ActiveCfg = Release|ARM64
{A42C6159-ACA8-46D1-A0FB-19C398B137D5}.Release|ARM64.Build.0 = Release|ARM64
{A42C6159-ACA8-46D1-A0FB-19C398B137D5}.Release|ARM64.Deploy.0 = Release|ARM64
{A42C6159-ACA8-46D1-A0FB-19C398B137D5}.Release|Win32.ActiveCfg = Release|Win32 {A42C6159-ACA8-46D1-A0FB-19C398B137D5}.Release|Win32.ActiveCfg = Release|Win32
{A42C6159-ACA8-46D1-A0FB-19C398B137D5}.Release|Win32.Build.0 = Release|Win32 {A42C6159-ACA8-46D1-A0FB-19C398B137D5}.Release|Win32.Build.0 = Release|Win32
{A42C6159-ACA8-46D1-A0FB-19C398B137D5}.Release|x64.ActiveCfg = Release|x64 {A42C6159-ACA8-46D1-A0FB-19C398B137D5}.Release|x64.ActiveCfg = Release|x64
{A42C6159-ACA8-46D1-A0FB-19C398B137D5}.Release|x64.Build.0 = Release|x64 {A42C6159-ACA8-46D1-A0FB-19C398B137D5}.Release|x64.Build.0 = Release|x64
{A42C6159-ACA8-46D1-A0FB-19C398B137D5}.Setup|ARM64.ActiveCfg = Setup|ARM64
{A42C6159-ACA8-46D1-A0FB-19C398B137D5}.Setup|ARM64.Build.0 = Setup|ARM64
{A42C6159-ACA8-46D1-A0FB-19C398B137D5}.Setup|Win32.ActiveCfg = Setup|Win32 {A42C6159-ACA8-46D1-A0FB-19C398B137D5}.Setup|Win32.ActiveCfg = Setup|Win32
{A42C6159-ACA8-46D1-A0FB-19C398B137D5}.Setup|Win32.Build.0 = Setup|Win32 {A42C6159-ACA8-46D1-A0FB-19C398B137D5}.Setup|Win32.Build.0 = Setup|Win32
{A42C6159-ACA8-46D1-A0FB-19C398B137D5}.Setup|x64.ActiveCfg = Setup|x64 {A42C6159-ACA8-46D1-A0FB-19C398B137D5}.Setup|x64.ActiveCfg = Setup|x64
{A42C6159-ACA8-46D1-A0FB-19C398B137D5}.Setup|x64.Build.0 = Setup|x64 {A42C6159-ACA8-46D1-A0FB-19C398B137D5}.Setup|x64.Build.0 = Setup|x64
{DAE66C9B-05DC-4ACE-97DA-2547B490BBFF}.Debug|ARM64.ActiveCfg = Debug|ARM64
{DAE66C9B-05DC-4ACE-97DA-2547B490BBFF}.Debug|ARM64.Build.0 = Debug|ARM64
{DAE66C9B-05DC-4ACE-97DA-2547B490BBFF}.Debug|Win32.ActiveCfg = Debug|Win32 {DAE66C9B-05DC-4ACE-97DA-2547B490BBFF}.Debug|Win32.ActiveCfg = Debug|Win32
{DAE66C9B-05DC-4ACE-97DA-2547B490BBFF}.Debug|Win32.Build.0 = Debug|Win32 {DAE66C9B-05DC-4ACE-97DA-2547B490BBFF}.Debug|Win32.Build.0 = Debug|Win32
{DAE66C9B-05DC-4ACE-97DA-2547B490BBFF}.Debug|x64.ActiveCfg = Debug|x64 {DAE66C9B-05DC-4ACE-97DA-2547B490BBFF}.Debug|x64.ActiveCfg = Debug|x64
{DAE66C9B-05DC-4ACE-97DA-2547B490BBFF}.Debug|x64.Build.0 = Debug|x64 {DAE66C9B-05DC-4ACE-97DA-2547B490BBFF}.Debug|x64.Build.0 = Debug|x64
{DAE66C9B-05DC-4ACE-97DA-2547B490BBFF}.Release|ARM64.ActiveCfg = Release|ARM64
{DAE66C9B-05DC-4ACE-97DA-2547B490BBFF}.Release|ARM64.Build.0 = Release|ARM64
{DAE66C9B-05DC-4ACE-97DA-2547B490BBFF}.Release|Win32.ActiveCfg = Release|Win32 {DAE66C9B-05DC-4ACE-97DA-2547B490BBFF}.Release|Win32.ActiveCfg = Release|Win32
{DAE66C9B-05DC-4ACE-97DA-2547B490BBFF}.Release|Win32.Build.0 = Release|Win32 {DAE66C9B-05DC-4ACE-97DA-2547B490BBFF}.Release|Win32.Build.0 = Release|Win32
{DAE66C9B-05DC-4ACE-97DA-2547B490BBFF}.Release|x64.ActiveCfg = Release|x64 {DAE66C9B-05DC-4ACE-97DA-2547B490BBFF}.Release|x64.ActiveCfg = Release|x64
{DAE66C9B-05DC-4ACE-97DA-2547B490BBFF}.Release|x64.Build.0 = Release|x64 {DAE66C9B-05DC-4ACE-97DA-2547B490BBFF}.Release|x64.Build.0 = Release|x64
{DAE66C9B-05DC-4ACE-97DA-2547B490BBFF}.Setup|ARM64.ActiveCfg = Release|ARM64
{DAE66C9B-05DC-4ACE-97DA-2547B490BBFF}.Setup|ARM64.Build.0 = Release|ARM64
{DAE66C9B-05DC-4ACE-97DA-2547B490BBFF}.Setup|Win32.ActiveCfg = Release|Win32 {DAE66C9B-05DC-4ACE-97DA-2547B490BBFF}.Setup|Win32.ActiveCfg = Release|Win32
{DAE66C9B-05DC-4ACE-97DA-2547B490BBFF}.Setup|Win32.Build.0 = Release|Win32 {DAE66C9B-05DC-4ACE-97DA-2547B490BBFF}.Setup|Win32.Build.0 = Release|Win32
{DAE66C9B-05DC-4ACE-97DA-2547B490BBFF}.Setup|x64.ActiveCfg = Release|x64 {DAE66C9B-05DC-4ACE-97DA-2547B490BBFF}.Setup|x64.ActiveCfg = Release|x64
{DAE66C9B-05DC-4ACE-97DA-2547B490BBFF}.Setup|x64.Build.0 = Release|x64 {DAE66C9B-05DC-4ACE-97DA-2547B490BBFF}.Setup|x64.Build.0 = Release|x64
{7BD26CB3-5280-48FD-9A86-C13E321018D5}.Debug|ARM64.ActiveCfg = Resource|Win32
{7BD26CB3-5280-48FD-9A86-C13E321018D5}.Debug|ARM64.Build.0 = Resource|Win32
{7BD26CB3-5280-48FD-9A86-C13E321018D5}.Debug|Win32.ActiveCfg = Resource|Win32 {7BD26CB3-5280-48FD-9A86-C13E321018D5}.Debug|Win32.ActiveCfg = Resource|Win32
{7BD26CB3-5280-48FD-9A86-C13E321018D5}.Debug|Win32.Build.0 = Resource|Win32 {7BD26CB3-5280-48FD-9A86-C13E321018D5}.Debug|Win32.Build.0 = Resource|Win32
{7BD26CB3-5280-48FD-9A86-C13E321018D5}.Debug|x64.ActiveCfg = Resource|Win32 {7BD26CB3-5280-48FD-9A86-C13E321018D5}.Debug|x64.ActiveCfg = Resource|Win32
{7BD26CB3-5280-48FD-9A86-C13E321018D5}.Debug|x64.Build.0 = Resource|Win32 {7BD26CB3-5280-48FD-9A86-C13E321018D5}.Debug|x64.Build.0 = Resource|Win32
{7BD26CB3-5280-48FD-9A86-C13E321018D5}.Release|ARM64.ActiveCfg = Resource|Win32
{7BD26CB3-5280-48FD-9A86-C13E321018D5}.Release|ARM64.Build.0 = Resource|Win32
{7BD26CB3-5280-48FD-9A86-C13E321018D5}.Release|Win32.ActiveCfg = Resource|Win32 {7BD26CB3-5280-48FD-9A86-C13E321018D5}.Release|Win32.ActiveCfg = Resource|Win32
{7BD26CB3-5280-48FD-9A86-C13E321018D5}.Release|Win32.Build.0 = Resource|Win32 {7BD26CB3-5280-48FD-9A86-C13E321018D5}.Release|Win32.Build.0 = Resource|Win32
{7BD26CB3-5280-48FD-9A86-C13E321018D5}.Release|x64.ActiveCfg = Resource|Win32 {7BD26CB3-5280-48FD-9A86-C13E321018D5}.Release|x64.ActiveCfg = Resource|Win32
{7BD26CB3-5280-48FD-9A86-C13E321018D5}.Release|x64.Build.0 = Resource|Win32 {7BD26CB3-5280-48FD-9A86-C13E321018D5}.Release|x64.Build.0 = Resource|Win32
{7BD26CB3-5280-48FD-9A86-C13E321018D5}.Setup|ARM64.ActiveCfg = Resource|Win32
{7BD26CB3-5280-48FD-9A86-C13E321018D5}.Setup|Win32.ActiveCfg = Resource|Win32 {7BD26CB3-5280-48FD-9A86-C13E321018D5}.Setup|Win32.ActiveCfg = Resource|Win32
{7BD26CB3-5280-48FD-9A86-C13E321018D5}.Setup|Win32.Build.0 = Resource|Win32 {7BD26CB3-5280-48FD-9A86-C13E321018D5}.Setup|Win32.Build.0 = Resource|Win32
{7BD26CB3-5280-48FD-9A86-C13E321018D5}.Setup|x64.ActiveCfg = Resource|Win32 {7BD26CB3-5280-48FD-9A86-C13E321018D5}.Setup|x64.ActiveCfg = Resource|Win32
{598AB4AC-008E-4501-90B3-C5213834C1DA}.Debug|ARM64.ActiveCfg = Resource|Win32
{598AB4AC-008E-4501-90B3-C5213834C1DA}.Debug|ARM64.Build.0 = Resource|Win32
{598AB4AC-008E-4501-90B3-C5213834C1DA}.Debug|Win32.ActiveCfg = Resource|Win32 {598AB4AC-008E-4501-90B3-C5213834C1DA}.Debug|Win32.ActiveCfg = Resource|Win32
{598AB4AC-008E-4501-90B3-C5213834C1DA}.Debug|Win32.Build.0 = Resource|Win32 {598AB4AC-008E-4501-90B3-C5213834C1DA}.Debug|Win32.Build.0 = Resource|Win32
{598AB4AC-008E-4501-90B3-C5213834C1DA}.Debug|x64.ActiveCfg = Resource|Win32 {598AB4AC-008E-4501-90B3-C5213834C1DA}.Debug|x64.ActiveCfg = Resource|Win32
{598AB4AC-008E-4501-90B3-C5213834C1DA}.Debug|x64.Build.0 = Resource|Win32 {598AB4AC-008E-4501-90B3-C5213834C1DA}.Debug|x64.Build.0 = Resource|Win32
{598AB4AC-008E-4501-90B3-C5213834C1DA}.Release|ARM64.ActiveCfg = Resource|Win32
{598AB4AC-008E-4501-90B3-C5213834C1DA}.Release|ARM64.Build.0 = Resource|Win32
{598AB4AC-008E-4501-90B3-C5213834C1DA}.Release|Win32.ActiveCfg = Resource|Win32 {598AB4AC-008E-4501-90B3-C5213834C1DA}.Release|Win32.ActiveCfg = Resource|Win32
{598AB4AC-008E-4501-90B3-C5213834C1DA}.Release|Win32.Build.0 = Resource|Win32 {598AB4AC-008E-4501-90B3-C5213834C1DA}.Release|Win32.Build.0 = Resource|Win32
{598AB4AC-008E-4501-90B3-C5213834C1DA}.Release|x64.ActiveCfg = Resource|Win32 {598AB4AC-008E-4501-90B3-C5213834C1DA}.Release|x64.ActiveCfg = Resource|Win32
{598AB4AC-008E-4501-90B3-C5213834C1DA}.Release|x64.Build.0 = Resource|Win32 {598AB4AC-008E-4501-90B3-C5213834C1DA}.Release|x64.Build.0 = Resource|Win32
{598AB4AC-008E-4501-90B3-C5213834C1DA}.Setup|ARM64.ActiveCfg = Resource|Win32
{598AB4AC-008E-4501-90B3-C5213834C1DA}.Setup|Win32.ActiveCfg = Resource|Win32 {598AB4AC-008E-4501-90B3-C5213834C1DA}.Setup|Win32.ActiveCfg = Resource|Win32
{598AB4AC-008E-4501-90B3-C5213834C1DA}.Setup|Win32.Build.0 = Resource|Win32 {598AB4AC-008E-4501-90B3-C5213834C1DA}.Setup|Win32.Build.0 = Resource|Win32
{598AB4AC-008E-4501-90B3-C5213834C1DA}.Setup|x64.ActiveCfg = Resource|Win32 {598AB4AC-008E-4501-90B3-C5213834C1DA}.Setup|x64.ActiveCfg = Resource|Win32
{63BAF573-170B-4FA0-AEE3-16E04F3E9DF5}.Debug|ARM64.ActiveCfg = Resource|Win32
{63BAF573-170B-4FA0-AEE3-16E04F3E9DF5}.Debug|ARM64.Build.0 = Resource|Win32
{63BAF573-170B-4FA0-AEE3-16E04F3E9DF5}.Debug|Win32.ActiveCfg = Resource|Win32 {63BAF573-170B-4FA0-AEE3-16E04F3E9DF5}.Debug|Win32.ActiveCfg = Resource|Win32
{63BAF573-170B-4FA0-AEE3-16E04F3E9DF5}.Debug|Win32.Build.0 = Resource|Win32 {63BAF573-170B-4FA0-AEE3-16E04F3E9DF5}.Debug|Win32.Build.0 = Resource|Win32
{63BAF573-170B-4FA0-AEE3-16E04F3E9DF5}.Debug|x64.ActiveCfg = Resource|Win32 {63BAF573-170B-4FA0-AEE3-16E04F3E9DF5}.Debug|x64.ActiveCfg = Resource|Win32
{63BAF573-170B-4FA0-AEE3-16E04F3E9DF5}.Debug|x64.Build.0 = Resource|Win32 {63BAF573-170B-4FA0-AEE3-16E04F3E9DF5}.Debug|x64.Build.0 = Resource|Win32
{63BAF573-170B-4FA0-AEE3-16E04F3E9DF5}.Release|ARM64.ActiveCfg = Resource|Win32
{63BAF573-170B-4FA0-AEE3-16E04F3E9DF5}.Release|ARM64.Build.0 = Resource|Win32
{63BAF573-170B-4FA0-AEE3-16E04F3E9DF5}.Release|Win32.ActiveCfg = Resource|Win32 {63BAF573-170B-4FA0-AEE3-16E04F3E9DF5}.Release|Win32.ActiveCfg = Resource|Win32
{63BAF573-170B-4FA0-AEE3-16E04F3E9DF5}.Release|Win32.Build.0 = Resource|Win32 {63BAF573-170B-4FA0-AEE3-16E04F3E9DF5}.Release|Win32.Build.0 = Resource|Win32
{63BAF573-170B-4FA0-AEE3-16E04F3E9DF5}.Release|x64.ActiveCfg = Resource|Win32 {63BAF573-170B-4FA0-AEE3-16E04F3E9DF5}.Release|x64.ActiveCfg = Resource|Win32
{63BAF573-170B-4FA0-AEE3-16E04F3E9DF5}.Release|x64.Build.0 = Resource|Win32 {63BAF573-170B-4FA0-AEE3-16E04F3E9DF5}.Release|x64.Build.0 = Resource|Win32
{63BAF573-170B-4FA0-AEE3-16E04F3E9DF5}.Setup|ARM64.ActiveCfg = Resource|Win32
{63BAF573-170B-4FA0-AEE3-16E04F3E9DF5}.Setup|Win32.ActiveCfg = Resource|Win32 {63BAF573-170B-4FA0-AEE3-16E04F3E9DF5}.Setup|Win32.ActiveCfg = Resource|Win32
{63BAF573-170B-4FA0-AEE3-16E04F3E9DF5}.Setup|Win32.Build.0 = Resource|Win32 {63BAF573-170B-4FA0-AEE3-16E04F3E9DF5}.Setup|Win32.Build.0 = Resource|Win32
{63BAF573-170B-4FA0-AEE3-16E04F3E9DF5}.Setup|x64.ActiveCfg = Resource|Win32 {63BAF573-170B-4FA0-AEE3-16E04F3E9DF5}.Setup|x64.ActiveCfg = Resource|Win32
{CA5BFC96-428D-42F5-9F7D-CDDE048A357C}.Debug|ARM64.ActiveCfg = Resource|Win32
{CA5BFC96-428D-42F5-9F7D-CDDE048A357C}.Debug|ARM64.Build.0 = Resource|Win32
{CA5BFC96-428D-42F5-9F7D-CDDE048A357C}.Debug|Win32.ActiveCfg = Resource|Win32 {CA5BFC96-428D-42F5-9F7D-CDDE048A357C}.Debug|Win32.ActiveCfg = Resource|Win32
{CA5BFC96-428D-42F5-9F7D-CDDE048A357C}.Debug|Win32.Build.0 = Resource|Win32 {CA5BFC96-428D-42F5-9F7D-CDDE048A357C}.Debug|Win32.Build.0 = Resource|Win32
{CA5BFC96-428D-42F5-9F7D-CDDE048A357C}.Debug|x64.ActiveCfg = Resource|Win32 {CA5BFC96-428D-42F5-9F7D-CDDE048A357C}.Debug|x64.ActiveCfg = Resource|Win32
{CA5BFC96-428D-42F5-9F7D-CDDE048A357C}.Debug|x64.Build.0 = Resource|Win32 {CA5BFC96-428D-42F5-9F7D-CDDE048A357C}.Debug|x64.Build.0 = Resource|Win32
{CA5BFC96-428D-42F5-9F7D-CDDE048A357C}.Release|ARM64.ActiveCfg = Resource|Win32
{CA5BFC96-428D-42F5-9F7D-CDDE048A357C}.Release|ARM64.Build.0 = Resource|Win32
{CA5BFC96-428D-42F5-9F7D-CDDE048A357C}.Release|Win32.ActiveCfg = Resource|Win32 {CA5BFC96-428D-42F5-9F7D-CDDE048A357C}.Release|Win32.ActiveCfg = Resource|Win32
{CA5BFC96-428D-42F5-9F7D-CDDE048A357C}.Release|Win32.Build.0 = Resource|Win32 {CA5BFC96-428D-42F5-9F7D-CDDE048A357C}.Release|Win32.Build.0 = Resource|Win32
{CA5BFC96-428D-42F5-9F7D-CDDE048A357C}.Release|x64.ActiveCfg = Resource|Win32 {CA5BFC96-428D-42F5-9F7D-CDDE048A357C}.Release|x64.ActiveCfg = Resource|Win32
{CA5BFC96-428D-42F5-9F7D-CDDE048A357C}.Release|x64.Build.0 = Resource|Win32 {CA5BFC96-428D-42F5-9F7D-CDDE048A357C}.Release|x64.Build.0 = Resource|Win32
{CA5BFC96-428D-42F5-9F7D-CDDE048A357C}.Setup|ARM64.ActiveCfg = Resource|Win32
{CA5BFC96-428D-42F5-9F7D-CDDE048A357C}.Setup|Win32.ActiveCfg = Resource|Win32 {CA5BFC96-428D-42F5-9F7D-CDDE048A357C}.Setup|Win32.ActiveCfg = Resource|Win32
{CA5BFC96-428D-42F5-9F7D-CDDE048A357C}.Setup|Win32.Build.0 = Resource|Win32 {CA5BFC96-428D-42F5-9F7D-CDDE048A357C}.Setup|Win32.Build.0 = Resource|Win32
{CA5BFC96-428D-42F5-9F7D-CDDE048A357C}.Setup|x64.ActiveCfg = Resource|Win32 {CA5BFC96-428D-42F5-9F7D-CDDE048A357C}.Setup|x64.ActiveCfg = Resource|Win32
{D94BD2A6-1872-4F01-B911-F406603AA2E1}.Debug|ARM64.ActiveCfg = Debug|Win32
{D94BD2A6-1872-4F01-B911-F406603AA2E1}.Debug|Win32.ActiveCfg = Debug|Win32 {D94BD2A6-1872-4F01-B911-F406603AA2E1}.Debug|Win32.ActiveCfg = Debug|Win32
{D94BD2A6-1872-4F01-B911-F406603AA2E1}.Debug|Win32.Build.0 = Debug|Win32 {D94BD2A6-1872-4F01-B911-F406603AA2E1}.Debug|Win32.Build.0 = Debug|Win32
{D94BD2A6-1872-4F01-B911-F406603AA2E1}.Debug|x64.ActiveCfg = Debug|Win32 {D94BD2A6-1872-4F01-B911-F406603AA2E1}.Debug|x64.ActiveCfg = Debug|Win32
{D94BD2A6-1872-4F01-B911-F406603AA2E1}.Release|ARM64.ActiveCfg = Release|Win32
{D94BD2A6-1872-4F01-B911-F406603AA2E1}.Release|Win32.ActiveCfg = Release|Win32 {D94BD2A6-1872-4F01-B911-F406603AA2E1}.Release|Win32.ActiveCfg = Release|Win32
{D94BD2A6-1872-4F01-B911-F406603AA2E1}.Release|Win32.Build.0 = Release|Win32 {D94BD2A6-1872-4F01-B911-F406603AA2E1}.Release|Win32.Build.0 = Release|Win32
{D94BD2A6-1872-4F01-B911-F406603AA2E1}.Release|x64.ActiveCfg = Release|Win32 {D94BD2A6-1872-4F01-B911-F406603AA2E1}.Release|x64.ActiveCfg = Release|Win32
{D94BD2A6-1872-4F01-B911-F406603AA2E1}.Setup|ARM64.ActiveCfg = Release|Win32
{D94BD2A6-1872-4F01-B911-F406603AA2E1}.Setup|Win32.ActiveCfg = Release|Win32 {D94BD2A6-1872-4F01-B911-F406603AA2E1}.Setup|Win32.ActiveCfg = Release|Win32
{D94BD2A6-1872-4F01-B911-F406603AA2E1}.Setup|Win32.Build.0 = Release|Win32 {D94BD2A6-1872-4F01-B911-F406603AA2E1}.Setup|Win32.Build.0 = Release|Win32
{D94BD2A6-1872-4F01-B911-F406603AA2E1}.Setup|x64.ActiveCfg = Release|Win32 {D94BD2A6-1872-4F01-B911-F406603AA2E1}.Setup|x64.ActiveCfg = Release|Win32
{BD28B058-230E-42DF-9FB1-FFBB0153F498}.Debug|ARM64.ActiveCfg = Resource|Win32
{BD28B058-230E-42DF-9FB1-FFBB0153F498}.Debug|ARM64.Build.0 = Resource|Win32
{BD28B058-230E-42DF-9FB1-FFBB0153F498}.Debug|Win32.ActiveCfg = Resource|Win32 {BD28B058-230E-42DF-9FB1-FFBB0153F498}.Debug|Win32.ActiveCfg = Resource|Win32
{BD28B058-230E-42DF-9FB1-FFBB0153F498}.Debug|Win32.Build.0 = Resource|Win32 {BD28B058-230E-42DF-9FB1-FFBB0153F498}.Debug|Win32.Build.0 = Resource|Win32
{BD28B058-230E-42DF-9FB1-FFBB0153F498}.Debug|x64.ActiveCfg = Resource|Win32 {BD28B058-230E-42DF-9FB1-FFBB0153F498}.Debug|x64.ActiveCfg = Resource|Win32
{BD28B058-230E-42DF-9FB1-FFBB0153F498}.Debug|x64.Build.0 = Resource|Win32 {BD28B058-230E-42DF-9FB1-FFBB0153F498}.Debug|x64.Build.0 = Resource|Win32
{BD28B058-230E-42DF-9FB1-FFBB0153F498}.Release|ARM64.ActiveCfg = Resource|Win32
{BD28B058-230E-42DF-9FB1-FFBB0153F498}.Release|ARM64.Build.0 = Resource|Win32
{BD28B058-230E-42DF-9FB1-FFBB0153F498}.Release|Win32.ActiveCfg = Resource|Win32 {BD28B058-230E-42DF-9FB1-FFBB0153F498}.Release|Win32.ActiveCfg = Resource|Win32
{BD28B058-230E-42DF-9FB1-FFBB0153F498}.Release|Win32.Build.0 = Resource|Win32 {BD28B058-230E-42DF-9FB1-FFBB0153F498}.Release|Win32.Build.0 = Resource|Win32
{BD28B058-230E-42DF-9FB1-FFBB0153F498}.Release|x64.ActiveCfg = Resource|Win32 {BD28B058-230E-42DF-9FB1-FFBB0153F498}.Release|x64.ActiveCfg = Resource|Win32
{BD28B058-230E-42DF-9FB1-FFBB0153F498}.Release|x64.Build.0 = Resource|Win32 {BD28B058-230E-42DF-9FB1-FFBB0153F498}.Release|x64.Build.0 = Resource|Win32
{BD28B058-230E-42DF-9FB1-FFBB0153F498}.Setup|ARM64.ActiveCfg = Resource|Win32
{BD28B058-230E-42DF-9FB1-FFBB0153F498}.Setup|ARM64.Build.0 = Resource|Win32
{BD28B058-230E-42DF-9FB1-FFBB0153F498}.Setup|Win32.ActiveCfg = Resource|Win32 {BD28B058-230E-42DF-9FB1-FFBB0153F498}.Setup|Win32.ActiveCfg = Resource|Win32
{BD28B058-230E-42DF-9FB1-FFBB0153F498}.Setup|Win32.Build.0 = Resource|Win32 {BD28B058-230E-42DF-9FB1-FFBB0153F498}.Setup|Win32.Build.0 = Resource|Win32
{BD28B058-230E-42DF-9FB1-FFBB0153F498}.Setup|x64.ActiveCfg = Resource|Win32 {BD28B058-230E-42DF-9FB1-FFBB0153F498}.Setup|x64.ActiveCfg = Resource|Win32
{BD28B058-230E-42DF-9FB1-FFBB0153F498}.Setup|x64.Build.0 = Resource|Win32 {BD28B058-230E-42DF-9FB1-FFBB0153F498}.Setup|x64.Build.0 = Resource|Win32
{75809D15-8403-420A-BBE6-05F478D88D8E}.Debug|ARM64.ActiveCfg = Resource|Win32
{75809D15-8403-420A-BBE6-05F478D88D8E}.Debug|ARM64.Build.0 = Resource|Win32
{75809D15-8403-420A-BBE6-05F478D88D8E}.Debug|Win32.ActiveCfg = Resource|Win32 {75809D15-8403-420A-BBE6-05F478D88D8E}.Debug|Win32.ActiveCfg = Resource|Win32
{75809D15-8403-420A-BBE6-05F478D88D8E}.Debug|Win32.Build.0 = Resource|Win32 {75809D15-8403-420A-BBE6-05F478D88D8E}.Debug|Win32.Build.0 = Resource|Win32
{75809D15-8403-420A-BBE6-05F478D88D8E}.Debug|x64.ActiveCfg = Resource|Win32 {75809D15-8403-420A-BBE6-05F478D88D8E}.Debug|x64.ActiveCfg = Resource|Win32
{75809D15-8403-420A-BBE6-05F478D88D8E}.Debug|x64.Build.0 = Resource|Win32 {75809D15-8403-420A-BBE6-05F478D88D8E}.Debug|x64.Build.0 = Resource|Win32
{75809D15-8403-420A-BBE6-05F478D88D8E}.Release|ARM64.ActiveCfg = Resource|Win32
{75809D15-8403-420A-BBE6-05F478D88D8E}.Release|ARM64.Build.0 = Resource|Win32
{75809D15-8403-420A-BBE6-05F478D88D8E}.Release|Win32.ActiveCfg = Resource|Win32 {75809D15-8403-420A-BBE6-05F478D88D8E}.Release|Win32.ActiveCfg = Resource|Win32
{75809D15-8403-420A-BBE6-05F478D88D8E}.Release|Win32.Build.0 = Resource|Win32 {75809D15-8403-420A-BBE6-05F478D88D8E}.Release|Win32.Build.0 = Resource|Win32
{75809D15-8403-420A-BBE6-05F478D88D8E}.Release|x64.ActiveCfg = Resource|Win32 {75809D15-8403-420A-BBE6-05F478D88D8E}.Release|x64.ActiveCfg = Resource|Win32
{75809D15-8403-420A-BBE6-05F478D88D8E}.Release|x64.Build.0 = Resource|Win32 {75809D15-8403-420A-BBE6-05F478D88D8E}.Release|x64.Build.0 = Resource|Win32
{75809D15-8403-420A-BBE6-05F478D88D8E}.Setup|ARM64.ActiveCfg = Resource|Win32
{75809D15-8403-420A-BBE6-05F478D88D8E}.Setup|ARM64.Build.0 = Resource|Win32
{75809D15-8403-420A-BBE6-05F478D88D8E}.Setup|Win32.ActiveCfg = Resource|Win32 {75809D15-8403-420A-BBE6-05F478D88D8E}.Setup|Win32.ActiveCfg = Resource|Win32
{75809D15-8403-420A-BBE6-05F478D88D8E}.Setup|Win32.Build.0 = Resource|Win32 {75809D15-8403-420A-BBE6-05F478D88D8E}.Setup|Win32.Build.0 = Resource|Win32
{75809D15-8403-420A-BBE6-05F478D88D8E}.Setup|x64.ActiveCfg = Resource|Win32 {75809D15-8403-420A-BBE6-05F478D88D8E}.Setup|x64.ActiveCfg = Resource|Win32

View File

@@ -1,6 +1,7 @@
if exist Output rd /Q /S Output if exist Output rd /Q /S Output
md Output md Output
md Output\x64 md Output\x64
md Output\ARM64
echo -- Compiling echo -- Compiling
@@ -9,13 +10,18 @@ for /f "usebackq tokens=*" %%i in (`"%ProgramFiles(x86)%\Microsoft Visual Studio
REM Restore NuGet packages REM Restore NuGet packages
"%MSBuildDir%MSBuild.exe" ..\OpenShell.sln /m /t:Restore -p:RestorePackagesConfig=true /verbosity:quiet /nologo "%MSBuildDir%MSBuild.exe" ..\OpenShell.sln /m /t:Restore -p:RestorePackagesConfig=true /verbosity:quiet /nologo
REM ********* Build 64-bit solution REM ********* Build x64 solution
echo --- 64bit echo --- x64
"%MSBuildDir%MSBuild.exe" ..\OpenShell.sln /m /t:Rebuild /p:Configuration="Setup" /p:Platform="x64" /verbosity:quiet /nologo "%MSBuildDir%MSBuild.exe" ..\OpenShell.sln /m /t:Rebuild /p:Configuration="Setup" /p:Platform="x64" /verbosity:quiet /nologo
@if ERRORLEVEL 1 exit /b 1 @if ERRORLEVEL 1 exit /b 1
REM ********* Build ARM64 solution
echo --- ARM64
"%MSBuildDir%MSBuild.exe" ..\OpenShell.sln /m /t:Rebuild /p:Configuration="Setup" /p:Platform="ARM64" /verbosity:quiet /nologo
if ERRORLEVEL 1 exit /b 1
REM ********* Build 32-bit solution (must be after 64-bit) REM ********* Build 32-bit solution (must be after 64-bit)
echo --- 32bit echo --- x86
"%MSBuildDir%MSBuild.exe" ..\OpenShell.sln /m /t:Rebuild /p:Configuration="Setup" /p:Platform="Win32" /verbosity:quiet /nologo "%MSBuildDir%MSBuild.exe" ..\OpenShell.sln /m /t:Rebuild /p:Configuration="Setup" /p:Platform="Win32" /verbosity:quiet /nologo
@if ERRORLEVEL 1 exit /b 1 @if ERRORLEVEL 1 exit /b 1
@@ -45,6 +51,13 @@ copy /B ..\..\build\bin\Release\Update.exe Output > nul
copy /B ..\..\build\bin\Release\DesktopToasts.dll Output > nul copy /B ..\..\build\bin\Release\DesktopToasts.dll Output > nul
copy /B ..\..\build\bin\Release\SetupHelper.exe Output > nul copy /B ..\..\build\bin\Release\SetupHelper.exe Output > nul
copy /B ..\..\build\bin\SetupARM64\ClassicExplorer64.dll Output\ARM64 > nul
copy /B ..\..\build\bin\SetupARM64\ClassicIEDLL_64.dll Output\ARM64 > nul
copy /B ..\..\build\bin\SetupARM64\ClassicIE_64.exe Output\ARM64 > nul
copy /B ..\..\build\bin\SetupARM64\StartMenu.exe Output\ARM64 > nul
copy /B ..\..\build\bin\SetupARM64\StartMenuDLL.dll Output\ARM64 > nul
copy /B ..\..\build\bin\SetupARM64\StartMenuHelper64.dll Output\ARM64 > nul
copy /B ..\..\build\bin\Setup64\ClassicExplorer64.dll Output\x64 > nul copy /B ..\..\build\bin\Setup64\ClassicExplorer64.dll Output\x64 > nul
copy /B ..\..\build\bin\Setup64\ClassicIEDLL_64.dll Output\x64 > nul copy /B ..\..\build\bin\Setup64\ClassicIEDLL_64.dll Output\x64 > nul
copy /B ..\..\build\bin\Setup64\ClassicIE_64.exe Output\x64 > nul copy /B ..\..\build\bin\Setup64\ClassicIE_64.exe Output\x64 > nul
@@ -73,6 +86,7 @@ copy /B "..\..\build\bin\Skins\Immersive.skin7" Output > nul
REM ********* Collect debug info REM ********* Collect debug info
md Output\PDB32 md Output\PDB32
md Output\PDB64 md Output\PDB64
md Output\PDBARM64
REM Explorer 32 REM Explorer 32
copy /B ..\..\build\bin\Setup\ClassicExplorer32.pdb Output\PDB32 > nul copy /B ..\..\build\bin\Setup\ClassicExplorer32.pdb Output\PDB32 > nul
@@ -84,6 +98,10 @@ REM Explorer 64
copy /B ..\..\build\bin\Setup64\ClassicExplorer64.pdb Output\PDB64 > nul copy /B ..\..\build\bin\Setup64\ClassicExplorer64.pdb Output\PDB64 > nul
copy /B Output\x64\ClassicExplorer64.dll Output\PDB64 > nul copy /B Output\x64\ClassicExplorer64.dll Output\PDB64 > nul
REM Explorer ARM64
copy /B ..\..\build\bin\SetupARM64\ClassicExplorer64.pdb Output\PDBARM64 > nul
copy /B Output\ARM64\ClassicExplorer64.dll Output\PDBARM64 > nul
REM IE 32 REM IE 32
copy /B ..\..\build\bin\Setup\ClassicIEDLL_32.pdb Output\PDB32 > nul copy /B ..\..\build\bin\Setup\ClassicIEDLL_32.pdb Output\PDB32 > nul
copy /B Output\ClassicIEDLL_32.dll Output\PDB32 > nul copy /B Output\ClassicIEDLL_32.dll Output\PDB32 > nul
@@ -96,6 +114,12 @@ copy /B Output\x64\ClassicIEDLL_64.dll Output\PDB64 > nul
copy /B ..\..\build\bin\Setup64\ClassicIE_64.pdb Output\PDB64 > nul copy /B ..\..\build\bin\Setup64\ClassicIE_64.pdb Output\PDB64 > nul
copy /B Output\x64\ClassicIE_64.exe Output\PDB64 > nul copy /B Output\x64\ClassicIE_64.exe Output\PDB64 > nul
REM IE ARM64
copy /B ..\..\build\bin\SetupARM64\ClassicIEDLL_64.pdb Output\PDBARM64 > nul
copy /B Output\ARM64\ClassicIEDLL_64.dll Output\PDBARM64 > nul
copy /B ..\..\build\bin\SetupARM64\ClassicIE_64.pdb Output\PDBARM64 > nul
copy /B Output\ARM64\ClassicIE_64.exe Output\PDBARM64 > nul
REM Menu 32 REM Menu 32
copy /B ..\..\build\bin\Setup\StartMenu.pdb Output\PDB32 > nul copy /B ..\..\build\bin\Setup\StartMenu.pdb Output\PDB32 > nul
copy /B Output\StartMenu.exe Output\PDB32 > nul copy /B Output\StartMenu.exe Output\PDB32 > nul
@@ -116,6 +140,13 @@ copy /B Output\x64\StartMenuDLL.dll Output\PDB64 > nul
copy /B ..\..\build\bin\Setup64\StartMenuHelper64.pdb Output\PDB64 > nul copy /B ..\..\build\bin\Setup64\StartMenuHelper64.pdb Output\PDB64 > nul
copy /B Output\x64\StartMenuHelper64.dll Output\PDB64 > nul copy /B Output\x64\StartMenuHelper64.dll Output\PDB64 > nul
REM Menu ARM64
copy /B ..\..\build\bin\SetupARM64\StartMenu.pdb Output\PDBARM64 > nul
copy /B Output\ARM64\StartMenu.exe Output\PDBARM64 > nul
copy /B ..\..\build\bin\SetupARM64\StartMenuDLL.pdb Output\PDBARM64 > nul
copy /B Output\ARM64\StartMenuDLL.dll Output\PDBARM64 > nul
copy /B ..\..\build\bin\SetupARM64\StartMenuHelper64.pdb Output\PDBARM64 > nul
copy /B Output\ARM64\StartMenuHelper64.dll Output\PDBARM64 > nul
REM ********* Source Index PDBs REM ********* Source Index PDBs
@@ -140,6 +171,14 @@ if exist %PDBSTR_PATH% (
exit /b 1 exit /b 1
) )
) )
for %%f in (Output\PDBARM64\*.pdb) do (
%PDBSTR_PATH% -w -p:%%f -s:srcsrv -i:Output\pdbstr.txt
if not ERRORLEVEL 0 (
echo Error adding source index to PDB
exit /b 1
)
)
) )
REM ********* Prepare symbols REM ********* Prepare symbols
@@ -148,11 +187,13 @@ set SYMSTORE_PATH="C:\Program Files (x86)\Windows Kits\10\Debuggers\x64\symstore
%SYMSTORE_PATH% add /r /f Output\PDB32 /s Output\symbols /t OpenShell -:NOREFS > nul %SYMSTORE_PATH% add /r /f Output\PDB32 /s Output\symbols /t OpenShell -:NOREFS > nul
%SYMSTORE_PATH% add /r /f Output\PDB64 /s Output\symbols /t OpenShell -:NOREFS > nul %SYMSTORE_PATH% add /r /f Output\PDB64 /s Output\symbols /t OpenShell -:NOREFS > nul
%SYMSTORE_PATH% add /r /f Output\PDBARM64 /s Output\symbols /t OpenShell -:NOREFS > nul
rd /Q /S Output\symbols\000Admin > nul rd /Q /S Output\symbols\000Admin > nul
del Output\symbols\pingme.txt > nul del Output\symbols\pingme.txt > nul
rd /Q /S Output\PDB32 rd /Q /S Output\PDB32
rd /Q /S Output\PDB64 rd /Q /S Output\PDB64
rd /Q /S Output\PDBARM64
REM ********* Build ADMX REM ********* Build ADMX
echo --- ADMX echo --- ADMX

View File

@@ -36,9 +36,9 @@ md Temp
@set /a "CS_VERSION_NUM=%%A<<24|%%B<<16|%%C" @set /a "CS_VERSION_NUM=%%A<<24|%%B<<16|%%C"
) )
REM ********* Build 32-bit MSI REM ********* Build x86 MSI
echo --- 32bit MSI echo --- x86 MSI
candle Setup.wxs -nologo -out Temp\Setup32.wixobj -ext WixUIExtension -ext WixUtilExtension -dx64=0 -dCS_LANG_FOLDER=%CS_LANG_FOLDER% -dCS_LANG_NAME=%CS_LANG_NAME% candle Setup.wxs -nologo -out Temp\Setup32.wixobj -ext WixUIExtension -ext WixUtilExtension -dx64=0 -dARM64=0 -dCS_LANG_FOLDER=%CS_LANG_FOLDER% -dCS_LANG_NAME=%CS_LANG_NAME%
@if ERRORLEVEL 1 exit /b 1 @if ERRORLEVEL 1 exit /b 1
@REM We need to suppress ICE38 and ICE43 because they apply only to per-user installation. We only support per-machine installs @REM We need to suppress ICE38 and ICE43 because they apply only to per-user installation. We only support per-machine installs
@@ -46,10 +46,9 @@ candle Setup.wxs -nologo -out Temp\Setup32.wixobj -ext WixUIExtension -ext WixUt
light Temp\Setup32.wixobj -nologo -out Temp\Setup32.msi -ext WixUIExtension -ext WixUtilExtension -loc ..\Localization\%CS_LANG_FOLDER%\OpenShellText-%CS_LANG_NAME%.wxl -loc ..\Localization\%CS_LANG_FOLDER%\WixUI_%CS_LANG_NAME%.wxl -sice:ICE38 -sice:ICE43 -sice:ICE09 light Temp\Setup32.wixobj -nologo -out Temp\Setup32.msi -ext WixUIExtension -ext WixUtilExtension -loc ..\Localization\%CS_LANG_FOLDER%\OpenShellText-%CS_LANG_NAME%.wxl -loc ..\Localization\%CS_LANG_FOLDER%\WixUI_%CS_LANG_NAME%.wxl -sice:ICE38 -sice:ICE43 -sice:ICE09
@if ERRORLEVEL 1 exit /b 1 @if ERRORLEVEL 1 exit /b 1
REM ********* Build x64 MSI
REM ********* Build 64-bit MSI echo --- x64 MSI
echo --- 64bit MSI candle Setup.wxs -nologo -out Temp\Setup64.wixobj -ext WixUIExtension -ext WixUtilExtension -dx64=1 -dARM64=0 -dCS_LANG_FOLDER=%CS_LANG_FOLDER% -dCS_LANG_NAME=%CS_LANG_NAME%
candle Setup.wxs -nologo -out Temp\Setup64.wixobj -ext WixUIExtension -ext WixUtilExtension -dx64=1 -dCS_LANG_FOLDER=%CS_LANG_FOLDER% -dCS_LANG_NAME=%CS_LANG_NAME%
@if ERRORLEVEL 1 exit /b 1 @if ERRORLEVEL 1 exit /b 1
@REM We need to suppress ICE38 and ICE43 because they apply only to per-user installation. We only support per-machine installs @REM We need to suppress ICE38 and ICE43 because they apply only to per-user installation. We only support per-machine installs
@@ -57,6 +56,15 @@ candle Setup.wxs -nologo -out Temp\Setup64.wixobj -ext WixUIExtension -ext WixUt
light Temp\Setup64.wixobj -nologo -out Temp\Setup64.msi -ext WixUIExtension -ext WixUtilExtension -loc ..\Localization\%CS_LANG_FOLDER%\OpenShellText-%CS_LANG_NAME%.wxl -loc ..\Localization\%CS_LANG_FOLDER%\WixUI_%CS_LANG_NAME%.wxl -sice:ICE38 -sice:ICE43 -sice:ICE09 light Temp\Setup64.wixobj -nologo -out Temp\Setup64.msi -ext WixUIExtension -ext WixUtilExtension -loc ..\Localization\%CS_LANG_FOLDER%\OpenShellText-%CS_LANG_NAME%.wxl -loc ..\Localization\%CS_LANG_FOLDER%\WixUI_%CS_LANG_NAME%.wxl -sice:ICE38 -sice:ICE43 -sice:ICE09
@if ERRORLEVEL 1 exit /b 1 @if ERRORLEVEL 1 exit /b 1
REM ********* Build ARM64 MSI
echo --- ARM64 MSI
candle Setup.wxs -nologo -out Temp\SetupARM64.wixobj -ext WixUIExtension -ext WixUtilExtension -dx64=0 -dARM64=1 -dCS_LANG_FOLDER=%CS_LANG_FOLDER% -dCS_LANG_NAME=%CS_LANG_NAME%
@if ERRORLEVEL 1 exit /b 1
@REM We need to suppress ICE38 and ICE43 because they apply only to per-user installation. We only support per-machine installs
@REM We need to suppress ICE09 because the helper DLLs need to go into the system directory (for safety reasons)
light Temp\SetupARM64.wixobj -nologo -out Temp\SetupARM64.msi -ext WixUIExtension -ext WixUtilExtension -loc ..\Localization\%CS_LANG_FOLDER%\OpenShellText-%CS_LANG_NAME%.wxl -loc ..\Localization\%CS_LANG_FOLDER%\WixUI_%CS_LANG_NAME%.wxl -sice:ICE38 -sice:ICE43 -sice:ICE09
@if ERRORLEVEL 1 exit /b 1
REM ********* Build MSI Checksums REM ********* Build MSI Checksums
echo --- MSI Checksums echo --- MSI Checksums

View File

@@ -12,10 +12,13 @@
#include "StringUtils.h" #include "StringUtils.h"
#include "FNVHash.h" #include "FNVHash.h"
// Setup.exe is a bootstrap application that contains installers for 32-bit and 64-bit. // Setup.exe is a bootstrap application that contains installers for x86, x64 and ARM64.
// It unpacks the right installer into the temp directory and executes it. // It unpacks the right installer into the temp directory and executes it.
typedef BOOL (WINAPI *FIsWow64Process)( HANDLE hProcess, PBOOL Wow64Process ); typedef BOOL (WINAPI *FIsWow64Process)( HANDLE hProcess, PBOOL Wow64Process );
typedef BOOL (WINAPI *FIsWow64Process2)( HANDLE hProcess, USHORT *pProcessMachine, USHORT *pNativeMachine );
typedef BOOL (WINAPI *FWow64DisableWow64FsRedirection)( PVOID* OldValue );
typedef BOOL (WINAPI *FWow64RevertWow64FsRedirection)( PVOID OldValue );
@@ -31,6 +34,14 @@ enum
ERR_MSIEXEC, // msiexec failed to start ERR_MSIEXEC, // msiexec failed to start
}; };
enum ExtractType
{
None,
x86,
x64,
ARM64
};
struct Chunk struct Chunk
{ {
int start1, start2, len; int start1, start2, len;
@@ -49,7 +60,7 @@ static void WriteFileXOR( HANDLE hFile, const unsigned char *buf, int size )
} }
} }
static int ExtractMsi( HINSTANCE hInstance, const wchar_t *msiName, bool b64, bool bQuiet ) static int ExtractMsi( HINSTANCE hInstance, const wchar_t *msiName, ExtractType extractType, bool bQuiet )
{ {
void *pRes=NULL; void *pRes=NULL;
HRSRC hResInfo=FindResource(hInstance,MAKEINTRESOURCE(IDR_MSI_CHECKSUM),L"MSI_FILE"); HRSRC hResInfo=FindResource(hInstance,MAKEINTRESOURCE(IDR_MSI_CHECKSUM),L"MSI_FILE");
@@ -70,13 +81,21 @@ static int ExtractMsi( HINSTANCE hInstance, const wchar_t *msiName, bool b64, bo
} }
return ERR_HASH_NOTFOUND; return ERR_HASH_NOTFOUND;
} }
unsigned int hash0=((unsigned int*)pRes)[b64?1:0]; unsigned int hash0=((unsigned int*)pRes)[extractType-1];
const Chunk *pChunks=NULL; const Chunk *pChunks=NULL;
int chunkCount=0; int chunkCount=0;
if (b64) if (extractType==x64)
{ {
chunkCount=((unsigned int*)pRes)[2]; chunkCount=((unsigned int*)pRes)[3];
pChunks=(Chunk*)((unsigned int*)pRes+3); pChunks=(Chunk*)((unsigned int*)pRes+4);
}
if (extractType==ARM64)
{
int x64chunkCount=((unsigned int*)pRes)[3];
const Chunk *px64Chunks=(Chunk*)((unsigned int*)pRes+4);
chunkCount=((unsigned int*)(px64Chunks+x64chunkCount))[0];
pChunks = (Chunk*)((unsigned int*)(px64Chunks+x64chunkCount)+1);
} }
// extract the installer // extract the installer
@@ -99,11 +118,11 @@ static int ExtractMsi( HINSTANCE hInstance, const wchar_t *msiName, bool b64, bo
} }
return ERR_MSIRES_NOTFOUND; return ERR_MSIRES_NOTFOUND;
} }
const unsigned char *pRes64=NULL; const unsigned char *pRes64=NULL, *pResArm64=NULL;
int size32=SizeofResource(hInstance,hResInfo); int size32=SizeofResource(hInstance,hResInfo);
unsigned int hash; unsigned int hash;
int size64=0; int size64=0, sizeArm64=0;
if (b64) if (extractType==x64)
{ {
HRSRC hResInfo=FindResource(hInstance,MAKEINTRESOURCE(IDR_MSI_FILE64),L"MSI_FILE"); HRSRC hResInfo=FindResource(hInstance,MAKEINTRESOURCE(IDR_MSI_FILE64),L"MSI_FILE");
if (hResInfo) if (hResInfo)
@@ -140,6 +159,43 @@ static int ExtractMsi( HINSTANCE hInstance, const wchar_t *msiName, bool b64, bo
if (pos<size64) if (pos<size64)
hash=CalcFNVHash(pRes64+pos,size64-pos,hash); hash=CalcFNVHash(pRes64+pos,size64-pos,hash);
} }
else if (extractType==ARM64)
{
HRSRC hResInfo=FindResource(hInstance,MAKEINTRESOURCE(IDR_MSI_FILEARM64),L"MSI_FILE");
if (hResInfo)
{
HGLOBAL hRes=LoadResource(hInstance,hResInfo);
pResArm64=(unsigned char*)LockResource(hRes);
}
if (!pResArm64)
{
if (!bQuiet)
{
wchar_t strTitle[256];
if (!LoadString(hInstance,IDS_APP_TITLE,strTitle,_countof(strTitle))) strTitle[0]=0;
wchar_t strText[256];
if (!LoadString(hInstance,IDS_ERR_INTERNAL,strText,_countof(strText))) strText[0]=0;
MessageBox(NULL,strText,strTitle,MB_OK|MB_ICONERROR);
}
return ERR_MSIRES_NOTFOUND;
}
sizeArm64=SizeofResource(hInstance,hResInfo);
hash=FNV_HASH0;
int start=0;
int pos=0;
for (int i=0;i<chunkCount;i++)
{
const Chunk& chunk = pChunks[i];
if (start<chunk.start2)
hash=CalcFNVHash(pResArm64+pos,chunk.start2-start,hash);
hash=CalcFNVHash(pRes32+chunk.start1,chunk.len,hash);
pos+=chunk.start2-start;
start=chunk.start2+chunk.len;
}
if (pos<sizeArm64)
hash=CalcFNVHash(pResArm64+pos,sizeArm64-pos,hash);
}
else else
hash=CalcFNVHash(pRes32,size32); hash=CalcFNVHash(pRes32,size32);
if (hash!=hash0) if (hash!=hash0)
@@ -173,7 +229,7 @@ static int ExtractMsi( HINSTANCE hInstance, const wchar_t *msiName, bool b64, bo
} }
return ERR_MSI_EXTRACTFAIL; return ERR_MSI_EXTRACTFAIL;
} }
if (b64) if (extractType==x64)
{ {
int start=0; int start=0;
int pos=0; int pos=0;
@@ -189,6 +245,22 @@ static int ExtractMsi( HINSTANCE hInstance, const wchar_t *msiName, bool b64, bo
if (pos<size64) if (pos<size64)
WriteFileXOR(hFile,pRes64+pos,size64-pos); WriteFileXOR(hFile,pRes64+pos,size64-pos);
} }
else if (extractType==ARM64)
{
int start=0;
int pos=0;
for (int i=0;i<chunkCount;i++)
{
const Chunk &chunk=pChunks[i];
if (start<chunk.start2)
WriteFileXOR(hFile,pResArm64+pos,chunk.start2-start);
WriteFileXOR(hFile,pRes32+chunk.start1,chunk.len);
pos+=chunk.start2-start;
start=chunk.start2+chunk.len;
}
if (pos<sizeArm64)
WriteFileXOR(hFile,pResArm64+pos,sizeArm64-pos);
}
else else
{ {
WriteFileXOR(hFile,pRes32,size32); WriteFileXOR(hFile,pRes32,size32);
@@ -218,7 +290,7 @@ int APIENTRY wWinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCm
wchar_t *const *params=CommandLineToArgvW(lpCmdLine,&count); wchar_t *const *params=CommandLineToArgvW(lpCmdLine,&count);
if (!params) count=0; if (!params) count=0;
int extract=0; ExtractType extractType=None;
bool bQuiet=false; bool bQuiet=false;
for (;count>0;count--,params++) for (;count>0;count--,params++)
{ {
@@ -233,9 +305,11 @@ int APIENTRY wWinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCm
return 0; return 0;
} }
if (_wcsicmp(params[0],L"extract32")==0) if (_wcsicmp(params[0],L"extract32")==0)
extract=32; extractType=x86;
if (_wcsicmp(params[0],L"extract64")==0) if (_wcsicmp(params[0],L"extract64")==0)
extract=64; extractType=x64;
if (_wcsicmp(params[0],L"extractARM64")==0)
extractType=ARM64;
if (_wcsicmp(params[0],L"/qn")==0 || _wcsicmp(params[0],L"/q")==0 || _wcsicmp(params[0],L"/quiet")==0 || _wcsicmp(params[0],L"/passive")==0) if (_wcsicmp(params[0],L"/qn")==0 || _wcsicmp(params[0],L"/q")==0 || _wcsicmp(params[0],L"/quiet")==0 || _wcsicmp(params[0],L"/passive")==0)
{ {
bQuiet=true; bQuiet=true;
@@ -255,11 +329,11 @@ int APIENTRY wWinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCm
return ERR_VERRES_NOTFOUND; return ERR_VERRES_NOTFOUND;
} }
if (extract) if (extractType != None)
{ {
wchar_t msiName[_MAX_PATH]; wchar_t msiName[_MAX_PATH];
Sprintf(msiName,_countof(msiName),L"OpenShellSetup%d_%d_%d_%d.msi",extract,HIWORD(pVer->dwProductVersionMS),LOWORD(pVer->dwProductVersionMS),HIWORD(pVer->dwProductVersionLS)); Sprintf(msiName,_countof(msiName),L"OpenShellSetup%s_%d_%d_%d.msi",(extractType==x86?L"32":(extractType==x64?L"64":L"ARM64")),HIWORD(pVer->dwProductVersionMS),LOWORD(pVer->dwProductVersionMS),HIWORD(pVer->dwProductVersionLS));
return ExtractMsi(hInstance,msiName,extract==64,bQuiet); return ExtractMsi(hInstance,msiName,extractType,bQuiet);
} }
// check Windows version // check Windows version
@@ -282,7 +356,9 @@ int APIENTRY wWinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCm
// dynamically link to IsWow64Process because it is not available for Windows 2000 // dynamically link to IsWow64Process because it is not available for Windows 2000
HMODULE hKernel32=GetModuleHandle(L"kernel32.dll"); HMODULE hKernel32=GetModuleHandle(L"kernel32.dll");
FIsWow64Process isWow64Process=(FIsWow64Process)GetProcAddress(hKernel32,"IsWow64Process"); FIsWow64Process isWow64Process=(FIsWow64Process)GetProcAddress(hKernel32,"IsWow64Process");
if (!isWow64Process) FWow64DisableWow64FsRedirection wow64DisableWow64FsRedirection=(FWow64DisableWow64FsRedirection)GetProcAddress(hKernel32,"Wow64DisableWow64FsRedirection");
FWow64RevertWow64FsRedirection wow64RevertWow64FsRedirection=(FWow64RevertWow64FsRedirection)GetProcAddress(hKernel32,"Wow64RevertWow64FsRedirection");
if (!isWow64Process || !wow64DisableWow64FsRedirection || !wow64RevertWow64FsRedirection)
{ {
if (!bQuiet) if (!bQuiet)
{ {
@@ -295,13 +371,25 @@ int APIENTRY wWinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCm
return ERR_WRONG_OS; return ERR_WRONG_OS;
} }
BOOL b64=FALSE; // Use IsWow64Process2 if it's available (Windows 10 1511+), otherwise fall back to IsWow64Process
isWow64Process(GetCurrentProcess(),&b64); FIsWow64Process2 isWow64Process2=(FIsWow64Process2)GetProcAddress(hKernel32,"IsWow64Process2");
if (isWow64Process2)
{
USHORT processMachine = 0, nativeMachine = 0;
isWow64Process2(GetCurrentProcess(), &processMachine, &nativeMachine);
extractType=nativeMachine==IMAGE_FILE_MACHINE_AMD64?x64:nativeMachine==IMAGE_FILE_MACHINE_ARM64?ARM64:x86;
}
else
{
BOOL x64=FALSE;
isWow64Process(GetCurrentProcess(),&x64);
extractType=x64?ExtractType::x64:x86;
}
wchar_t msiName[_MAX_PATH]; wchar_t msiName[_MAX_PATH];
Sprintf(msiName,_countof(msiName),L"%%ALLUSERSPROFILE%%\\OpenShellSetup%d_%d_%d_%d.msi",b64?64:32,HIWORD(pVer->dwProductVersionMS),LOWORD(pVer->dwProductVersionMS),HIWORD(pVer->dwProductVersionLS)); Sprintf(msiName,_countof(msiName),L"%%ALLUSERSPROFILE%%\\OpenShellSetup%s_%d_%d_%d.msi",(extractType==x86?L"32":(extractType==x64?L"64":L"ARM64")),HIWORD(pVer->dwProductVersionMS),LOWORD(pVer->dwProductVersionMS),HIWORD(pVer->dwProductVersionLS));
DoEnvironmentSubst(msiName,_countof(msiName)); DoEnvironmentSubst(msiName,_countof(msiName));
int ex=ExtractMsi(hInstance,msiName,b64!=FALSE,bQuiet); int ex=ExtractMsi(hInstance,msiName,extractType,bQuiet);
if (ex) return ex; if (ex) return ex;
wchar_t cmdLine[2048]; wchar_t cmdLine[2048];
@@ -316,11 +404,19 @@ int APIENTRY wWinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCm
Sprintf(cmdLine,_countof(cmdLine),L"msiexec.exe /i \"%s\" %s",msiName,lpCmdLine); Sprintf(cmdLine,_countof(cmdLine),L"msiexec.exe /i \"%s\" %s",msiName,lpCmdLine);
} }
// On ARM64 we must launch msiexec.exe from system32 and not syswow64 as would otherwise happen
PVOID wow64FsRedirVal=NULL;
if (extractType == ARM64)
Wow64DisableWow64FsRedirection(&wow64FsRedirVal);
// start the installer // start the installer
STARTUPINFO startupInfo={sizeof(startupInfo)}; STARTUPINFO startupInfo={sizeof(startupInfo)};
PROCESS_INFORMATION processInfo; PROCESS_INFORMATION processInfo;
memset(&processInfo,0,sizeof(processInfo)); memset(&processInfo,0,sizeof(processInfo));
if (!CreateProcess(NULL,cmdLine,NULL,NULL,TRUE,0,NULL,NULL,&startupInfo,&processInfo)) BOOL ret=CreateProcess(NULL,cmdLine,NULL,NULL,TRUE,0,NULL,NULL,&startupInfo,&processInfo);
if (extractType == ARM64)
Wow64RevertWow64FsRedirection(wow64FsRedirVal);
if (!ret)
{ {
DeleteFile(msiName); DeleteFile(msiName);
if (!bQuiet) if (!bQuiet)

View File

@@ -102,6 +102,7 @@ END
IDR_MSI_FILE32 MSI_FILE "Temp\\Setup32.msi_" IDR_MSI_FILE32 MSI_FILE "Temp\\Setup32.msi_"
IDR_MSI_FILE64 MSI_FILE "Temp\\Setup64.msi_" IDR_MSI_FILE64 MSI_FILE "Temp\\Setup64.msi_"
IDR_MSI_FILEARM64 MSI_FILE "Temp\\SetupARM64.msi_"
IDR_MSI_CHECKSUM MSI_FILE "msichecksum.bin" IDR_MSI_CHECKSUM MSI_FILE "msichecksum.bin"
@@ -126,7 +127,7 @@ END
STRINGTABLE STRINGTABLE
BEGIN BEGIN
IDS_HELP "Open-Shell Setup will install Open-Shell on your computer. Possible command lines:\n <no command line> - runs the installer normally\n extract32 - extracts the 32-bit MSI\n extract64 - extracts the 64-bit MSI\n help, /? - shows the command line help\n <some msiexec options> - the options are passed to msiexec\n * if the options contain %MSI% (all caps) the token is replaced by the name of the extracted MSI file\n * if %MSI% is not found, the setup runs ""msiexec /i <MSI file> <some msiexec options>""\n * run msiexec with no parameters to see the full list of msiexec options\n\nExamples:\n /qn - runs the installer in quiet mode\n /x %MSI% /qb - uninstalls the product in basic UI level\n /f %MSI% - repairs the product\n /l* log.txt - runs the installer and logs the process in the log.txt file\n /qn ADDLOCAL=ClassicExplorer - installs only Classic Explorer in quiet mode\n /qn ADDLOCAL=StartMenu APPLICATIONFOLDER=C:\\OpenShell - installs only Open-Shell Start Menu in quiet mode in the folder C:\\OpenShell\n ADDLOCAL=StartMenu,ClassicIE - runs the installer in full UI mode with Open-Shell Start Menu and Classic IE checked by default" IDS_HELP "Open-Shell Setup will install Open-Shell on your computer. Possible command lines:\n <no command line> - runs the installer normally\n extract32 - extracts the 32-bit MSI\n extract64 - extracts the 64-bit MSI\n extractARM64 - extracts the ARM64 MSI\n help, /? - shows the command line help\n <some msiexec options> - the options are passed to msiexec\n * if the options contain %MSI% (all caps) the token is replaced by the name of the extracted MSI file\n * if %MSI% is not found, the setup runs ""msiexec /i <MSI file> <some msiexec options>""\n * run msiexec with no parameters to see the full list of msiexec options\n\nExamples:\n /qn - runs the installer in quiet mode\n /x %MSI% /qb - uninstalls the product in basic UI level\n /f %MSI% - repairs the product\n /l* log.txt - runs the installer and logs the process in the log.txt file\n /qn ADDLOCAL=ClassicExplorer - installs only Classic Explorer in quiet mode\n /qn ADDLOCAL=StartMenu APPLICATIONFOLDER=C:\\OpenShell - installs only Open-Shell Start Menu in quiet mode in the folder C:\\OpenShell\n ADDLOCAL=StartMenu,ClassicIE - runs the installer in full UI mode with Open-Shell Start Menu and Classic IE checked by default"
END END
#endif // English (U.S.) resources #endif // English (U.S.) resources

View File

@@ -64,6 +64,7 @@
<None Include="msichecksum.bin" /> <None Include="msichecksum.bin" />
<None Include="Temp\Setup32.msi_" /> <None Include="Temp\Setup32.msi_" />
<None Include="Temp\Setup64.msi_" /> <None Include="Temp\Setup64.msi_" />
<None Include="Temp\SetupARM64.msi_" />
<None Include="__MakeFinal.bat" /> <None Include="__MakeFinal.bat" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>

View File

@@ -61,5 +61,6 @@
<None Include="Temp\Setup32.msi_" /> <None Include="Temp\Setup32.msi_" />
<None Include="Temp\Setup64.msi_" /> <None Include="Temp\Setup64.msi_" />
<None Include="msichecksum.bin" /> <None Include="msichecksum.bin" />
<None Include="Temp\SetupARM64.msi_" />
</ItemGroup> </ItemGroup>
</Project> </Project>

View File

@@ -3,7 +3,7 @@
# This comment is generated by WixEdit, the specific commandline # This comment is generated by WixEdit, the specific commandline
# arguments for the WiX Toolset are stored here. # arguments for the WiX Toolset are stored here.
candleArgs: "<projectfile>" -out "<projectname>.wixobj" -ext WixUIExtension -ext WixUtilExtension -dx64=0 candleArgs: "<projectfile>" -out "<projectname>.wixobj" -ext WixUIExtension -ext WixUtilExtension -dx64=0 -dARM64=0
lightArgs: "<projectname>.wixobj" -out "<projectname>.msi" -ext WixUIExtension -ext WixUtilExtension -loc OpenShellText-en-US.wxl lightArgs: "<projectname>.wixobj" -out "<projectname>.msi" -ext WixUIExtension -ext WixUtilExtension -loc OpenShellText-en-US.wxl
--> -->
<?if $(var.x64)=1 ?> <?if $(var.x64)=1 ?>
@@ -11,6 +11,11 @@
<?define CS_PLATFORM = "x64"?> <?define CS_PLATFORM = "x64"?>
<?define CS_PROGRAM_FILES = "ProgramFiles64Folder"?> <?define CS_PROGRAM_FILES = "ProgramFiles64Folder"?>
<?define CS_WIN64 = "yes"?> <?define CS_WIN64 = "yes"?>
<?elseif $(var.ARM64)=1 ?>
<?define CS_UPGRADE = "BECF7DE9-53D0-41E7-92DC-0EF4ACCCD867"?>
<?define CS_PLATFORM = "arm64"?>
<?define CS_PROGRAM_FILES = "ProgramFiles64Folder"?>
<?define CS_WIN64 = "yes"?>
<?else ?> <?else ?>
<?define CS_UPGRADE = "EB7DA1D9-44EA-43BF-8A08-0B103007D4F2"?> <?define CS_UPGRADE = "EB7DA1D9-44EA-43BF-8A08-0B103007D4F2"?>
<?define CS_PLATFORM = "x86"?> <?define CS_PLATFORM = "x86"?>
@@ -22,9 +27,13 @@
<Package Description="Open-Shell" Comments="Start Menu Replacement" InstallerVersion="500" Compressed="yes" Platform="$(var.CS_PLATFORM)" /> <Package Description="Open-Shell" Comments="Start Menu Replacement" InstallerVersion="500" Compressed="yes" Platform="$(var.CS_PLATFORM)" />
<Media Id="1" Cabinet="cshell.cab" EmbedCab="yes" CompressionLevel="high" /> <Media Id="1" Cabinet="cshell.cab" EmbedCab="yes" CompressionLevel="high" />
<Media Id="2" Cabinet="simple.cab" EmbedCab="yes" CompressionLevel="high" /> <Media Id="2" Cabinet="simple.cab" EmbedCab="yes" CompressionLevel="high" />
<?if $(var.x64)=0 ?> <PropertyRef Id="WIX_NATIVE_MACHINE" />
<?if $(var.x64)=0 And $(var.ARM64)=0 ?>
<Condition Message="!(loc.Error32bit)">not Msix64</Condition> <Condition Message="!(loc.Error32bit)">not Msix64</Condition>
<?endif ?> <?endif ?>
<?if $(var.x64)=1 ?>
<Condition Message="!(loc.Error64bit)">NOT (WIX_NATIVE_MACHINE AND WIX_NATIVE_MACHINE="43620")</Condition>
<?endif ?>
<Condition Message="!(loc.ErrorWin7)">VersionNT&gt;=601</Condition> <Condition Message="!(loc.ErrorWin7)">VersionNT&gt;=601</Condition>
<Condition Message="!(loc.ErrorNewVersion)">NOT NEWERPRODUCTFOUND OR Installed</Condition> <Condition Message="!(loc.ErrorNewVersion)">NOT NEWERPRODUCTFOUND OR Installed</Condition>
<Directory Id="TARGETDIR" Name="SourceDir"> <Directory Id="TARGETDIR" Name="SourceDir">
@@ -59,7 +68,7 @@
<?endif ?> <?endif ?>
<Feature Id="ClassicExplorer" Level="1" Title="!(loc.ExplorerTitle)" ConfigurableDirectory="APPLICATIONFOLDER" AllowAdvertise="no" Description="!(loc.ExplorerDesc)"> <Feature Id="ClassicExplorer" Level="1" Title="!(loc.ExplorerTitle)" ConfigurableDirectory="APPLICATIONFOLDER" AllowAdvertise="no" Description="!(loc.ExplorerDesc)">
<ComponentRef Id="ClassicExplorer32.dll" /> <ComponentRef Id="ClassicExplorer32.dll" />
<?if $(var.x64)=1 ?> <?if $(var.x64)=1 Or $(var.ARM64)=1 ?>
<ComponentRef Id="ClassicExplorer64.dll" /> <ComponentRef Id="ClassicExplorer64.dll" />
<?endif ?> <?endif ?>
<ComponentRef Id="ExplorerL10N.ini" /> <ComponentRef Id="ExplorerL10N.ini" />
@@ -71,7 +80,7 @@
<ComponentRef Id="StartMenuDLL.dll" /> <ComponentRef Id="StartMenuDLL.dll" />
<ComponentRef Id="StartMenuL10N.ini" /> <ComponentRef Id="StartMenuL10N.ini" />
<ComponentRef Id="StartMenuHelper32.dll" /> <ComponentRef Id="StartMenuHelper32.dll" />
<?if $(var.x64)=1 ?> <?if $(var.x64)=1 Or $(var.ARM64)=1 ?>
<ComponentRef Id="StartMenuHelper64.dll" /> <ComponentRef Id="StartMenuHelper64.dll" />
<?endif ?> <?endif ?>
<ComponentRef Id="StartScreenLink" /> <ComponentRef Id="StartScreenLink" />
@@ -98,7 +107,7 @@
<Feature Id="ClassicIE" Level="2" Title="!(loc.IETitle)" ConfigurableDirectory="APPLICATIONFOLDER" AllowAdvertise="no" Description="!(loc.IEDesc)"> <Feature Id="ClassicIE" Level="2" Title="!(loc.IETitle)" ConfigurableDirectory="APPLICATIONFOLDER" AllowAdvertise="no" Description="!(loc.IEDesc)">
<ComponentRef Id="ClassicIEDLL_32.dll" /> <ComponentRef Id="ClassicIEDLL_32.dll" />
<ComponentRef Id="ClassicIE_32.exe" /> <ComponentRef Id="ClassicIE_32.exe" />
<?if $(var.x64)=1 ?> <?if $(var.x64)=1 Or $(var.ARM64)=1 ?>
<ComponentRef Id="ClassicIEDLL_64.dll" /> <ComponentRef Id="ClassicIEDLL_64.dll" />
<ComponentRef Id="ClassicIE_64.exe" /> <ComponentRef Id="ClassicIE_64.exe" />
<?endif ?> <?endif ?>
@@ -443,6 +452,25 @@
<Component Id="StartMenuDLL.dll" Guid="C5226061-17DE-4DF6-A088-CC84F6A7BE84" Win64="yes" DiskId="2"> <Component Id="StartMenuDLL.dll" Guid="C5226061-17DE-4DF6-A088-CC84F6A7BE84" Win64="yes" DiskId="2">
<File Id="StartMenuDLL.dll" Checksum="yes" KeyPath="yes" Source="Output\x64\StartMenuDLL.dll" Vital="yes" /> <File Id="StartMenuDLL.dll" Checksum="yes" KeyPath="yes" Source="Output\x64\StartMenuDLL.dll" Vital="yes" />
</Component> </Component>
<?elseif $(var.ARM64)=1 ?>
<Component Id="ClassicExplorer64.dll" Guid="2C25783D-394D-4E5B-9259-1650F561E2CE" Win64="yes" DiskId="2">
<File Id="ClassicExplorer64.dll" KeyPath="yes" Source="Output\ARM64\ClassicExplorer64.dll" Checksum="yes" SelfRegCost="0" Vital="yes" />
</Component>
<Component Id="ClassicIEDLL_64.dll" Guid="43E62408-40EB-4FBB-98CC-7463F5B78266" Win64="yes" DiskId="2">
<File Id="ClassicIEDLL_64.dll" KeyPath="yes" Source="Output\ARM64\ClassicIEDLL_64.dll" Checksum="yes" SelfRegCost="0" Vital="yes" />
</Component>
<Component Id="ClassicIE_64.exe" Guid="E822E720-8477-4511-AD93-172313EFA636" Win64="yes" DiskId="2">
<File Id="ClassicIE_64.exe" KeyPath="yes" Source="Output\ARM64\ClassicIE_64.exe" Checksum="yes" Vital="yes" />
</Component>
<Component Id="StartMenu.exe" Guid="FC69E080-4232-4161-A1E5-20E255FB2F6B" Win64="yes" DiskId="2">
<File Id="StartMenu.exe" KeyPath="yes" Checksum="yes" Source="Output\ARM64\StartMenu.exe" Vital="yes" />
<Shortcut Id="StartMenuSettings" Name="Start Menu Settings" Advertise="no" Arguments="-settings" Description="!(loc.StartSettingsDesc)" Target="[APPLICATIONFOLDER]StartMenu.exe" WorkingDirectory="APPLICATIONFOLDER">
<ShortcutProperty Key="System.AppUserModel.ID" Value="OpenShell.StartMenu.Settings" />
</Shortcut>
</Component>
<Component Id="StartMenuDLL.dll" Guid="ED99E7BC-9F2C-4A96-A942-6E7D41628AB0" Win64="yes" DiskId="2">
<File Id="StartMenuDLL.dll" Checksum="yes" KeyPath="yes" Source="Output\ARM64\StartMenuDLL.dll" Vital="yes" />
</Component>
<?else ?> <?else ?>
<Component Id="StartMenu.exe" Guid="F74C0FF3-A8C0-4B6E-AFD2-F9467DE4D90B" Win64="no" DiskId="2"> <Component Id="StartMenu.exe" Guid="F74C0FF3-A8C0-4B6E-AFD2-F9467DE4D90B" Win64="no" DiskId="2">
<File Id="StartMenu.exe" KeyPath="yes" Checksum="yes" Source="Output\StartMenu.exe" Vital="yes" /> <File Id="StartMenu.exe" KeyPath="yes" Checksum="yes" Source="Output\StartMenu.exe" Vital="yes" />
@@ -624,6 +652,11 @@
<File Id="StartMenuHelper64.dll" KeyPath="yes" Source="Output\x64\StartMenuHelper64.dll" Checksum="yes" SelfRegCost="0" Vital="yes" /> <File Id="StartMenuHelper64.dll" KeyPath="yes" Source="Output\x64\StartMenuHelper64.dll" Checksum="yes" SelfRegCost="0" Vital="yes" />
</Component> </Component>
<?endif ?> <?endif ?>
<?if $(var.ARM64)=1 ?>
<Component Id="StartMenuHelper64.dll" Guid="108B11E8-2F76-4C37-A274-62BAE6240490" Win64="yes" DiskId="2">
<File Id="StartMenuHelper64.dll" KeyPath="yes" Source="Output\ARM64\StartMenuHelper64.dll" Checksum="yes" SelfRegCost="0" Vital="yes" />
</Component>
<?endif ?>
</DirectoryRef> </DirectoryRef>
<Icon Id="icon.ico" SourceFile="..\Setup\OpenShell.ico" /> <Icon Id="icon.ico" SourceFile="..\Setup\OpenShell.ico" />
<Property Id="ARPPRODUCTICON" Value="icon.ico" /> <Property Id="ARPPRODUCTICON" Value="icon.ico" />

View File

@@ -0,0 +1,61 @@
// Microsoft Visual C++ generated resource script.
//
#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 2 resource.
//
#include "winres.h"
/////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
// English (U.S.) resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
#ifdef _WIN32
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
#pragma code_page(1252)
#endif //_WIN32
/////////////////////////////////////////////////////////////////////////////
//
// Version
//
VS_VERSION_INFO VERSIONINFO
FILEVERSION _PRODUCT_VERSION
PRODUCTVERSION _PRODUCT_VERSION
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x1L
#else
FILEFLAGS 0x0L
#endif
FILEOS 0x4L
FILETYPE 0x2L
FILESUBTYPE 0x0L
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "040904e4"
BEGIN
VALUE "CompanyName", "Open-Shell"
VALUE "FileDescription", "Setup helper"
VALUE "FileVersion", _PRODUCT_VERSION_STR
VALUE "InternalName", "SetupHelper.exe"
VALUE "LegalCopyright", "Copyright (C) 2017-2018, The Open-Shell Team"
VALUE "OriginalFilename", "SetupHelper.exe"
VALUE "ProductName", "Open-Shell"
VALUE "ProductVersion", _PRODUCT_VERSION_STR
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x409, 1252
END
END
#endif // English (U.S.) resources
/////////////////////////////////////////////////////////////////////////////

View File

@@ -38,6 +38,9 @@
<ItemGroup> <ItemGroup>
<ClCompile Include="SetupHelper.cpp" /> <ClCompile Include="SetupHelper.cpp" />
</ItemGroup> </ItemGroup>
<ItemGroup>
<ResourceCompile Include="SetupHelper.rc" />
</ItemGroup>
<ItemGroup> <ItemGroup>
<Manifest Include="SetupHelper.manifest" /> <Manifest Include="SetupHelper.manifest" />
</ItemGroup> </ItemGroup>

View File

@@ -86,7 +86,7 @@ int CalcMsiChecksum( wchar_t *const *params, int count )
// load files // load files
wchar_t path1[_MAX_PATH]; wchar_t path1[_MAX_PATH];
std::vector<unsigned char> buf1, buf2; std::vector<unsigned char> buf1, buf2, buf3;
Sprintf(path1,_countof(path1),L"%s\\Setup32.msi",params[1]); Sprintf(path1,_countof(path1),L"%s\\Setup32.msi",params[1]);
LoadFile(path1,buf1); LoadFile(path1,buf1);
if (buf1.empty()) if (buf1.empty())
@@ -102,20 +102,30 @@ int CalcMsiChecksum( wchar_t *const *params, int count )
Printf("Failed to open file %s\n",path2); Printf("Failed to open file %s\n",path2);
return 1; return 1;
} }
wchar_t path3[_MAX_PATH];
Sprintf(path3,_countof(path3),L"%s\\SetupARM64.msi",params[1]);
LoadFile(path3,buf3);
if (buf3.empty())
{
Printf("Failed to open file %s\n",path3);
return 1;
}
int len1=(int)buf1.size(); int len1=(int)buf1.size();
int len2=(int)buf2.size(); int len2=(int)buf2.size();
int len3=(int)buf3.size();
for (std::vector<unsigned char>::iterator it=buf1.begin();it!=buf1.end();++it) for (std::vector<unsigned char>::iterator it=buf1.begin();it!=buf1.end();++it)
*it^=0xFF; *it^=0xFF;
for (std::vector<unsigned char>::iterator it=buf2.begin();it!=buf2.end();++it) for (std::vector<unsigned char>::iterator it=buf2.begin();it!=buf2.end();++it)
*it^=0xFF; *it^=0xFF;
for (std::vector<unsigned char>::iterator it=buf3.begin();it!=buf3.end();++it)
*it^=0xFF;
// detect common blocks (assuming at least 256K in size and in the same order in both files) const int BLOCK_SIZE = 256 * 1024;
const int BLOCK_SIZE=256*1024; // detect x86/x64 common blocks (assuming at least 256K in size and in the same order in both files)
std::vector<Chunk> chunks; std::vector<Chunk> chunks;
int start2=0; for (int i=0,start2=0;i<len1-BLOCK_SIZE;i+=BLOCK_SIZE)
for (int i=0;i<len1-BLOCK_SIZE;i+=BLOCK_SIZE)
{ {
for (int j=start2;j<len2-BLOCK_SIZE;j++) for (int j=start2;j<len2-BLOCK_SIZE;j++)
{ {
@@ -142,6 +152,35 @@ int CalcMsiChecksum( wchar_t *const *params, int count )
} }
} }
} }
// detect x86/ARM64 common blocks (assuming at least 256K in size and in the same order in both files)
std::vector<Chunk> chunks2;
for (int i=0,start2=0;i<len1-BLOCK_SIZE;i+=BLOCK_SIZE)
{
for (int j=start2;j<len3-BLOCK_SIZE;j++)
{
if (memcmp(&buf1[i],&buf3[j],BLOCK_SIZE)==0)
{
Chunk chunk;
chunk.start1=i;
chunk.start2=j;
chunk.len=BLOCK_SIZE;
while (chunk.start1>0 && chunk.start2>0 && buf1[chunk.start1-1]==buf3[chunk.start2-1])
{
chunk.start1--;
chunk.start2--;
chunk.len++;
}
while (chunk.start1+chunk.len<len1 && chunk.start2+chunk.len<len3 && buf1[chunk.start1+chunk.len]==buf3[chunk.start2+chunk.len])
{
chunk.len++;
}
chunks2.push_back(chunk);
i=chunk.start1+chunk.len-1;
start2=chunk.start2+chunk.len;
break;
}
}
}
// save modified 32-bit MSI // save modified 32-bit MSI
{ {
@@ -177,9 +216,31 @@ int CalcMsiChecksum( wchar_t *const *params, int count )
fclose(f); fclose(f);
} }
unsigned int fnvs[2]; // save modified ARM64 MSI
{
Strcat(path3,_countof(path3),L"_");
FILE* f=NULL;
if (_wfopen_s(&f,path3,L"wb") || !f)
{
Printf("Failed to write %s\n",path3);
return 1;
}
int start=0;
for (std::vector<Chunk>::const_iterator it=chunks2.begin();it!=chunks2.end();++it)
{
if (it->start2-start>0)
fwrite(&buf3[start],1,it->start2-start,f);
start=it->start2+it->len;
}
if (len3-start>0)
fwrite(&buf3[start],1,len3-start,f);
fclose(f);
}
unsigned int fnvs[3];
fnvs[0]=CalcFNVHash(&buf1[0],len1,FNV_HASH0); fnvs[0]=CalcFNVHash(&buf1[0],len1,FNV_HASH0);
fnvs[1]=CalcFNVHash(&buf2[0],len2,FNV_HASH0); fnvs[1]=CalcFNVHash(&buf2[0],len2,FNV_HASH0);
fnvs[2]=CalcFNVHash(&buf3[0],len3,FNV_HASH0);
// save fnvs and chunks // save fnvs and chunks
{ {
@@ -193,6 +254,9 @@ int CalcMsiChecksum( wchar_t *const *params, int count )
int count=(int)chunks.size(); int count=(int)chunks.size();
fwrite(&count,1,4,f); fwrite(&count,1,4,f);
fwrite(&chunks[0],sizeof(Chunk),count,f); fwrite(&chunks[0],sizeof(Chunk),count,f);
count=(int)chunks2.size();
fwrite(&count,1,4,f);
fwrite(&chunks2[0],sizeof(Chunk),count,f);
fclose(f); fclose(f);
} }
return 0; return 0;
@@ -841,7 +905,7 @@ static HRESULT CALLBACK TaskDialogCallback( HWND hwnd, UINT uNotification, WPARA
// Open-Shell utility - multiple utilities for building and maintaining Open-Shell // Open-Shell utility - multiple utilities for building and maintaining Open-Shell
// Usage: // Usage:
// no parameters - saves a troubleshooting log // no parameters - saves a troubleshooting log
// crcmsi <msi path> // creates a file with checksum of both msi files // crcmsi <msi path> // creates a file with checksum of all msi files
// makeEN <explorer dll> <start menu dll> <ie dll> <update exe> // extracts the localization resources and creates a sample en-US.DLL // makeEN <explorer dll> <start menu dll> <ie dll> <update exe> // extracts the localization resources and creates a sample en-US.DLL
// extract <dll> <csv> // extracts the string table, the dialog text, and the L10N text from a DLL and stores it in a CSV // extract <dll> <csv> // extracts the string table, the dialog text, and the L10N text from a DLL and stores it in a CSV
// extract en-us.dll <dll> <csv> // extracts the string table, the dialog text, and the L10N text from two DLL and stores it in a CSV // extract en-us.dll <dll> <csv> // extracts the string table, the dialog text, and the L10N text from two DLL and stores it in a CSV

View File

@@ -207,6 +207,44 @@ BEGIN
END END
#endif // APSTUDIO_INVOKED #endif // APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Version
//
VS_VERSION_INFO VERSIONINFO
FILEVERSION _PRODUCT_VERSION
PRODUCTVERSION _PRODUCT_VERSION
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x1L
#else
FILEFLAGS 0x0L
#endif
FILEOS 0x4L
FILETYPE 0x2L
FILESUBTYPE 0x0L
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "040904e4"
BEGIN
VALUE "CompanyName", "Open-Shell"
VALUE "FileDescription", "Utility"
VALUE "FileVersion", _PRODUCT_VERSION_STR
VALUE "InternalName", "Utility.exe"
VALUE "LegalCopyright", "Copyright (C) 2017-2018, The Open-Shell Team"
VALUE "OriginalFilename", "Utility.exe"
VALUE "ProductName", "Open-Shell"
VALUE "ProductVersion", _PRODUCT_VERSION_STR
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x409, 1252
END
END
#endif // English (U.S.) resources #endif // English (U.S.) resources
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////

View File

@@ -1,6 +1,10 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations"> <ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|ARM64">
<Configuration>Debug</Configuration>
<Platform>ARM64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|Win32"> <ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration> <Configuration>Debug</Configuration>
<Platform>Win32</Platform> <Platform>Win32</Platform>
@@ -9,6 +13,10 @@
<Configuration>Debug</Configuration> <Configuration>Debug</Configuration>
<Platform>x64</Platform> <Platform>x64</Platform>
</ProjectConfiguration> </ProjectConfiguration>
<ProjectConfiguration Include="Release|ARM64">
<Configuration>Release</Configuration>
<Platform>ARM64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32"> <ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration> <Configuration>Release</Configuration>
<Platform>Win32</Platform> <Platform>Win32</Platform>
@@ -63,6 +71,7 @@
<ItemGroup> <ItemGroup>
<ResourceCompile Include="Utility.rc"> <ResourceCompile Include="Utility.rc">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">true</ExcludedFromBuild>
</ResourceCompile> </ResourceCompile>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>

View File

@@ -8,6 +8,7 @@
#define IDS_ERR_CORRUPTED 102 #define IDS_ERR_CORRUPTED 102
#define IDR_MSI_FILE32 132 #define IDR_MSI_FILE32 132
#define IDR_MSI_FILE64 164 #define IDR_MSI_FILE64 164
#define IDR_MSI_FILEARM64 165
#define IDS_ERR_INTERNAL 166 #define IDS_ERR_INTERNAL 166
#define IDS_ERR_EXTRACT 167 #define IDS_ERR_EXTRACT 167
#define IDR_MSI_CHECKSUM 167 #define IDR_MSI_CHECKSUM 167

View File

@@ -52,14 +52,6 @@ END
// Version // Version
// //
// Solution loading fail-safe
#ifndef _PRODUCT_VERSION
#define _PRODUCT_VERSION 4.4.102
#endif
#ifndef _PRODUCT_VERSION_STR
#define _PRODUCT_VERSION_STR "4.4.102"
#endif
VS_VERSION_INFO VERSIONINFO VS_VERSION_INFO VERSIONINFO
FILEVERSION _PRODUCT_VERSION FILEVERSION _PRODUCT_VERSION
PRODUCTVERSION _PRODUCT_VERSION PRODUCTVERSION _PRODUCT_VERSION

View File

@@ -1,6 +1,10 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations"> <ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|ARM64">
<Configuration>Debug</Configuration>
<Platform>ARM64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|Win32"> <ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration> <Configuration>Debug</Configuration>
<Platform>Win32</Platform> <Platform>Win32</Platform>
@@ -9,6 +13,10 @@
<Configuration>Debug</Configuration> <Configuration>Debug</Configuration>
<Platform>x64</Platform> <Platform>x64</Platform>
</ProjectConfiguration> </ProjectConfiguration>
<ProjectConfiguration Include="Release|ARM64">
<Configuration>Release</Configuration>
<Platform>ARM64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32"> <ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration> <Configuration>Release</Configuration>
<Platform>Win32</Platform> <Platform>Win32</Platform>
@@ -17,6 +25,10 @@
<Configuration>Release</Configuration> <Configuration>Release</Configuration>
<Platform>x64</Platform> <Platform>x64</Platform>
</ProjectConfiguration> </ProjectConfiguration>
<ProjectConfiguration Include="Setup|ARM64">
<Configuration>Setup</Configuration>
<Platform>ARM64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Setup|Win32"> <ProjectConfiguration Include="Setup|Win32">
<Configuration>Setup</Configuration> <Configuration>Setup</Configuration>
<Platform>Win32</Platform> <Platform>Win32</Platform>

View File

@@ -526,16 +526,16 @@ void CStartButton::LoadBitmap( void )
} }
else else
{ {
int dpi=GetDpi(GetParent());
bool bResource=false; bool bResource=false;
std::vector<unsigned int> buttonAnim; std::vector<unsigned int> buttonAnim;
if (*path) if (*path)
{ {
m_Bitmap=LoadImageFile(path,&size,true,true,&buttonAnim); m_Bitmap=LoadImageFile(path,&size,true,true,&buttonAnim,dpi);
} }
if (!m_Bitmap) if (!m_Bitmap)
{ {
int id; int id;
int dpi=GetDpi(GetParent());
if (dpi<120) if (dpi<120)
id=IDB_BUTTON96; id=IDB_BUTTON96;
else if (dpi<144) else if (dpi<144)

View File

@@ -67,6 +67,8 @@ static SIZE g_TaskbarTextureSize;
static TTaskbarTile g_TaskbarTileH, g_TaskbarTileV; static TTaskbarTile g_TaskbarTileH, g_TaskbarTileV;
static RECT g_TaskbarMargins; static RECT g_TaskbarMargins;
int g_CurrentCSMTaskbar=-1, g_CurrentWSMTaskbar=-1; int g_CurrentCSMTaskbar=-1, g_CurrentWSMTaskbar=-1;
// ExplorerPatcher taskbar
static bool g_epTaskbar = false;
static void FindWindowsMenu( void ); static void FindWindowsMenu( void );
static void RecreateStartButton( size_t taskbarId ); static void RecreateStartButton( size_t taskbarId );
@@ -1216,14 +1218,36 @@ void EnableHotkeys( THotkeys enable )
} }
} }
bool IsTouchTaskbar(void)
{
if (!IsWin11())
return false;
CRegKey regKey;
if (regKey.Open(HKEY_CURRENT_USER, L"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer") != ERROR_SUCCESS)
return false;
DWORD val;
return regKey.QueryDWORDValue(L"TabletPostureTaskbar", val) == ERROR_SUCCESS && val;
}
static void UpdateStartButtonPosition(const TaskbarInfo* taskBar, const WINDOWPOS* pPos) static void UpdateStartButtonPosition(const TaskbarInfo* taskBar, const WINDOWPOS* pPos)
{ {
if (IsStartButtonSmallIcons(taskBar->taskbarId) != IsTaskbarSmallIcons()) if (IsStartButtonSmallIcons(taskBar->taskbarId) != IsTaskbarSmallIcons())
RecreateStartButton(taskBar->taskbarId); RecreateStartButton(taskBar->taskbarId);
RECT rcTask; RECT rcTask;
GetWindowRect(taskBar->taskBar, &rcTask);
if (IsTouchTaskbar())
{
if (RECT rc; GetWindowRgnBox(taskBar->taskBar, &rc) != ERROR)
{
MapWindowPoints(taskBar->taskBar, NULL, (POINT*)&rc, 2);
rcTask = rc;
}
}
MONITORINFO info; MONITORINFO info;
UINT uEdge = GetTaskbarPosition(taskBar->taskBar, &info, NULL, &rcTask); UINT uEdge = GetTaskbarPosition(taskBar->taskBar, &info, NULL, NULL);
DWORD buttonFlags = SWP_NOACTIVATE | SWP_NOOWNERZORDER | SWP_NOSIZE; DWORD buttonFlags = SWP_NOACTIVATE | SWP_NOOWNERZORDER | SWP_NOSIZE;
if (IsWindowVisible(taskBar->taskBar)) if (IsWindowVisible(taskBar->taskBar))
buttonFlags |= SWP_SHOWWINDOW; buttonFlags |= SWP_SHOWWINDOW;
@@ -1320,7 +1344,7 @@ static void UpdateStartButtonPosition(const TaskbarInfo* taskBar, const WINDOWPO
// Start button on Win11 is a bit shifted to the right // Start button on Win11 is a bit shifted to the right
// We will shift our Aero button to cover original button // We will shift our Aero button to cover original button
if (IsWin11() && (x == info.rcMonitor.left) && (GetStartButtonType() == START_BUTTON_AERO)) if (IsWin11() && (x == info.rcMonitor.left) && (GetStartButtonType() == START_BUTTON_AERO) && !g_epTaskbar)
x += ScaleForDpi(taskBar->taskBar, 6); x += ScaleForDpi(taskBar->taskBar, 6);
} }
@@ -1600,7 +1624,7 @@ static void ComputeTaskbarColors( int *data )
{ {
bool bDefLook; bool bDefLook;
int look=GetSettingInt(L"TaskbarLook",bDefLook); int look=GetSettingInt(L"TaskbarLook",bDefLook);
if (GetWinVersion()<WIN_VER_WIN10 || look==TASKBAR_AEROGLASS || (look==TASKBAR_TRANSPARENT && g_TaskbarTexture)) if (GetWinVersion()<WIN_VER_WIN10 || !IsAppThemed() || look==TASKBAR_AEROGLASS || (look==TASKBAR_TRANSPARENT && g_TaskbarTexture))
{ {
memset(data,0,16); memset(data,0,16);
} }
@@ -1848,6 +1872,7 @@ static LRESULT CALLBACK SubclassTaskBarProc( HWND hWnd, UINT uMsg, WPARAM wParam
ComputeTaskbarColors(data); ComputeTaskbarColors(data);
WINCOMPATTRDATA attrData={0x13,&data,sizeof(data)}; WINCOMPATTRDATA attrData={0x13,&data,sizeof(data)};
SetWindowCompositionAttribute(hWnd,&attrData); SetWindowCompositionAttribute(hWnd,&attrData);
UpdateTaskBars(TASKBAR_UPDATE_TEXTURE);
return res; return res;
} }
if ((uMsg==WM_DWMCOLORIZATIONCOLORCHANGED || uMsg==WM_SETTINGCHANGE) && taskBar && taskBar->bCustomLook && SetWindowCompositionAttribute && GetWinVersion()<WIN_VER_WIN10) if ((uMsg==WM_DWMCOLORIZATIONCOLORCHANGED || uMsg==WM_SETTINGCHANGE) && taskBar && taskBar->bCustomLook && SetWindowCompositionAttribute && GetWinVersion()<WIN_VER_WIN10)
@@ -1908,7 +1933,7 @@ static LRESULT CALLBACK SubclassTaskBarProc( HWND hWnd, UINT uMsg, WPARAM wParam
WINCOMPATTRDATA attrData={0x13,&data,sizeof(data)}; WINCOMPATTRDATA attrData={0x13,&data,sizeof(data)};
SetWindowCompositionAttribute(hWnd,&attrData); SetWindowCompositionAttribute(hWnd,&attrData);
} }
if (g_TaskbarTexture && IsAppThemed()) if (g_TaskbarTexture)
{ {
// draw taskbar background (behind start button and separators) // draw taskbar background (behind start button and separators)
PAINTSTRUCT ps; PAINTSTRUCT ps;
@@ -2359,12 +2384,19 @@ void UpdateTaskBars( TUpdateTaskbar update )
} }
} }
} }
else if (GetWinVersion()<WIN_VER_WIN10 && (!bDefColor || !bDefOpacity)) else if ((GetWinVersion()<WIN_VER_WIN10 && (!bDefColor || !bDefOpacity)) || !IsAppThemed())
{ {
if (bDefColor && GetWinVersion()>WIN_VER_WIN7) if (bDefColor && GetWinVersion()>WIN_VER_WIN7)
{ {
color=GetSystemGlassColor8(); if (IsAppThemed())
color=((color&0xFF)<<16)|(color&0xFF00)|((color>>16)&0xFF); {
color=GetSystemGlassColor8();
color=((color&0xFF)<<16)|(color&0xFF00)|((color>>16)&0xFF);
}
else
{
color=GetSysColor(COLOR_BTNFACE);
}
} }
BITMAPINFO bi={0}; BITMAPINFO bi={0};
bi.bmiHeader.biSize=sizeof(BITMAPINFOHEADER); bi.bmiHeader.biSize=sizeof(BITMAPINFOHEADER);
@@ -2750,6 +2782,17 @@ static void WINAPI SHFillRectClr2( HDC hdc, const RECT *pRect, COLORREF color )
g_SHFillRectClr(hdc,pRect,color); g_SHFillRectClr(hdc,pRect,color);
} }
static IatHookData* g_ExtTextOutWHook = nullptr;
// used by ExplorerPatcher's custom implementation of `SHFillRectClr`
static BOOL WINAPI ExtTextOutW2(HDC hdc, int X, int Y, UINT fuOptions, const RECT* lprc, LPCWSTR lpString, UINT cbCount, const INT* lpDx)
{
if (fuOptions != ETO_OPAQUE || lpString || cbCount || lpDx || !g_CurrentTaskList || !g_TaskbarTexture || GetCurrentThreadId() != g_TaskbarThreadId)
return ExtTextOutW(hdc, X, Y, fuOptions, lprc, lpString, cbCount, lpDx);
return FALSE;
}
static HRESULT STDAPICALLTYPE DrawThemeBackground2( HTHEME hTheme, HDC hdc, int iPartId, int iStateId, LPCRECT pRect, LPCRECT pClipRect ) static HRESULT STDAPICALLTYPE DrawThemeBackground2( HTHEME hTheme, HDC hdc, int iPartId, int iStateId, LPCRECT pRect, LPCRECT pClipRect )
{ {
if (g_CurrentTaskList && g_TaskbarTexture && iPartId==1 && iStateId==0 && GetCurrentThreadId()==g_TaskbarThreadId) if (g_CurrentTaskList && g_TaskbarTexture && iPartId==1 && iStateId==0 && GetCurrentThreadId()==g_TaskbarThreadId)
@@ -2934,6 +2977,15 @@ static void InitStartMenuDLL( void )
if (GetSettingBool(L"CustomTaskbar")) if (GetSettingBool(L"CustomTaskbar"))
{ {
auto module=GetModuleHandle(L"taskbar.dll"); auto module=GetModuleHandle(L"taskbar.dll");
if (!module)
{
module = GetModuleHandle(L"ep_taskbar.5.dll");
if (!module)
module = GetModuleHandle(L"ep_taskbar.2.dll");
if (module)
g_epTaskbar = true;
}
if (!module) if (!module)
module=GetModuleHandle(NULL); module=GetModuleHandle(NULL);
@@ -2953,6 +3005,10 @@ static void InitStartMenuDLL( void )
g_StretchDIBitsHook=SetIatHook(module,"gdi32.dll","StretchDIBits",StretchDIBits2); g_StretchDIBitsHook=SetIatHook(module,"gdi32.dll","StretchDIBits",StretchDIBits2);
if (!g_StretchDIBitsHook) if (!g_StretchDIBitsHook)
g_StretchDIBitsHook=SetIatHook(module,"ext-ms-win-gdi-draw-l1-1-0.dll","StretchDIBits",StretchDIBits2); g_StretchDIBitsHook=SetIatHook(module,"ext-ms-win-gdi-draw-l1-1-0.dll","StretchDIBits",StretchDIBits2);
// ExplorerPatcher compatibility
if (g_epTaskbar)
g_ExtTextOutWHook = SetIatHook(module, "gdi32.dll", "ExtTextOutW", ExtTextOutW2);
} }
{ {
@@ -2964,7 +3020,10 @@ static void InitStartMenuDLL( void )
if (GetWinVersion()<=WIN_VER_WIN81) if (GetWinVersion()<=WIN_VER_WIN81)
g_DrawThemeBackgroundHook=SetIatHook(module,"uxtheme.dll","DrawThemeBackground",DrawThemeBackground2); g_DrawThemeBackgroundHook=SetIatHook(module,"uxtheme.dll","DrawThemeBackground",DrawThemeBackground2);
g_DrawThemeTextHook=SetIatHook(module,"uxtheme.dll","DrawThemeText",DrawThemeText2); g_DrawThemeTextHook=SetIatHook(module,"uxtheme.dll","DrawThemeText",DrawThemeText2);
g_DrawThemeTextExHook=SetIatHook(module,"uxtheme.dll","DrawThemeTextEx",DrawThemeTextEx2); if (IsAppThemed())
{
g_DrawThemeTextExHook=SetIatHook(module,"uxtheme.dll","DrawThemeTextEx",DrawThemeTextEx2);
}
g_DrawThemeTextCtlHook=SetIatHook(GetModuleHandle(L"comctl32.dll"),"uxtheme.dll","DrawThemeText",DrawThemeText2); g_DrawThemeTextCtlHook=SetIatHook(GetModuleHandle(L"comctl32.dll"),"uxtheme.dll","DrawThemeText",DrawThemeText2);
if (GetWinVersion()>=WIN_VER_WIN10) if (GetWinVersion()>=WIN_VER_WIN10)
g_SetWindowCompositionAttributeHook=SetIatHook(module,"user32.dll","SetWindowCompositionAttribute",SetWindowCompositionAttribute2); g_SetWindowCompositionAttributeHook=SetIatHook(module,"user32.dll","SetWindowCompositionAttribute",SetWindowCompositionAttribute2);
@@ -3084,6 +3143,9 @@ static void InitStartMenuDLL( void )
taskBar.chevron=FindWindowEx(tray,NULL,L"Button",NULL); taskBar.chevron=FindWindowEx(tray,NULL,L"Button",NULL);
if (taskBar.chevron) if (taskBar.chevron)
SetWindowSubclass(taskBar.chevron,SubclassTrayChevronProc,'CLSH',taskBar.taskbarId); SetWindowSubclass(taskBar.chevron,SubclassTrayChevronProc,'CLSH',taskBar.taskbarId);
taskBar.news=FindWindowEx(g_TaskBar,NULL,L"DynamicContent2",NULL);
if (taskBar.news)
SetWindowSubclass(taskBar.news,SubclassTrayChevronProc,'CLSH',taskBar.taskbarId);
} }
HandleTaskbarParts(taskBar,true); HandleTaskbarParts(taskBar,true);
@@ -3173,11 +3235,15 @@ static void RecreateStartButton( size_t taskbarId )
RECT rcTask; RECT rcTask;
GetWindowRect(taskBar.taskBar,&rcTask); GetWindowRect(taskBar.taskBar,&rcTask);
PostMessage(taskBar.taskBar,WM_SIZE,SIZE_RESTORED,MAKELONG(rcTask.right-rcTask.left,rcTask.bottom-rcTask.top)); PostMessage(taskBar.taskBar,WM_SIZE,SIZE_RESTORED,MAKELONG(rcTask.right-rcTask.left,rcTask.bottom-rcTask.top));
for (auto btn : taskBar.trayButtons) if (taskBar.taskBar==g_TaskBar)
{ {
RECT rc; for (auto btn : taskBar.trayButtons)
GetWindowRect(btn,&rc); {
SetWindowPos(btn,HWND_TOP,rc.left,rc.top,0,0,SWP_NOSIZE|SWP_NOACTIVATE|SWP_NOZORDER); RECT rc;
GetWindowRect(btn,&rc);
MapWindowPoints(NULL,taskBar.taskBar,(POINT*)&rc,2); // convert to taskbar coordinates
SetWindowPos(btn,HWND_TOP,rc.left,rc.top,0,0,SWP_NOSIZE|SWP_NOACTIVATE|SWP_NOZORDER);
}
} }
} }
} }
@@ -3202,6 +3268,8 @@ static void CleanStartMenuDLL( void )
g_SHFillRectClrHook=NULL; g_SHFillRectClrHook=NULL;
ClearIatHook(g_StretchDIBitsHook); ClearIatHook(g_StretchDIBitsHook);
g_StretchDIBitsHook=NULL; g_StretchDIBitsHook=NULL;
ClearIatHook(g_ExtTextOutWHook);
g_ExtTextOutWHook = NULL;
ClearIatHook(g_DrawThemeBackgroundHook); ClearIatHook(g_DrawThemeBackgroundHook);
g_DrawThemeBackgroundHook=NULL; g_DrawThemeBackgroundHook=NULL;
@@ -3270,6 +3338,8 @@ if (!g_bTrimHooks)
} }
if (it->second.chevron) if (it->second.chevron)
RemoveWindowSubclass(it->second.chevron,SubclassTrayChevronProc,'CLSH'); RemoveWindowSubclass(it->second.chevron,SubclassTrayChevronProc,'CLSH');
if (it->second.news)
RemoveWindowSubclass(it->second.news,SubclassTrayChevronProc,'CLSH');
if (it->second.desktop) if (it->second.desktop)
RemoveWindowSubclass(it->second.desktop,SubclassDesktopButtonProc,'CLSH'); RemoveWindowSubclass(it->second.desktop,SubclassDesktopButtonProc,'CLSH');
if (it->second.bTimer) if (it->second.bTimer)

View File

@@ -47,7 +47,7 @@ void EnableStartTooltip( bool bEnable );
struct TaskbarInfo struct TaskbarInfo
{ {
TaskbarInfo( void ) { taskbarId=pointerId=0; taskBar=startButton=oldButton=rebar=taskList=chevron=desktop=NULL; startButtonSize.cx=startButtonSize.cy=0; oldButtonSize.cx=oldButtonSize.cy=0; bTimer=bCustomLook=bReplaceButton=bHideButton=bRecreatingButton=bThemeChanging=false; } TaskbarInfo( void ) { taskbarId=pointerId=0; taskBar=startButton=oldButton=rebar=taskList=chevron=news=desktop=NULL; startButtonSize.cx=startButtonSize.cy=0; oldButtonSize.cx=oldButtonSize.cy=0; bTimer=bCustomLook=bReplaceButton=bHideButton=bRecreatingButton=bThemeChanging=false; }
int taskbarId; int taskbarId;
HWND taskBar; HWND taskBar;
HWND startButton; // either own start button or the win7 start button (depending on bReplaceButton) HWND startButton; // either own start button or the win7 start button (depending on bReplaceButton)
@@ -55,6 +55,7 @@ struct TaskbarInfo
HWND rebar; HWND rebar;
HWND taskList; HWND taskList;
HWND chevron; HWND chevron;
HWND news;
HWND desktop; HWND desktop;
SIZE startButtonSize; SIZE startButtonSize;
SIZE oldButtonSize; SIZE oldButtonSize;

View File

@@ -1,6 +1,10 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations"> <ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|ARM64">
<Configuration>Debug</Configuration>
<Platform>ARM64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|Win32"> <ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration> <Configuration>Debug</Configuration>
<Platform>Win32</Platform> <Platform>Win32</Platform>
@@ -9,6 +13,10 @@
<Configuration>Debug</Configuration> <Configuration>Debug</Configuration>
<Platform>x64</Platform> <Platform>x64</Platform>
</ProjectConfiguration> </ProjectConfiguration>
<ProjectConfiguration Include="Release|ARM64">
<Configuration>Release</Configuration>
<Platform>ARM64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32"> <ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration> <Configuration>Release</Configuration>
<Platform>Win32</Platform> <Platform>Win32</Platform>
@@ -17,6 +25,10 @@
<Configuration>Release</Configuration> <Configuration>Release</Configuration>
<Platform>x64</Platform> <Platform>x64</Platform>
</ProjectConfiguration> </ProjectConfiguration>
<ProjectConfiguration Include="Setup|ARM64">
<Configuration>Setup</Configuration>
<Platform>ARM64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Setup|Win32"> <ProjectConfiguration Include="Setup|Win32">
<Configuration>Setup</Configuration> <Configuration>Setup</Configuration>
<Platform>Win32</Platform> <Platform>Win32</Platform>

View File

@@ -274,15 +274,30 @@ static void ParseApplicationInformation(CComPtr<IXMLDOMNode>& parent, AttributeW
} }
} }
static void ParseSettingIDs(CComPtr<IXMLDOMNode>& node, AttributeWriter& writer)
{
writer.addString(Id::PageId, GetTranslatedString(node, L"PageID"));
writer.addString(Id::HostId, GetTranslatedString(node, L"HostID"));
writer.addString(Id::GroupId, GetTranslatedString(node, L"GroupID"));
writer.addString(Id::SettingId, GetTranslatedString(node, L"SettingID"));
}
static void ParseSettingPaths(CComPtr<IXMLDOMNode>& parent, AttributeWriter& writer)
{
CComPtr<IXMLDOMNode> node;
if (parent->selectSingleNode(CComBSTR(L"SettingPaths/Path"), &node) == S_OK)
ParseSettingIDs(node, writer);
}
static void ParseSettingIdentity(CComPtr<IXMLDOMNode>& parent, AttributeWriter& writer) static void ParseSettingIdentity(CComPtr<IXMLDOMNode>& parent, AttributeWriter& writer)
{ {
CComPtr<IXMLDOMNode> node; CComPtr<IXMLDOMNode> node;
if (parent->selectSingleNode(CComBSTR(L"SettingIdentity"), &node) == S_OK) if (parent->selectSingleNode(CComBSTR(L"SettingIdentity"), &node) == S_OK)
{ {
writer.addString(Id::PageId, GetTranslatedString(node, L"PageID")); // Win11 24H2+
writer.addString(Id::HostId, GetTranslatedString(node, L"HostID")); ParseSettingPaths(node, writer);
writer.addString(Id::GroupId, GetTranslatedString(node, L"GroupID")); // older
writer.addString(Id::SettingId, GetTranslatedString(node, L"SettingID")); ParseSettingIDs(node, writer);
} }
} }

View File

@@ -1,6 +1,14 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations"> <ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|ARM64">
<Configuration>Debug</Configuration>
<Platform>ARM64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|ARM64EC">
<Configuration>Debug</Configuration>
<Platform>ARM64EC</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|Win32"> <ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration> <Configuration>Debug</Configuration>
<Platform>Win32</Platform> <Platform>Win32</Platform>
@@ -9,6 +17,14 @@
<Configuration>Debug</Configuration> <Configuration>Debug</Configuration>
<Platform>x64</Platform> <Platform>x64</Platform>
</ProjectConfiguration> </ProjectConfiguration>
<ProjectConfiguration Include="Release|ARM64">
<Configuration>Release</Configuration>
<Platform>ARM64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|ARM64EC">
<Configuration>Release</Configuration>
<Platform>ARM64EC</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32"> <ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration> <Configuration>Release</Configuration>
<Platform>Win32</Platform> <Platform>Win32</Platform>
@@ -17,6 +33,14 @@
<Configuration>Release</Configuration> <Configuration>Release</Configuration>
<Platform>x64</Platform> <Platform>x64</Platform>
</ProjectConfiguration> </ProjectConfiguration>
<ProjectConfiguration Include="Setup|ARM64">
<Configuration>Setup</Configuration>
<Platform>ARM64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Setup|ARM64EC">
<Configuration>Setup</Configuration>
<Platform>ARM64EC</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Setup|Win32"> <ProjectConfiguration Include="Setup|Win32">
<Configuration>Setup</Configuration> <Configuration>Setup</Configuration>
<Platform>Win32</Platform> <Platform>Win32</Platform>
@@ -53,6 +77,13 @@
<PropertyGroup Condition="'$(Platform)'=='x64'"> <PropertyGroup Condition="'$(Platform)'=='x64'">
<TargetName>$(ProjectName)64</TargetName> <TargetName>$(ProjectName)64</TargetName>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Platform)'=='ARM64EC'">
<TargetName>$(ProjectName)64</TargetName>
</PropertyGroup>
<PropertyGroup Condition="'$(Platform)'=='ARM64'">
<TargetName>$(ProjectName)64</TargetName>
<BuildAsX>true</BuildAsX>
</PropertyGroup>
<ItemDefinitionGroup> <ItemDefinitionGroup>
<ClCompile> <ClCompile>
<PreprocessorDefinitions>_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessorDefinitions>_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>

View File

@@ -93,6 +93,7 @@ Menu.SearchPeople = عن أ&شخاص...
Menu.SortByName = فرز &حسب الاسم Menu.SortByName = فرز &حسب الاسم
Menu.Open = ف&تح Menu.Open = ف&تح
Menu.OpenAll = &فتح كافة المستخدمين Menu.OpenAll = &فتح كافة المستخدمين
Menu.OpenPinned = Open Pinned
Menu.Explore = ا&ستكشاف Menu.Explore = ا&ستكشاف
Menu.ExploreAll = است&كشاف كافة المستخدمين Menu.ExploreAll = است&كشاف كافة المستخدمين
Menu.MenuSettings = إعدادات Menu.MenuSettings = إعدادات
@@ -229,6 +230,7 @@ Menu.SearchPeople = За хо&ра...
Menu.SortByName = &Сортирай по име Menu.SortByName = &Сортирай по име
Menu.Open = &Отвори Menu.Open = &Отвори
Menu.OpenAll = О&твори "Всички потребители" Menu.OpenAll = О&твори "Всички потребители"
Menu.OpenPinned = Отворете фиксираните елементи
Menu.Explore = &Преглед Menu.Explore = &Преглед
Menu.ExploreAll = Пре&глед на "Всички потребители" Menu.ExploreAll = Пре&глед на "Всички потребители"
Menu.MenuSettings = Настройки Menu.MenuSettings = Настройки
@@ -365,6 +367,7 @@ Menu.SearchPeople = &Persones...
Menu.SortByName = Ordenar per &Nom Menu.SortByName = Ordenar per &Nom
Menu.Open = &Obrir Menu.Open = &Obrir
Menu.OpenAll = Ob&rir tots els usuaris Menu.OpenAll = Ob&rir tots els usuaris
Menu.OpenPinned = Obre elements fixats
Menu.Explore = E&xplorar Menu.Explore = E&xplorar
Menu.ExploreAll = &Explorar tots els usuaris Menu.ExploreAll = &Explorar tots els usuaris
Menu.MenuSettings = Configuració Menu.MenuSettings = Configuració
@@ -503,6 +506,7 @@ Menu.SearchPeople = Oso&by...
Menu.SortByName = Seřadit podle &názvu Menu.SortByName = Seřadit podle &názvu
Menu.Open = &Otevřít Menu.Open = &Otevřít
Menu.OpenAll = Ot&evřít položky všech uživatele Menu.OpenAll = Ot&evřít položky všech uživatele
Menu.OpenPinned = Otevřít připnuté položky
Menu.Explore = Proz&koumat Menu.Explore = Proz&koumat
Menu.ExploreAll = P&rocházet položky všech uživatelů Menu.ExploreAll = P&rocházet položky všech uživatelů
Menu.MenuSettings = Nastavení Menu.MenuSettings = Nastavení
@@ -639,6 +643,7 @@ Menu.SearchPeople = Efter &personer...
Menu.SortByName = So&rter efter navn Menu.SortByName = So&rter efter navn
Menu.Open = Å&bn Menu.Open = Å&bn
Menu.OpenAll = &Åbn mappen Alle brugere Menu.OpenAll = &Åbn mappen Alle brugere
Menu.OpenPinned = Åbn fastgjorte elementer
Menu.Explore = &Stifinder Menu.Explore = &Stifinder
Menu.ExploreAll = &Gennemse mappen Alle brugere Menu.ExploreAll = &Gennemse mappen Alle brugere
Menu.MenuSettings = Indstillinger Menu.MenuSettings = Indstillinger
@@ -912,6 +917,7 @@ Menu.SearchPeople = Για ά&τομα...
Menu.SortByName = Ταξι&νόμηση κατά όνομα Menu.SortByName = Ταξι&νόμηση κατά όνομα
Menu.Open = Άν&οιγμα Menu.Open = Άν&οιγμα
Menu.OpenAll = Άνοιγμα ό&λων των χρηστών Menu.OpenAll = Άνοιγμα ό&λων των χρηστών
Menu.OpenPinned = Άνοιγμα καρφιτσωμένων στοιχείων
Menu.Explore = Ε&ξερεύνηση Menu.Explore = Ε&ξερεύνηση
Menu.ExploreAll = &Εξερεύνηση όλων των χρηστών Menu.ExploreAll = &Εξερεύνηση όλων των χρηστών
Menu.MenuSettings = Ρυθμίσεις Menu.MenuSettings = Ρυθμίσεις
@@ -1048,6 +1054,7 @@ Menu.SearchPeople = For &People...
Menu.SortByName = Sort &by Name Menu.SortByName = Sort &by Name
Menu.Open = &Open Menu.Open = &Open
Menu.OpenAll = O&pen All Users Menu.OpenAll = O&pen All Users
Menu.OpenPinned = Open Pinned
Menu.Explore = &Explore Menu.Explore = &Explore
Menu.ExploreAll = E&xplore All Users Menu.ExploreAll = E&xplore All Users
Menu.MenuSettings = Settings Menu.MenuSettings = Settings
@@ -1184,6 +1191,7 @@ Menu.SearchPeople = &Personas...
Menu.SortByName = Ordenar por &Nombre Menu.SortByName = Ordenar por &Nombre
Menu.Open = &Abrir Menu.Open = &Abrir
Menu.OpenAll = Ab&rir todos los usuarios Menu.OpenAll = Ab&rir todos los usuarios
Menu.OpenPinned = Abrir elementos fijados
Menu.Explore = E&xplorar Menu.Explore = E&xplorar
Menu.ExploreAll = &Explorar todos los usuarios Menu.ExploreAll = &Explorar todos los usuarios
Menu.MenuSettings = Configuración Menu.MenuSettings = Configuración
@@ -1320,6 +1328,7 @@ Menu.SearchPeople = &Inimesi...
Menu.SortByName = Sor&di nime järgi Menu.SortByName = Sor&di nime järgi
Menu.Open = &Ava Menu.Open = &Ava
Menu.OpenAll = A&va kaust Kõik kasutajad Menu.OpenAll = A&va kaust Kõik kasutajad
Menu.OpenPinned = Ava kinnitatud üksused
Menu.Explore = Uu&ri Menu.Explore = Uu&ri
Menu.ExploreAll = Uur&i kausta Kõik kasutajad Menu.ExploreAll = Uur&i kausta Kõik kasutajad
Menu.MenuSettings = Sätted Menu.MenuSettings = Sätted
@@ -1456,6 +1465,7 @@ Menu.SearchPeople = برای ا&فراد...
Menu.SortByName = &ترتیب بر اساس نام Menu.SortByName = &ترتیب بر اساس نام
Menu.Open = با&ز کردن Menu.Open = با&ز کردن
Menu.OpenAll = باز کردن تمام &کاربرها Menu.OpenAll = باز کردن تمام &کاربرها
Menu.OpenPinned = Open Pinned
Menu.Explore = کاو&ش Menu.Explore = کاو&ش
Menu.ExploreAll = کاوش ت&مام کاربرها Menu.ExploreAll = کاوش ت&مام کاربرها
Menu.MenuSettings = تنظیمات Menu.MenuSettings = تنظیمات
@@ -1594,6 +1604,7 @@ Menu.SearchPeople = &Henkilöitä...
Menu.SortByName = &Lajittele nimen mukaan Menu.SortByName = &Lajittele nimen mukaan
Menu.Open = &Avaa Menu.Open = &Avaa
Menu.OpenAll = Avaa &kaikki käyttäjät Menu.OpenAll = Avaa &kaikki käyttäjät
Menu.OpenPinned = Avaa kiinnitetyt kohteet
Menu.Explore = &Resurssienhallinta Menu.Explore = &Resurssienhallinta
Menu.ExploreAll = &Selaa kaikkia käyttäjiä Menu.ExploreAll = &Selaa kaikkia käyttäjiä
Menu.MenuSettings = Asetukset Menu.MenuSettings = Asetukset
@@ -1730,6 +1741,7 @@ Menu.SearchPeople = Des &personnes…
Menu.SortByName = Trier par &nom Menu.SortByName = Trier par &nom
Menu.Open = &Ouvrir Menu.Open = &Ouvrir
Menu.OpenAll = Ouvrir &tous les utilisateurs Menu.OpenAll = Ouvrir &tous les utilisateurs
Menu.OpenPinned = Ouvrir les éléments épinglés
Menu.Explore = E&xplorer Menu.Explore = E&xplorer
Menu.ExploreAll = &Explorer Tous les utilisateurs Menu.ExploreAll = &Explorer Tous les utilisateurs
Menu.MenuSettings = Paramètres Menu.MenuSettings = Paramètres
@@ -1866,6 +1878,7 @@ Menu.SearchPeople = Airson &daoine...
Menu.SortByName = Seòrsaich a-rèir ain&m Menu.SortByName = Seòrsaich a-rèir ain&m
Menu.Open = F&osgail Menu.Open = F&osgail
Menu.OpenAll = &Fosgail a h-uile cleachdaiche Menu.OpenAll = &Fosgail a h-uile cleachdaiche
Menu.OpenPinned = Fosgail nithean pinnte
Menu.Explore = &Rùraich Menu.Explore = &Rùraich
Menu.ExploreAll = Rùraic&h a h-uile cleachdaiche Menu.ExploreAll = Rùraic&h a h-uile cleachdaiche
Menu.MenuSettings = Roghainnean Menu.MenuSettings = Roghainnean
@@ -2002,6 +2015,7 @@ Menu.SearchPeople = עבור &אנשים...
Menu.SortByName = מיין לפי &שם Menu.SortByName = מיין לפי &שם
Menu.Open = &פתח Menu.Open = &פתח
Menu.OpenAll = פתח את &כל המשתמשים Menu.OpenAll = פתח את &כל המשתמשים
Menu.OpenPinned = Open Pinned
Menu.Explore = &סייר Menu.Explore = &סייר
Menu.ExploreAll = סיי&ר בכל המשתמשים Menu.ExploreAll = סיי&ר בכל המשתמשים
Menu.MenuSettings = הגדרות Menu.MenuSettings = הגדרות
@@ -2138,6 +2152,7 @@ Menu.SearchPeople = Za &osobe...
Menu.SortByName = Poredaj po i&menu Menu.SortByName = Poredaj po i&menu
Menu.Open = &Otvori Menu.Open = &Otvori
Menu.OpenAll = Ot&vori sve korisnike Menu.OpenAll = Ot&vori sve korisnike
Menu.OpenPinned = Otvaranje zakačenih stavki
Menu.Explore = Ist&raži Menu.Explore = Ist&raži
Menu.ExploreAll = Istr&aži sve korisnike Menu.ExploreAll = Istr&aži sve korisnike
Menu.MenuSettings = Postavke Menu.MenuSettings = Postavke
@@ -2274,6 +2289,7 @@ Menu.SearchPeople = &Személyek...
Menu.SortByName = &Név szerinti rendezés Menu.SortByName = &Név szerinti rendezés
Menu.Open = &Megnyitás Menu.Open = &Megnyitás
Menu.OpenAll = M&egnyitás - All Users Menu.OpenAll = M&egnyitás - All Users
Menu.OpenPinned = Open Pinned
Menu.Explore = T&allózás Menu.Explore = T&allózás
Menu.ExploreAll = Ta&llózás - All Users Menu.ExploreAll = Ta&llózás - All Users
Menu.MenuSettings = Beállítások Menu.MenuSettings = Beállítások
@@ -2412,6 +2428,7 @@ Menu.SearchPeople = Að &fólki...
Menu.SortByName = Raða &eftir heiti Menu.SortByName = Raða &eftir heiti
Menu.Open = &Opna Menu.Open = &Opna
Menu.OpenAll = O&pna Allir notendur Menu.OpenAll = O&pna Allir notendur
Menu.OpenPinned = Opnaðu fest atriði
Menu.Explore = Opna &möppu Menu.Explore = Opna &möppu
Menu.ExploreAll = Opna m&öppu Allir notendur Menu.ExploreAll = Opna m&öppu Allir notendur
Menu.MenuSettings = Stillingar Menu.MenuSettings = Stillingar
@@ -2548,6 +2565,7 @@ Menu.SearchPeople = &Contatti...
Menu.SortByName = Or&dina per nome Menu.SortByName = Or&dina per nome
Menu.Open = &Apri Menu.Open = &Apri
Menu.OpenAll = Apri &cartella Utenti Menu.OpenAll = Apri &cartella Utenti
Menu.OpenPinned = Apri gli elementi appuntati
Menu.Explore = &Esplora Menu.Explore = &Esplora
Menu.ExploreAll = Esplora cartella &Utenti Menu.ExploreAll = Esplora cartella &Utenti
Menu.MenuSettings = Impostazioni Menu.MenuSettings = Impostazioni
@@ -2684,6 +2702,7 @@ Menu.SearchPeople = 人(&P)...
Menu.SortByName = 名前順で並べ替え(&B) Menu.SortByName = 名前順で並べ替え(&B)
Menu.Open = 開く(&O) Menu.Open = 開く(&O)
Menu.OpenAll = 開く - All Users(&P) Menu.OpenAll = 開く - All Users(&P)
Menu.OpenPinned = 開く - Pinned
Menu.Explore = エクスプローラー(&E) Menu.Explore = エクスプローラー(&E)
Menu.ExploreAll = エクスプローラー - All Users(&X) Menu.ExploreAll = エクスプローラー - All Users(&X)
Menu.MenuSettings = 設定 Menu.MenuSettings = 設定
@@ -2820,6 +2839,7 @@ Menu.SearchPeople = 사람 찾기(&P)...
Menu.SortByName = 이름순 정렬(&B) Menu.SortByName = 이름순 정렬(&B)
Menu.Open = 열기(&O) Menu.Open = 열기(&O)
Menu.OpenAll = 열기 - All Users(&P) Menu.OpenAll = 열기 - All Users(&P)
Menu.OpenPinned = 열기 - Pinned
Menu.Explore = 탐색(&E) Menu.Explore = 탐색(&E)
Menu.ExploreAll = 탐색 - All Users(&X) Menu.ExploreAll = 탐색 - All Users(&X)
Menu.MenuSettings = 설정 Menu.MenuSettings = 설정
@@ -2956,6 +2976,7 @@ Menu.SearchPeople = &Asmenims...
Menu.SortByName = &Rūšiuoti pagal vardus Menu.SortByName = &Rūšiuoti pagal vardus
Menu.Open = &Atidaryti Menu.Open = &Atidaryti
Menu.OpenAll = A&tidaryti aplanką Visi vartotojai Menu.OpenAll = A&tidaryti aplanką Visi vartotojai
Menu.OpenPinned = Atidaryti prisegtus elementus
Menu.Explore = Naršyt&i Menu.Explore = Naršyt&i
Menu.ExploreAll = Na&ršyti visus vartotojus Menu.ExploreAll = Na&ršyti visus vartotojus
Menu.MenuSettings = Parametrai Menu.MenuSettings = Parametrai
@@ -3092,6 +3113,7 @@ Menu.SearchPeople = &Personām...
Menu.SortByName = &Kārtot pēc nosaukuma Menu.SortByName = &Kārtot pēc nosaukuma
Menu.Open = A&tvērt Menu.Open = A&tvērt
Menu.OpenAll = &Atvērt visus lietotājus Menu.OpenAll = &Atvērt visus lietotājus
Menu.OpenPinned = Atvērt piespraustos vienumus
Menu.Explore = &Pārlūkot Menu.Explore = &Pārlūkot
Menu.ExploreAll = Pār&lūkot visus lietotājus Menu.ExploreAll = Pār&lūkot visus lietotājus
Menu.MenuSettings = Iestatījumi Menu.MenuSettings = Iestatījumi
@@ -3228,6 +3250,7 @@ Menu.SearchPeople = За луѓе...
Menu.SortByName = Сортирај по име Menu.SortByName = Сортирај по име
Menu.Open = Отвори Menu.Open = Отвори
Menu.OpenAll = Отвори "Сите корисници" Menu.OpenAll = Отвори "Сите корисници"
Menu.OpenPinned = Отворете закачени ставки
Menu.Explore = Преглед Menu.Explore = Преглед
Menu.ExploreAll = Преглед на "Сите корисници" Menu.ExploreAll = Преглед на "Сите корисници"
Menu.MenuSettings = Подесувања Menu.MenuSettings = Подесувања
@@ -3364,6 +3387,7 @@ Menu.SearchPeople = Etter &personer...
Menu.SortByName = Sorter etter &navn Menu.SortByName = Sorter etter &navn
Menu.Open = Å&pne Menu.Open = Å&pne
Menu.OpenAll = &Åpne mappen All users Menu.OpenAll = &Åpne mappen All users
Menu.OpenPinned = Åpne festede elementer
Menu.Explore = &Utforsk Menu.Explore = &Utforsk
Menu.ExploreAll = Utforsk &mappen All users Menu.ExploreAll = Utforsk &mappen All users
Menu.MenuSettings = Innstillinger Menu.MenuSettings = Innstillinger
@@ -3500,6 +3524,7 @@ Menu.SearchPeople = &Personen...
Menu.SortByName = S&orteren op naam Menu.SortByName = S&orteren op naam
Menu.Open = &Openen Menu.Open = &Openen
Menu.OpenAll = &Alle gebruikers weergeven Menu.OpenAll = &Alle gebruikers weergeven
Menu.OpenPinned = Open vastgezette items
Menu.Explore = Ve&rkennen Menu.Explore = Ve&rkennen
Menu.ExploreAll = Alle &gebruikers verkennen Menu.ExploreAll = Alle &gebruikers verkennen
Menu.MenuSettings = Instellingen Menu.MenuSettings = Instellingen
@@ -3636,6 +3661,7 @@ Menu.SearchPeople = &Do osób...
Menu.SortByName = Sortuj w&edług nazw Menu.SortByName = Sortuj w&edług nazw
Menu.Open = &Otwórz Menu.Open = &Otwórz
Menu.OpenAll = Otwórz &wszystkich użytkowników Menu.OpenAll = Otwórz &wszystkich użytkowników
Menu.OpenPinned = Otwórz przypięte elementy
Menu.Explore = &Eksploruj Menu.Explore = &Eksploruj
Menu.ExploreAll = E&ksploruj wszystkich użytkowników Menu.ExploreAll = E&ksploruj wszystkich użytkowników
Menu.MenuSettings = Ustawienia Menu.MenuSettings = Ustawienia
@@ -3772,6 +3798,7 @@ Menu.SearchPeople = Para &Pessoas...
Menu.SortByName = C&lassificar por nome Menu.SortByName = C&lassificar por nome
Menu.Open = &Abrir Menu.Open = &Abrir
Menu.OpenAll = A&brir a pasta All Users Menu.OpenAll = A&brir a pasta All Users
Menu.OpenPinned = Abrir itens fixados
Menu.Explore = E&xplorar Menu.Explore = E&xplorar
Menu.ExploreAll = Expl&orar a pasta All Users Menu.ExploreAll = Expl&orar a pasta All Users
Menu.MenuSettings = Configurações Menu.MenuSettings = Configurações
@@ -3908,6 +3935,7 @@ Menu.SearchPeople = &Pessoas...
Menu.SortByName = Ordenar pelo &nome Menu.SortByName = Ordenar pelo &nome
Menu.Open = &Abrir Menu.Open = &Abrir
Menu.OpenAll = A&brir All Users Menu.OpenAll = A&brir All Users
Menu.OpenPinned = Abrir os itens fixados
Menu.Explore = E&xplorar Menu.Explore = E&xplorar
Menu.ExploreAll = Explorar All &Users Menu.ExploreAll = Explorar All &Users
Menu.MenuSettings = Definições Menu.MenuSettings = Definições
@@ -4044,6 +4072,7 @@ Menu.SearchPeople = &Persoane...
Menu.SortByName = &Sortare după nume Menu.SortByName = &Sortare după nume
Menu.Open = &Deschidere Menu.Open = &Deschidere
Menu.OpenAll = Desc&hidere Toți utilizatorii Menu.OpenAll = Desc&hidere Toți utilizatorii
Menu.OpenPinned = Deschideți elementele fixate
Menu.Explore = &Explorare Menu.Explore = &Explorare
Menu.ExploreAll = E&xplorare Toți utilizatorii Menu.ExploreAll = E&xplorare Toți utilizatorii
Menu.MenuSettings = Setări Menu.MenuSettings = Setări
@@ -4180,6 +4209,7 @@ Menu.SearchPeople = &Людей...
Menu.SortByName = &Сортировать по имени Menu.SortByName = &Сортировать по имени
Menu.Open = &Открыть Menu.Open = &Открыть
Menu.OpenAll = Открыть о&бщее для всех меню Menu.OpenAll = Открыть о&бщее для всех меню
Menu.OpenPinned = Открыть папку "Pinned"
Menu.Explore = &Проводник Menu.Explore = &Проводник
Menu.ExploreAll = Проводни&к в общее для всех меню Menu.ExploreAll = Проводни&к в общее для всех меню
Menu.MenuSettings = Настройка Menu.MenuSettings = Настройка
@@ -4316,6 +4346,7 @@ Menu.SearchPeople = Ľu&dia...
Menu.SortByName = &Usporiadať podľa názvov Menu.SortByName = &Usporiadať podľa názvov
Menu.Open = &Otvoriť Menu.Open = &Otvoriť
Menu.OpenAll = Ot&voriť profil All Users Menu.OpenAll = Ot&voriť profil All Users
Menu.OpenPinned = Otvoriť Pinned
Menu.Explore = &Preskúmať Menu.Explore = &Preskúmať
Menu.ExploreAll = P&reskúmať profil All Users Menu.ExploreAll = P&reskúmať profil All Users
Menu.MenuSettings = Nastavenie Menu.MenuSettings = Nastavenie
@@ -4452,6 +4483,7 @@ Menu.SearchPeople = &Za osebe ...
Menu.SortByName = &Razvrsti po imenih Menu.SortByName = &Razvrsti po imenih
Menu.Open = &Odpri Menu.Open = &Odpri
Menu.OpenAll = O&dpri mapo »All users« Menu.OpenAll = O&dpri mapo »All users«
Menu.OpenPinned = Odpri »Pinned«
Menu.Explore = R&azišči Menu.Explore = R&azišči
Menu.ExploreAll = &Razišči mapo »All users« Menu.ExploreAll = &Razišči mapo »All users«
Menu.MenuSettings = Nastavitve Menu.MenuSettings = Nastavitve
@@ -4588,6 +4620,7 @@ Menu.SearchPeople = &Za osobe...
Menu.SortByName = &Sortiraj po imenu Menu.SortByName = &Sortiraj po imenu
Menu.Open = &Otvori Menu.Open = &Otvori
Menu.OpenAll = O&tvori sve korisnike Menu.OpenAll = O&tvori sve korisnike
Menu.OpenPinned = Otvori dodato
Menu.Explore = &Istraži Menu.Explore = &Istraži
Menu.ExploreAll = Istraži sve &korisnike Menu.ExploreAll = Istraži sve &korisnike
Menu.MenuSettings = Postavke Menu.MenuSettings = Postavke
@@ -4724,6 +4757,7 @@ Menu.SearchPeople = Efter &personer...
Menu.SortByName = Sortera efter &namn Menu.SortByName = Sortera efter &namn
Menu.Open = &Öppna Menu.Open = &Öppna
Menu.OpenAll = Öppna &delade Start-menyn Menu.OpenAll = Öppna &delade Start-menyn
Menu.OpenPinned = Öppna fästa objekt
Menu.Explore = &Utforska Menu.Explore = &Utforska
Menu.ExploreAll = Utf&orska delade Start-menyn Menu.ExploreAll = Utf&orska delade Start-menyn
Menu.MenuSettings = Inställningar Menu.MenuSettings = Inställningar
@@ -4861,6 +4895,7 @@ Menu.SearchPeople = สำหรับ&บุคคล...
Menu.SortByName = เรียงลำดั&บตามชื่อ Menu.SortByName = เรียงลำดั&บตามชื่อ
Menu.Open = เ&ปิด Menu.Open = เ&ปิด
Menu.OpenAll = &เปิดโฟลเดอร์ All Users Menu.OpenAll = &เปิดโฟลเดอร์ All Users
Menu.OpenPinned = เ&ปิด Pinned
Menu.Explore = สำรว&จ Menu.Explore = สำรว&จ
Menu.ExploreAll = &สำรวจโฟลเดอร์ All Users Menu.ExploreAll = &สำรวจโฟลเดอร์ All Users
Menu.MenuSettings = การตั้งค่า Menu.MenuSettings = การตั้งค่า
@@ -4997,6 +5032,7 @@ Menu.SearchPeople = &Kişiler...
Menu.SortByName = A&da Göre Sırala Menu.SortByName = A&da Göre Sırala
Menu.Open = &Aç Menu.Open = &Aç
Menu.OpenAll = Tü&m Kullanıcıları Menu.OpenAll = Tü&m Kullanıcıları
Menu.OpenPinned = Sabitlenmiş öğeleri Aç
Menu.Explore = A&raştır Menu.Explore = A&raştır
Menu.ExploreAll = &Tüm Kullanıcıları Araştır Menu.ExploreAll = &Tüm Kullanıcıları Araştır
Menu.MenuSettings = Ayarlar Menu.MenuSettings = Ayarlar
@@ -5133,6 +5169,7 @@ Menu.SearchPeople = Л&юдей...
Menu.SortByName = Сортувати за &іменем Menu.SortByName = Сортувати за &іменем
Menu.Open = &Відкрити Menu.Open = &Відкрити
Menu.OpenAll = В&ідкрити спільне для всіх меню Menu.OpenAll = В&ідкрити спільне для всіх меню
Menu.OpenPinned = Open Pinned
Menu.Explore = &Провідник Menu.Explore = &Провідник
Menu.ExploreAll = Пр&овідник до спільного для всіх меню Menu.ExploreAll = Пр&овідник до спільного для всіх меню
Menu.MenuSettings = Настройки Menu.MenuSettings = Настройки
@@ -5269,6 +5306,7 @@ Menu.SearchPeople = 个人(&P)...
Menu.SortByName = 按名称排序(&B) Menu.SortByName = 按名称排序(&B)
Menu.Open = 打开(&O) Menu.Open = 打开(&O)
Menu.OpenAll = 打开所有用户(&P) Menu.OpenAll = 打开所有用户(&P)
Menu.OpenPinned = Open Pinned
Menu.Explore = 浏览(&E) Menu.Explore = 浏览(&E)
Menu.ExploreAll = 浏览所有用户(&X) Menu.ExploreAll = 浏览所有用户(&X)
Menu.MenuSettings = 设置 Menu.MenuSettings = 设置
@@ -5405,6 +5443,7 @@ Menu.SearchPeople = 人員(&P)...
Menu.SortByName = 依名稱排序(&B) Menu.SortByName = 依名稱排序(&B)
Menu.Open = 開啟(&O) Menu.Open = 開啟(&O)
Menu.OpenAll = 開啟所有使用者(&P) Menu.OpenAll = 開啟所有使用者(&P)
Menu.OpenPinned = Open Pinned
Menu.Explore = 檔案總管(&E) Menu.Explore = 檔案總管(&E)
Menu.ExploreAll = 瀏覽所有使用者(&X) Menu.ExploreAll = 瀏覽所有使用者(&X)
Menu.MenuSettings = 設定 Menu.MenuSettings = 設定
@@ -5541,6 +5580,7 @@ Menu.SearchPeople = 人員(&P)...
Menu.SortByName = 依名稱排序(&B) Menu.SortByName = 依名稱排序(&B)
Menu.Open = 開啟(&O) Menu.Open = 開啟(&O)
Menu.OpenAll = 開啟所有使用者(&P) Menu.OpenAll = 開啟所有使用者(&P)
Menu.OpenPinned = Open Pinned
Menu.Explore = 檔案總管(&E) Menu.Explore = 檔案總管(&E)
Menu.ExploreAll = 瀏覽所有使用者(&X) Menu.ExploreAll = 瀏覽所有使用者(&X)
Menu.MenuSettings = 設定 Menu.MenuSettings = 設定

View File

@@ -21,5 +21,5 @@ deploy:
on: on:
APPVEYOR_ACCOUNT_NAME: passionate-coder APPVEYOR_ACCOUNT_NAME: passionate-coder
auth_token: auth_token:
secure: D0QZnRZfea3qJlWOwrxE6M2jrbiSrOfz/6U7RzdeeG8N0qNDFKI7LFjYyw2I/PcR secure: SOu6Y71k0oIxXJR35x+7ZeU/+WRW8kaGnCWcbR3OVOd8HeCJwB1Tw3hUJa5EveLGKaGoMKGqAh01Pwc8tWX4xmphZsYYUr09IVjA0+rqgN5VT87CXD6OQxUxBJ7g+9IN
prerelease: true prerelease: true