「検索コントロール パネル」にテキストを入力すると、コントロール ペナルティの設定が表示されることがわかりました。
だから私は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コントロールパネルですべての設定を列挙する方法はありますか?