From 5e6ff64ad70c47803286bb9c98e1d63b9e08371e Mon Sep 17 00:00:00 2001 From: Giannis Adamopoulos Date: Sun, 27 Sep 2015 11:31:52 +0000 Subject: [PATCH] [SHELL32] - Improve a change from r27016. Running the control panel applets in the context of explorer is not correct. We should really use ShellExecute here. svn path=/trunk/; revision=69370 --- .../dll/win32/shell32/folders/CControlPanelFolder.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/reactos/dll/win32/shell32/folders/CControlPanelFolder.cpp b/reactos/dll/win32/shell32/folders/CControlPanelFolder.cpp index df660b1a755..d40fae1532f 100644 --- a/reactos/dll/win32/shell32/folders/CControlPanelFolder.cpp +++ b/reactos/dll/win32/shell32/folders/CControlPanelFolder.cpp @@ -717,13 +717,15 @@ HRESULT WINAPI CCPLItemMenu::InvokeCommand(LPCMINVOKECOMMANDINFO lpcmi) if (lpcmi->lpVerb == MAKEINTRESOURCEA(IDS_OPEN)) //FIXME { + /* Hardcode the command here; Executing a cpl file would be fine but we also need to run things like console.dll */ WCHAR wszParams[MAX_PATH]; + PWSTR wszFile = L"rundll32.exe"; + PWSTR wszFormat = L"shell32.dll,Control_RunDLL %s,%s"; - wcscpy(wszParams, pCPanel->szName); - wcscat(wszParams, L","); - wcscat(wszParams, pCPanel->szName + pCPanel->offsDispName); + wsprintfW(wszParams, wszFormat, pCPanel->szName, pCPanel->szName + pCPanel->offsDispName); - Control_RunDLLW (NULL, NULL, wszParams, SW_NORMAL); + /* Note: we pass the applet name to Control_RunDLL to distinguish between multiple applets in one .cpl file */ + ShellExecuteW(NULL, NULL, wszFile, wszParams, NULL, 0); } else if (lpcmi->lpVerb == MAKEINTRESOURCEA(IDS_CREATELINK)) //FIXME {