OSDN Git Service

ShellExtension: Attempt to fix crash on Win7 when doing the operation below:
authorTakashi Sawanaka <sdottaka@users.sourceforge.net>
Wed, 3 May 2017 06:11:43 +0000 (15:11 +0900)
committerTakashi Sawanaka <sdottaka@users.sourceforge.net>
Wed, 3 May 2017 06:11:43 +0000 (15:11 +0900)
1. Press Windows key
2. Enter "cmd"
3. Press Ctrl+Shift+Enter key

ShellExtension/StdAfx.h
ShellExtension/WinMergeShell.cpp

index 8e36365..43bc342 100644 (file)
@@ -11,7 +11,7 @@
 
 #define STRICT
 #ifndef _WIN32_WINNT
-#define _WIN32_WINNT 0x0403
+#define _WIN32_WINNT 0x0501
 #endif
 #define _ATL_APARTMENT_THREADED
 
index 6eee1d0..9c3b291 100644 (file)
@@ -100,6 +100,20 @@ enum
 
 static String GetResourceString(UINT resourceID);
 
+bool IsWindowsVistaOrGreater()
+{
+       OSVERSIONINFO ovi = { sizeof OSVERSIONINFO };
+       GetVersionEx(&ovi);
+       return (ovi.dwMajorVersion >= 6);
+}
+
+bool IsWindows8OrGreater()
+{
+       OSVERSIONINFO ovi = { sizeof OSVERSIONINFO };
+       GetVersionEx(&ovi);
+       return (ovi.dwMajorVersion >= 6 && ovi.dwMinorVersion >= 2);
+}
+
 class CWinMergeTempLocale
 {
 private:
@@ -116,13 +130,15 @@ public:
                int iLangId = reg.ReadDword(f_LanguageId, (DWORD)-1);
                if (iLangId != -1)
                {
-                       SetThreadUILanguage(iLangId);
+                       if (!IsWindowsVistaOrGreater())
+                               SetThreadUILanguage(iLangId);
                        SetThreadLocale(MAKELCID(iLangId, SORT_DEFAULT));
                }
        }
        ~CWinMergeTempLocale()
        {
-               SetThreadUILanguage(LANGIDFROMLCID(m_lcidOld));
+               if (!IsWindowsVistaOrGreater())
+                       SetThreadUILanguage(LANGIDFROMLCID(m_lcidOld));
                SetThreadLocale(m_lcidOld);
        }
 };
@@ -638,7 +654,7 @@ String CWinMergeShell::GetHelpText(UINT_PTR idCmd)
 
                case MENU_ONESEL_PREV:
                        strHelp = GetResourceString(IDS_HELP_COMPARESAVED);
-                       string_replace(strHelp, _T("%1"), m_strPreviousPath);
+                       strutils::replace(strHelp, _T("%1"), m_strPreviousPath);
                        break;
 
                case MENU_TWOSEL: