Здравствуйте, sagir1000.
Надеюсь, простые программы писать в c++ builder-е умеете?
Если да, то есть чудесная ShellApi-функция: SHBrowseForFolder, которая выдаёт список папок в своём готовом окошке, при определённых флагах вроде бы можно сделать так, чтобы можно было выбрать диск. В обычном состоянии сразу в окне содержит дерево с дисками.
В приложении добавлю функцию с коллбаком, которая открывается прям на заданной папке.
Приложение:
BOOL BrowseForFolder(TCHAR *pszPath, HWND hWnd)
{
BROWSEINFO bi;
LPITEMIDLIST pil;
bi.hwndOwner = hWnd;// это "хозяин" окна, окно будет модально по отношению к нему; может быть NULL
bi.pidlRoot = NULL;
bi.pszDisplayName = pszPath;
bi.lpszTitle = "";//"Select destination directory";
bi.ulFlags = BIF_RETURNONLYFSDIRS;
bi.lpfn = BrowsePathProc;
bi.iImage = 0;
bi.lParam = (long)pszPath;
pil = SHBrowseForFolder(&bi);
if(pil)
{
SHGetPathFromIDList(pil, pszPath);
return TRUE;
}
return FALSE;
}
/// callbak for folder_browser
INT CALLBACK BrowsePathProc(HWND hwnd, UINT uMsg, LPARAM lp, LPARAM pData)
{ TCHAR szDir[MAX_PATH];
static HWND hTitle;
switch(uMsg)
{
case BFFM_INITIALIZED:
if(((char*)pData)[strlen((char*)pData)-1]=='\\')
strrchr((char*)pData,'\\')[0]=0;
SendMessage(hwnd, BFFM_SETSELECTION, TRUE, pData);
break;
case BFFM_SELCHANGED:
if (SHGetPathFromIDList((LPITEMIDLIST) lp ,szDir))
{
SendMessage(hwnd,BFFM_SETSTATUSTEXT,0,(LPARAM)szDir);
}
break;
}
return 0;
}