1
我使用壳牌得到控制面板如何在x64系统中获得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 := ILCombine(pidControl, pidChild);
SHGetFileInfo(LPCTSTR(pidAbsolute), 0, FileInfo, SizeOf(FileInfo), SHGFI_PIDL
or SHGFI_DISPLAYNAME);
Memo1.Add(FileInfo.szDisplayName);
end;
end;
它只能得到控制面板中的32位,如:BDE管理员(32位),Flash播放器(32位), 和我的操作系统是x64,我不知道如何获得所有(32bit & 64bit)控制面板?
您的32位进程正在模拟器WOW64中运行。使用64位进程。 –
换句话说,如果您有Delphi XE2或XE3,请将您的Delphi目标从Win32更改为Win64。如果你还没有它,得到一个现代的32 + 64位德尔福版本。 –
@DavidHeffernan我打算发表你所说的答案,但我发表了你的评论,你为什么不把它作为答案发布? – jachguate