четверг, 13 ноября 2014 г.

Получение списка дисков ->Мой компьютер

Вариант №1
LPITEMIDLIST pidlMyComp;
if (::SHGetSpecialFolderLocation(Handle, CSIDL_DRIVES, &pidlMyComp) !=
NOERROR)
return;

LPSHELLFOLDER test;
::SHGetDesktopFolder(&test);
LPSHELLFOLDER psfParent;
test->BindToObject(pidlMyComp, NULL, IID_IShellFolder, (void**)
&psfParent);

LPENUMIDLIST pEnum;
psfParent->EnumObjects(NULL,
SHCONTF_FOLDERS |
SHCONTF_NONFOLDERS |
SHCONTF_INCLUDEHIDDEN,
&pEnum);

LPITEMIDLIST pidlTemp;
ULONG dwFetched;
STRRET ret;
while (pEnum->Next(1, &pidlTemp, &dwFetched) == NOERROR)
{
if (psfParent->GetDisplayNameOf(pidlTemp, SHGDN_NORMAL, &ret) ==
NOERROR)
ShowMessage(ret.pOleStr);
}

Вариант № 2
int n;
bool Flag;
DWORD dr = GetLogicalDrives();

for(int x=0;x<26;x++)
{
   n = ((dr>>x)&1);
   if(n)
   {
   String dl = String((char)(65+x));
   bool ready = DirectoryExists(dl+":\\");
   if (ready)
   {
    Memo1->Lines->Add(dl);
   }
   }
}

1 комментарий: