1

「検索コントロール パネル」にテキストを入力すると、コントロール ペナルティの設定が表示されることがわかりました。 ここに画像の説明を入力

だから私はWindowsシェルまたは他の方法ですべての設定を列挙したい

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;

このコードは特定の設定を取得できません。すべてのコントロール パネル項目を取得するだけです。コントロールパネルのすべての設定を表示できるGodModeと呼ばれるものを見つけました

コード :

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;

しかし、それは機能しないので、私の質問は次のとおりです。Windowsコントロールパネルですべての設定を列挙する方法はありますか?

4

0 に答える 0