I find when I type text in "Search Control Panel" , it can find out some control penal setting.
so I want to enumerate all the setting by windows shell or other way
var
psfDeskTop: IShellFolder;
psfControl: IShellFolder;
pidControl: PITEMIDLIST;
pidChild: PITEMIDLIST;
pidAbsolute: PItemIdList;
pEnumList: IEnumIDList;
celtFetched: ULONG;
FileInfo: SHFILEINFOW;
begin
OleCheck(SHGetDesktopFolder(psfDeskTop));
OleCheck(SHGetSpecialFolderLocation(0, CSIDL_CONTROLS, pidControl));
OleCheck(psfDeskTop.BindToObject(pidControl, nil, IID_IShellFolder, psfControl));
OleCheck(psfControl.EnumObjects(0, SHCONTF_NONFOLDERS or SHCONTF_INCLUDEHIDDEN or SHCONTF_FOLDERS, pEnumList));
while pEnumList.Next(1, pidChild, celtFetched) = 0 do
begin
pidAbsolute := ConcatPIDLs(pidControl, pidChild);
SHGetFileInfo(LPCTSTR(pidAbsolute), 0, FileInfo, SizeOf(FileInfo), SHGFI_PIDL
or SHGFI_DISPLAYNAME);
// SHGetFileInfo can get name and icon
//Do something to save item name and icon
end;
end;
this code can't get specific setting , just get all control panel items. so I find something call GodMode it can display all settings in control panel
Code :
var
psfDeskTop : ISHellFolder;
psfGodeMode : ISHellFolder;
pidGodMode : PITEMIDLIST;
pidAbsolute : PITEMIDLIST;
pidChild : PITEMIDLIST;
pEnumList : IEnumIDList;
cbEaten : ULONG;
dwAttribute : ULONG;
celtFetched: ULONG;
begin
SHGetDesktopFolder(psfDeskTop);
psfDeskTop.ParseDisplayName(0, nil,
'::{ED7BA470-8E54-465E-825C-99712043E01C}', cbEaten, pidGodMode,
dwAttribute);
psfDeskTop.BindToObject(pidGodMode, nil, IID_IShellFolder,
psfGodeMode);
//Get error in this line
psfGodeMode.EnumObjects(0, SHCONTF_NONFOLDERS or SHCONTF_FOLDERS,
pEnumList);
while pEnumList.Next(0, pidChild, celtFetched) = 0 do
begin
//....
end;
end;
but it doesn't work , so my question is : is there is a way to enumerate all setting in windows control panel?