1
我使用殼牌得到控制面板爲什麼無法獲取控制面板名稱?
代碼:
procedure TForm1.FormCreate(Sender: TObject);
var
psfDeskTop: IShellFolder;
psfWork: IShellFolder;
pidworkDir: PITEMIDLIST;
pidChild: PITEMIDLIST;
pEnumList: IEnumIDList;
celtFetched: ULONG;
FileInfo: SHFILEINFOW;
begin
Memo1.Clear;
SHGetDesktopFolder(psfDeskTop);
//control panel
SHGetSpecialFolderLocation(0, CSIDL_CONTROLS, pidworkDir);
psfDeskTop.BindToObject(pidworkDir, nil, IID_IShellFolder, psfWork);
psfWork.EnumObjects(0, SHCONTF_NONFOLDERS or SHCONTF_FOLDERS or SHCONTF_INCLUDEHIDDEN, pEnumList);
while pEnumList.Next(1, pidChild, celtFetched) = 0 do
begin
SHGetFileInfo(LPCTSTR(pidChild), 0, FileInfo, SizeOf(FileInfo), SHGFI_PIDL
or SHGFI_TYPENAME or SHGFI_DISPLAYNAME or SHGFI_USEFILEATTRIBUTES);
Memo1.Lines.Add(FileInfo.szDisplayName + ' +');
end;
end;
不能得到FileInfo.szDisplayName
,我只是用' +'
使Memo1 dispaly。 爲什麼無法獲取控制面板名稱?
那麼,第一步是添加錯誤檢查代碼。做到這一點,並以結果更新問題。 –
@DavidHeffernan如何在代碼中添加錯誤檢查? – Hanlin
閱讀每個API函數的文檔,並檢查文檔中描述的錯誤的返回值。在你檢查錯誤之前詢問這個問題是毫無意義的。 –