mirror of
https://github.com/reactos/reactos.git
synced 2024-07-12 15:45:20 +00:00
![Whindmar Saksit](/assets/img/avatar_default.png)
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.
76 lines
1.3 KiB
Plaintext
76 lines
1.3 KiB
Plaintext
HKCR
|
|
{
|
|
NoRemove CLSID
|
|
{
|
|
ForceRemove {21EC2020-3AEA-1069-A2DD-08002B30309D} = s 'Control Panel'
|
|
{
|
|
val InfoTip = e '@%%SystemRoot%%\system32\SHELL32.dll,-31361'
|
|
val LocalizedString = e '@%%SystemRoot%%\system32\SHELL32.dll,-148'
|
|
DefaultIcon = e '%%SystemRoot%%\System32\shell32.dll,-137'
|
|
InprocServer32 = s '%MODULE%'
|
|
{
|
|
val ThreadingModel = s 'Apartment'
|
|
}
|
|
ShellFolder
|
|
{
|
|
val Attributes = d '&H00000000'
|
|
val HideAsDeletePerUser = s ''
|
|
val WantsFORDISPLAY = s ''
|
|
}
|
|
}
|
|
}
|
|
}
|
|
HKLM
|
|
{
|
|
NoRemove Software
|
|
{
|
|
NoRemove Microsoft
|
|
{
|
|
NoRemove Windows
|
|
{
|
|
NoRemove CurrentVersion
|
|
{
|
|
NoRemove Explorer
|
|
{
|
|
ControlPanel
|
|
{
|
|
NameSpace
|
|
{
|
|
}
|
|
}
|
|
NoRemove MyComputer
|
|
{
|
|
NoRemove NameSpace
|
|
{
|
|
Controls = s '{21EC2020-3AEA-1069-A2DD-08002B30309D}'
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
HKCR
|
|
{
|
|
NoRemove CLSID
|
|
{
|
|
ForceRemove {06622D85-6856-4460-8DE1-A81921B41C4B} = s 'COpenControlPanel'
|
|
{
|
|
val AppID = s '{06622D85-6856-4460-8DE1-A81921B41C4B}'
|
|
InprocServer32 = s '%MODULE%'
|
|
{
|
|
val ThreadingModel = s 'Apartment'
|
|
}
|
|
}
|
|
}
|
|
NoRemove AppID
|
|
{
|
|
ForceRemove {06622D85-6856-4460-8DE1-A81921B41C4B} = s 'COpenControlPanel'
|
|
{
|
|
val DllSurrogate = s ''
|
|
}
|
|
}
|
|
}
|