1

I find when I type text in "Search Control Panel" , it can find out some control penal setting. enter image description here

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?

Ian Boyd
  • 246,734
  • 253
  • 869
  • 1,219
Hanlin
  • 835
  • 10
  • 26
  • 1
    Did you read registry, as suggested in MSDN in Registering CP applet section ? for example 2nd answer at http://stackoverflow.com/questions/1612665 – Arioch 'The Dec 21 '12 at 06:30
  • 1
    also http://stackoverflow.com/questions/5951440 http://stackoverflow.com/questions/2924209 – Arioch 'The Dec 21 '12 at 06:35

0 Answers0