reactos/dll/win32/shell32/folders
Whindmar Saksit d41dec2e07
[SHELL32][CONTROL] Added basic IOpenControlPanel support (#6248)
Add a basic IOpenControlPanel implementation that supports Vista canonical registry names.

Implements `control.exe /name company.name [/page id]` and `IOpenControlPanel`
handling of Vista-style canonical registry names.

The documented `Microsoft.*` names don't work because they are simply not
in our registry but "[Executable Control Panel Items](https://learn.microsoft.com/en-us/windows/win32/shell/how-to-register-an-executable-control-panel-item-registration-)" registered by 3rd-party ISVs
will function correctly in control.exe and the COM API.

Notes:

- `IOpenControlPanel` is implemented in CControlPanelFolder.cpp because
  it is supposed to have tighter integration with that shell folder than
  it does in this PR.

- `IOpenControlPanel` is also supposed to handle .cpl files with canonical
  names registered under [`Extended Properties`](https://learn.microsoft.com/en-us/windows/win32/shell/how-to-register-dll-control-panel-item-registration-#step-3) but the control panel folder
  does not implement `IShellFolder2::GetDetailsEx` yet, so it will have to wait.

- These "Executable Control Panel Items" are also supposed to be displayed
  in the control panel itself but this PR does not address that. The
  `ITEMIDLIST` format for those needs investigation...

- The Wow64 handling is perhaps not correct but it does not matter,
  `ShellExecuteEx` gets to deal with whatever is in the `...\shell\open\command` key.
  `CControlPanelFolder` would have to take more care when it starts
  reading those keys so it knows when to append "(32-bit)" to the display name.

- `%s%s` because .cpl canonical names don't have the `::` prefix according
  to Geoff Chappell.

- Always returns `CPVIEW_CLASSIC` because our `CControlPanelFolder` does
  not support the category view.
2024-01-17 17:07:21 +01:00
..
CAdminToolsFolder.cpp [FORMATTING] Remove trailing whitespace. Addendum to 34593d93. 2021-09-13 03:52:22 +02:00
CAdminToolsFolder.h [SHELL] IPersistFolder::Initialize takes a PCIDLIST_ABSOLUTE. CORE-16385 2019-09-22 16:19:11 +02:00
CControlPanelFolder.cpp [SHELL32][CONTROL] Added basic IOpenControlPanel support (#6248) 2024-01-17 17:07:21 +01:00
CControlPanelFolder.h [SHELL32][CONTROL] Added basic IOpenControlPanel support (#6248) 2024-01-17 17:07:21 +01:00
CDesktopFolder.cpp [IEXPLORE][IEFRAME][SHELL32] Add Internet icon on Desktop (#5451) 2023-07-22 19:28:37 +09:00
CDesktopFolder.h Shell Folders: Reject invalid characters (#2328) 2020-02-12 09:18:24 +09:00
CDrivesFolder.cpp [SHELL32] CD-ROM drive shouldn't be renamed (#5461) 2023-07-20 16:53:04 +09:00
CDrivesFolder.h [SHELL] IPersistFolder::Initialize takes a PCIDLIST_ABSOLUTE. CORE-16385 2019-09-22 16:19:11 +02:00
CFontsFolder.cpp [FORMATTING] Remove trailing whitespace. Addendum to 34593d93. 2021-09-13 03:52:22 +02:00
CFontsFolder.h [SHELL] IPersistFolder::Initialize takes a PCIDLIST_ABSOLUTE. CORE-16385 2019-09-22 16:19:11 +02:00
CFSFolder.cpp [SHELL32][USER32] Fix icon regression and one test (#5207) 2023-05-21 11:18:00 +02:00
CFSFolder.h [FORMATTING] Remove trailing whitespace. Addendum to 34593d93. 2021-09-13 03:52:22 +02:00
CMyDocsFolder.cpp [SHELL32] CMyDocsFolder: Ensure the object can be used without calling Initialize 2020-04-20 17:36:44 +03:00
CMyDocsFolder.h [SHELL32] CMyDocsFolder: Ensure the object can be used without calling Initialize 2020-04-20 17:36:44 +03:00
CNetFolder.cpp [SDK][SHELL32] Augment the internally used IDataObject with some extra formats 2019-10-20 17:10:12 +02:00
CNetFolder.h [SHELL] IPersistFolder::Initialize takes a PCIDLIST_ABSOLUTE. CORE-16385 2019-09-22 16:19:11 +02:00
CPrinterFolder.cpp [SHELL32] CPrinterFolder: Validate string pointers properly. (#4486) 2022-05-05 16:24:38 +02:00
CPrinterFolder.h [SHELL] IPersistFolder::Initialize takes a PCIDLIST_ABSOLUTE. CORE-16385 2019-09-22 16:19:11 +02:00
CRecycleBin.cpp [SHELL32] Implement SHQueryRecycleBinW 2023-04-26 22:50:11 +02:00
CRecycleBin.h [SHELL] IShellExtInit::Initialize uses PCIDLIST_ABSOLUTE. CORE-16385 2019-09-29 12:09:02 +02:00
CRegFolder.cpp [SHELL32] RegFolder must correctly handle GetDisplayNameOf parsing paths (#6265) 2024-01-08 17:02:59 +01:00