[EXPLORER][SHELL32][SDK] Show/hide 'Run' menu item (#6592)
authorKatayama Hirofumi MZ <katayama.hirofumi.mz@gmail.com>
Mon, 11 Mar 2024 01:54:12 +0000 (10:54 +0900)
committerGitHub <noreply@github.com>
Mon, 11 Mar 2024 01:54:12 +0000 (10:54 +0900)
Improve Start Menu customization.
JIRA issue: CORE-16956
- Add SHSettingsChanged prototype to
  <undocshell.h>.
- Add SetRestriction helper function.
- Implement showing/hiding Run menu
  item of Start Menu.

base/shell/explorer/precomp.h
base/shell/explorer/startmnucust.cpp
base/shell/explorer/startmnusite.cpp
base/shell/explorer/util.cpp
dll/win32/shell32/dialogs/general.cpp
sdk/include/reactos/undocshell.h

index ad94ada..cc3f3d8 100644 (file)
@@ -110,6 +110,7 @@ BOOL GetRegValue(IN LPCWSTR pszSubKey, IN LPCWSTR pszValueName, IN BOOL bDefault
 BOOL SetRegDword(IN LPCWSTR pszSubKey, IN LPCWSTR pszValueName, IN DWORD dwValue);
 BOOL GetAdvancedBool(IN LPCWSTR pszValueName, IN BOOL bDefaultValue);
 BOOL SetAdvancedDword(IN LPCWSTR pszValueName, IN DWORD dwValue);
+BOOL SetRestriction(IN LPCWSTR pszKey, IN LPCWSTR pszValueName, IN DWORD dwValue);
 
 /*
  *  rshell.c
index b4465de..e09b8ea 100644 (file)
@@ -96,6 +96,17 @@ static BOOL CALLBACK CustomizeWrite0(const CUSTOMIZE_ENTRY *entry, DWORD dwValue
     return SetAdvancedDword(entry->name, dwValue);
 }
 
+static DWORD CALLBACK CustomizeReadRun(const CUSTOMIZE_ENTRY *entry)
+{
+    return !SHRestricted(REST_NORUN);
+}
+
+static BOOL CALLBACK CustomizeWriteRest(const CUSTOMIZE_ENTRY *entry, DWORD dwValue)
+{
+    SetRestriction(L"Explorer", entry->name, !dwValue);
+    return TRUE;
+}
+
 static const CUSTOMIZE_ENTRY s_CustomizeEntries[] =
 {
     // FIXME: Make "StartMenuAdminTools" effective
@@ -103,9 +114,7 @@ static const CUSTOMIZE_ENTRY s_CustomizeEntries[] =
 
     { IDS_ADVANCED_DISPLAY_FAVORITES,  L"StartMenuFavorites",  CustomizeRead0, CustomizeWrite0 },
     { IDS_ADVANCED_DISPLAY_LOG_OFF,    L"StartMenuLogoff",     CustomizeRead0, CustomizeWrite0 },
-
-    // FIXME: SHRestricted is buggy!
-    //{ IDS_ADVANCED_DISPLAY_RUN,        L"NoRun",               CustomizeRead2, CustomizeWrite2 },
+    { IDS_ADVANCED_DISPLAY_RUN,        L"NoRun",               CustomizeReadRun, CustomizeWriteRest },
 };
 
 static VOID AddCustomizeItem(HWND hTreeView, const CUSTOMIZE_ENTRY *entry)
index 5f52b43..99d8511 100644 (file)
@@ -216,9 +216,7 @@ public:
         /* Run */
         if (SHRestricted(REST_NORUN))
         {
-            DeleteMenu(hMenu,
-                       IDM_RUN,
-                       MF_BYCOMMAND);
+            DeleteMenu(hMenu, IDM_RUN, MF_BYCOMMAND);
         }
 
         /* Synchronize */
index f6824cc..51dbee0 100644 (file)
@@ -163,6 +163,15 @@ BOOL SetAdvancedDword(IN LPCWSTR pszValueName, IN DWORD dwValue)
     return SetRegDword(REGKEY_ADVANCED, pszValueName, dwValue);
 }
 
+BOOL SetRestriction(IN LPCWSTR pszKey, IN LPCWSTR pszValueName, IN DWORD dwValue)
+{
+    WCHAR szSubKey[MAX_PATH] = L"Software\\Microsoft\\Windows\\CurrentVersion\\Policies";
+    PathAppendW(szSubKey, pszKey);
+    SHSetValueW(HKEY_CURRENT_USER, szSubKey, pszValueName, REG_DWORD, &dwValue, sizeof(dwValue));
+    SHSettingsChanged(NULL, NULL);
+    return TRUE;
+}
+
 BOOL
 GetVersionInfoString(IN LPCWSTR szFileName,
                      IN LPCWSTR szVersionInfo,
index 9102c96..33e3e94 100644 (file)
@@ -34,9 +34,6 @@ typedef struct REGSHELLSTATE
 static const LPCWSTR s_pszExplorerKey =
     L"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer";
 
-extern "C"
-BOOL WINAPI SHSettingsChanged(LPCVOID unused, LPCVOID inpRegKey);
-
 /////////////////////////////////////////////////////////////////////////////
 // Shell settings
 
index 5d06898..8f18060 100644 (file)
@@ -49,14 +49,12 @@ typedef struct _TRAYNOTIFYDATAW
 
 #endif /* defined (_SHELLAPI_H) || defined (_INC_SHELLAPI) */
 
-
 /****************************************************************************
  * Taskbar WM_COMMAND identifiers
  */
 #define TWM_DOEXITWINDOWS (WM_USER + 342)
 #define TWM_CYCLEFOCUS (WM_USER + 348)
 
-
 /****************************************************************************
  *  IDList Functions
  */
@@ -96,7 +94,6 @@ HRESULT WINAPI SHILCreateFromPathW (
 BOOL WINAPI StrRetToStrNA(LPSTR,DWORD,LPSTRRET,const ITEMIDLIST*);
 BOOL WINAPI StrRetToStrNW(LPWSTR,DWORD,LPSTRRET,const ITEMIDLIST*);
 
-
 /****************************************************************************
  * SHChangeNotifyRegister API
  */
@@ -258,6 +255,7 @@ ExtractIconResInfoW(
 /****************************************************************************
  * File Menu Routines
  */
+
 /* FileMenu_Create nSelHeight constants */
 #define FM_DEFAULT_SELHEIGHT  -1
 #define FM_FULL_SELHEIGHT     0
@@ -732,6 +730,8 @@ Activate_RunDLL(
     _In_ LPCWSTR cmdline,
     _In_ INT cmdshow);
 
+BOOL WINAPI SHSettingsChanged(LPCVOID unused, LPCWSTR pszKey);
+
 /*****************************************************************************
  * Shell32 resources
  */