Как добавить в combobox список разделов HDD?

Тема в разделе "WASM.WIN32", создана пользователем vg, 26 май 2007.

  1. vg

    vg New Member

    Публикаций:
    0
    Регистрация:
    16 апр 2007
    Сообщения:
    475
    Есть

    invoke CreateWindowEx,
    0,
    ADDR ComboboxClassName,
    NULL,
    WS_CHILD or WS_VISIBLE or CBS_DROPDOWNLIST,
    70,225,
    250,20,
    hwnd,
    0,
    hInstance,
    NULL
    mov logicaldrives,eax

    Нужно добавить в combobox список разделов HDD. Думаю, что можно через GetLogicalDriveStrings, но получится слишком громостко.
    Может есть лучший способ?
     
  2. mr_Infern0

    mr_Infern0 New Member

    Публикаций:
    0
    Регистрация:
    13 фев 2007
    Сообщения:
    52
    vg
    можно GetLogicalDrives юзать проверяшь биты EAX (сушествует драйв или нет) потом GetDriveType или
    вообще CreateFile('\\.\x:"... x - буква драйва.
     
  3. Zhelezovsky

    Zhelezovsky Member

    Публикаций:
    0
    Регистрация:
    24 окт 2006
    Сообщения:
    39
    В CreateFile параметр dwDesiredAccess в 0 - определяет запрос о доступности объекта на указанном устройстве. Т.о. можно запросить атрибуты устройства без обращения к нему.
     
  4. vg

    vg New Member

    Публикаций:
    0
    Регистрация:
    16 апр 2007
    Сообщения:
    475
    Насколько я понимаю, через GetLogicalDrives я получу только количество дисков, а мне нужны также строки с их именами для добавления в Combobox. Или я неправ?

    На счёт CreateFile. Подразумевается перебор всех возможных драйвов? Если да, то вопрос немного в сторону. Кто-нибудь знает точно, сколько разделов может быть в винде? Количество букв в английском алфавите?

    Может у кого-то есть «кусочек» кода по данной теме?
     
  5. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    GetLogicalDriveStrings
     
  6. roman_pro

    roman_pro New Member

    Публикаций:
    0
    Регистрация:
    9 фев 2007
    Сообщения:
    291
    Вряд ли он лучше, но работает:

    Код (Text):
    1. DWORD drv=GetLogicalDrives();
    2. TCHAR drv_name[]=_T("A:\\");
    3. for (int i=0;i<26;++i)
    4. {
    5.     if (drv&1)
    6.     {
    7.         drv_name[0]=_T('A')+i;
    8.         if(GetDriveType(drv_name)==DRIVE_FIXED)
    9.         {
    10.             //это жесткий диск
    11.         }
    12.     }
    13.     drv>>=1;
    14. }
     
  7. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Чего ж тут громоздкого?
    Код (Text):
    1. void AddItem(LPCSTR pszDrive){ puts(pszDrive); }
    2.  
    3. int main()
    4. {
    5.     char buf[1024];
    6.     unsigned drives = 0, cb = GetLogicalDriveStrings(sizeof(buf), buf); // if(cb > sizeof(buf)) return -1;
    7.  
    8.     LPCSTR p = buf;
    9.     while(cb){
    10.         AddItem(p);
    11.         unsigned l = strlen(p) + 1;
    12.         cb -= l, p += l, drives++;
    13.     }
    14.     printf("%d drives\n",drives);
    15.     return 0;
    16. }
     
  8. Zhelezovsky

    Zhelezovsky Member

    Публикаций:
    0
    Регистрация:
    24 окт 2006
    Сообщения:
    39
    vg

    См. сообщение от mr_Infern0.
    А количество разделов в винде теоретически ограничено кол-вом букв в алфавите. 26, кажется...
     
  9. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Вроде как на А и В нельзя повесить раздел без танцев.
     
  10. Zhelezovsky

    Zhelezovsky Member

    Публикаций:
    0
    Регистрация:
    24 окт 2006
    Сообщения:
    39
    IceStudent

    Ну да, это само собой.