2012-11-01 40 views
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)控制面板?

+0

您的32位进程正在模拟器WOW64中运行。使用64位进程。 –

+3

换句话说,如果您有Delphi XE2或XE3,请将您的Delphi目标从Win32更改为Win64。如果你还没有它,得到一个现代的32 + 64位德尔福版本。 –

+0

@DavidHeffernan我打算发表你所说的答案,但我发表了你的评论,你为什么不把它作为答案发布? – jachguate

回答

2

您需要将代码编译为64位进程才能看到64位控制面板项目。这需要XE2或更高版本。当我尝试在64位进程代码的输出结果如下:

 
NVIDIA nView Desktop Manager 
Power Options 
Notification Area Icons 
Taskbar and Start Menu 
Credential Manager 
Default Programs 
RemoteApp and Desktop Connections 
Windows Live Language Setting 
Windows Update 
Desktop Gadgets 
Windows Firewall 
Phone and Modem 
Speech Recognition 
User Accounts 
Region and Language 
HomeGroup 
Mouse 
Folder Options 
Keyboard 
Device Manager 
Windows CardSpace 
Performance Information and Tools 
Programs and Features 
Indexing Options 
Network and Sharing Center 
AutoPlay 
Sync Center 
Recovery 
Internet Options 
Devices and Printers 
Color Management 
Backup and Restore 
System 
Action Center 
Fonts 
Windows Anytime Upgrade 
Display 
Troubleshooting 
Getting Started 
Administrative Tools 
Ease of Access Center 
Windows Defender 
Date and Time 
Location and Other Sensors 
Personalization 
Sound 
Java (32-bit) 
DirectX 
Realtek HD Audio Manager 
BDE Administrator (32-bit) 
Advansys Formativ (32-bit) 
Mail (32-bit) 
Microsoft Mail Postoffice (32-bit) 
Flash Player (32-bit) 
NVIDIA Control Panel 

在32位进程输出是:

 
Java 
BDE Administrator 
Advansys Formativ 
Mail 
Microsoft Mail Postoffice 
Flash Player 

注意的是,64位进程列举了32个项目以及64位的项目。

相关问题