OSDN Git Service

Shell Extension for Windows 11 or later (5)
authorTakashi Sawanaka <sdottaka@users.sourceforge.net>
Thu, 16 Sep 2021 12:04:28 +0000 (21:04 +0900)
committerTakashi Sawanaka <sdottaka@users.sourceforge.net>
Thu, 16 Sep 2021 12:04:28 +0000 (21:04 +0900)
Src/Merge.vcxproj
Src/PropShell.cpp
Src/Win_VersionHelper.h
Src/res/WinMerge.exe.manifest
Translations/WinMerge/Dutch.po

index 806ddf1..26f609a 100644 (file)
       <MinimumRequiredVersion>5.01</MinimumRequiredVersion>\r
       <Profile>true</Profile>\r
     </Link>\r
+    <Manifest>\r
+      <AdditionalManifestFiles>res\WinMerge.exe.manifest</AdditionalManifestFiles>\r
+    </Manifest>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
     <Midl>\r
       <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
       <Profile>true</Profile>\r
     </Link>\r
+    <Manifest>\r
+      <AdditionalManifestFiles>res\WinMerge.exe.manifest</AdditionalManifestFiles>\r
+    </Manifest>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">\r
     <Midl>\r
       <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
       <Profile>true</Profile>\r
     </Link>\r
+    <Manifest>\r
+      <AdditionalManifestFiles>res\WinMerge.exe.manifest</AdditionalManifestFiles>\r
+    </Manifest>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
     <Midl>\r
       <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>\r
       <MinimumRequiredVersion>5.01</MinimumRequiredVersion>\r
     </Link>\r
+    <Manifest>\r
+      <AdditionalManifestFiles>res\WinMerge.exe.manifest</AdditionalManifestFiles>\r
+    </Manifest>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Test|Win32'">\r
     <Midl>\r
       <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>\r
       <MinimumRequiredVersion>5.01</MinimumRequiredVersion>\r
     </Link>\r
+    <Manifest>\r
+      <AdditionalManifestFiles>res\WinMerge.exe.manifest</AdditionalManifestFiles>\r
+    </Manifest>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
     <Midl>\r
       <Profile>false</Profile>\r
       <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>\r
     </Link>\r
+    <Manifest>\r
+      <AdditionalManifestFiles>res\WinMerge.exe.manifest</AdditionalManifestFiles>\r
+    </Manifest>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">\r
     <Midl>\r
       <Profile>false</Profile>\r
       <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>\r
     </Link>\r
+    <Manifest>\r
+      <AdditionalManifestFiles>res\WinMerge.exe.manifest</AdditionalManifestFiles>\r
+    </Manifest>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Test|x64'">\r
     <Midl>\r
       <Profile>false</Profile>\r
       <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>\r
     </Link>\r
+    <Manifest>\r
+      <AdditionalManifestFiles>res\WinMerge.exe.manifest</AdditionalManifestFiles>\r
+    </Manifest>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Test|ARM64'">\r
     <Midl>\r
       <Profile>false</Profile>\r
       <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>\r
     </Link>\r
+    <Manifest>\r
+      <AdditionalManifestFiles>res\WinMerge.exe.manifest</AdditionalManifestFiles>\r
+    </Manifest>\r
   </ItemDefinitionGroup>\r
   <ItemGroup>\r
     <ClCompile Include="..\Externals\gtest\src\gtest-all.cc">\r
index d15d697..a2fc9f4 100644 (file)
@@ -13,6 +13,7 @@
 #include "Constants.h"
 #include "Environment.h"
 #include "paths.h"
+#include "Win_VersionHelper.h"
 
 #ifdef _DEBUG
 #define new DEBUG_NEW
@@ -106,13 +107,6 @@ static bool RegisterShellExtension(bool unregister, bool peruser)
        }
 }
 
-PropShell::PropShell(COptionsMgr *optionsMgr) 
-: OptionsPanel(optionsMgr, PropShell::IDD)
-, m_bContextAdded(false)
-, m_bContextAdvanced(false)
-{
-}
-
 static bool RegisterWinMergeContextMenu(bool unregister)
 {
        String cmd;
@@ -137,6 +131,13 @@ static bool RegisterWinMergeContextMenu(bool unregister)
        return true;
 }
 
