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