Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > Как получить список дисков : [c][d][e].....


Автор: Dmitriy2k 6.4.2009, 16:42
Подскажите пожалуйста, как получить имена дисков: [a][c][d][e].... на компе.
пробовал так:
Код

.............................

LRESULT CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)
    {
        case WM_INITDIALOG:
//InitCommonControls();
static HWND hWndCombo;
hWndCombo=GetDlgItem(hDlg,IDC_COMBO1);
SendMessage(hWndCombo,CB_DIR,(WPARAM)DDL_DRIVES,NULL);
            
            return TRUE;

        case WM_COMMAND:break;
    }
    return FALSE;
}
.................................


я пытался их послать в ComboBox(который находится на диалоговом окне), но он пуст, и видимо мое сообщение :
SendMessage(hWndCombo,CB_DIR,(WPARAM)DDL_DRIVES,NULL);
не проходит?

Мне впринципе не очень важно, куда посылать список дисков, но хотелось бы лучше в ComboBox.

Автор: GremlinProg 6.4.2009, 17:07
если просто список, то есть функция GetLogicalDrives
она возвращает маску логических дисков:
первый бит маски - диск 'A'
второй бит маски - диск 'B'
третий - 'C'
и т.д.
Код

for( drive_letter = 'a' , mask = GetLogicalDrives() ; mask ; mask >>= 1 , ++drive_letter ){
  if(mask & 1){
    //  добавить строку с буквой drive_letter в комбо
  }
}

Автор: Dmitriy2k 6.4.2009, 22:26
GremlinProg: Спасибо, это даже в консоле работает!

Код

#include <windows.h>
#include <stdio.h>

int main(int argc, char* argv[])
{
    
 char drive_letter;
 int mask = GetLogicalDrives();
    
 for( drive_letter = 'a'; mask ; mask >>= 1 , ++drive_letter ){
       if(mask & 1){
             printf("%c ",drive_letter);
             //потом в винде добавлю в combo
       }
 }
    
 return 0;
}




Автор: HappyLife 6.4.2009, 22:40
You may also use GetLogicalDriveStrings. 
It fills a buffer with strings that specify valid drives in the system.
Код

DWORD WINAPI GetLogicalDriveStrings(
  __in   DWORD nBufferLength,
  __out  LPTSTR lpBuffer
);


where

Parameters

nBufferLength [in]
    The maximum size of the buffer pointed to by lpBuffer, in TCHARs. This size does not include the terminating null character. If this parameter is zero, lpBuffer is not used.
lpBuffer [out]
    A pointer to a buffer that receives a series of null-terminated strings, one for each valid drive in the system, plus with an additional null character. Each string is a device name.



Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)