+PropShell::PropShell(COptionsMgr *optionsMgr) 
+: OptionsPanel(optionsMgr, PropShell::IDD)
+, m_bContextAdded(false)
+, m_bContextAdvanced(false)
+{
+}
+
 BOOL PropShell::OnInitDialog()
 {
        OptionsPanel::OnInitDialog();
@@ -294,13 +295,14 @@ void PropShell::UpdateButtons()
        bool registered = IsShellExtensionRegistered(false);
        bool registeredPerUser = IsShellExtensionRegistered(true);
        bool registerdWinMergeContextMenu = IsWinMergeContextMenuRegistered();
+       bool win11 = IsWin11_OrGreater();
        EnableDlgItem(IDC_EXPLORER_CONTEXT, registered || registeredPerUser || registerdWinMergeContextMenu);
        EnableDlgItem(IDC_REGISTER_SHELLEXTENSION, !registered);
        EnableDlgItem(IDC_UNREGISTER_SHELLEXTENSION, registered);
        EnableDlgItem(IDC_REGISTER_SHELLEXTENSION_PERUSER, !registeredPerUser);
        EnableDlgItem(IDC_UNREGISTER_SHELLEXTENSION_PERUSER, registeredPerUser);
-       EnableDlgItem(IDC_REGISTER_WINMERGECONTEXTMENU, !registerdWinMergeContextMenu);
-       EnableDlgItem(IDC_UNREGISTER_WINMERGECONTEXTMENU, registerdWinMergeContextMenu);
+       EnableDlgItem(IDC_REGISTER_WINMERGECONTEXTMENU, !registerdWinMergeContextMenu && win11);
+       EnableDlgItem(IDC_UNREGISTER_WINMERGECONTEXTMENU, registerdWinMergeContextMenu && win11);
        EnableDlgItem(IDC_EXPLORER_ADVANCED, 
                (registered || registeredPerUser || registerdWinMergeContextMenu) && IsDlgButtonChecked(IDC_EXPLORER_CONTEXT));
 }
index 10ffb94..72887a4 100644 (file)
 #include <windows.h>
 
 inline bool
-IsWinVer_OrGreater(WORD wVersion, WORD wServicePack = 0)
+IsWinVer_OrGreater(WORD wVersion, WORD wBuildNumber = 0)
 {
        DWORDLONG dwlConditionMask = 0; 
        VER_SET_CONDITION( dwlConditionMask, VER_MAJORVERSION, VER_GREATER_EQUAL );
        VER_SET_CONDITION( dwlConditionMask, VER_MINORVERSION, VER_GREATER_EQUAL );
-       VER_SET_CONDITION( dwlConditionMask, VER_SERVICEPACKMAJOR, VER_GREATER_EQUAL );
+       VER_SET_CONDITION( dwlConditionMask, VER_BUILDNUMBER, VER_GREATER_EQUAL );
 
-       OSVERSIONINFOEXW osvi;
-       ::ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX));
-       osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
+       OSVERSIONINFOEXW osvi{ sizeof(OSVERSIONINFOEX) };
        osvi.dwMajorVersion = HIBYTE(wVersion);
        osvi.dwMinorVersion = LOBYTE(wVersion);
-       osvi.wServicePackMajor = wServicePack;
+       osvi.dwBuildNumber = wBuildNumber;
 
-       return !!VerifyVersionInfoW(&osvi, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR, dwlConditionMask);
+       return !!VerifyVersionInfoW(&osvi, VER_MAJORVERSION | VER_MINORVERSION | VER_BUILDNUMBER, dwlConditionMask);
 }
 
+inline bool
+IsWin11_OrGreater()
+{
+       return IsWinVer_OrGreater( 0x0a00, 0 );
+}
 
 inline bool
 IsWin7_OrGreater()
index 601c58a..fa20920 100755 (executable)
@@ -2,7 +2,7 @@
 <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
        <assemblyIdentity
           version="1.0.0.0"
-          processorArchitecture="X86"
+          processorArchitecture="*"
           name="Microsoft.Winweb.WinMerge"
           type="win32"
        />
               type="win32"
               name="Microsoft.Windows.Common-Controls"
               version="6.0.0.0"
-              processorArchitecture="X86"
+              processorArchitecture="*"
               publicKeyToken="6595b64144ccf1df"
               language="*"
             />
           </dependentAssembly>
        </dependency>
-</assembly>
\ No newline at end of file
+
+       <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
+          <application>
+          <!-- Windows Vista   -->
+          <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/>
+          <!-- Windows 7   -->
+          <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
+          <!-- Windows 8   -->
+          <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
+          <!-- Windows 8.1 -->
+          <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
+          <!-- Windows 10  -->
+          <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/>
+          </application>
+       </compatibility>
+</assembly>
index 0de966d..4f54d25 100644 (file)
@@ -1,11 +1,11 @@
 # This file is part from WinMerge <https://winmerge.org/>
 # Released under the "GNU General Public License"
-# 
+#
 # Translators:
 # * Ronald Schaap <ronald at schaap.demon.nl>
 # * Michel Coene
 # Thomas De Rocker, 2021
-# 
+#
 msgid ""
 msgstr ""
 "Project-Id-Version: WinMerge\n"