Есть 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, но получится слишком громостко. Может есть лучший способ?
vg можно GetLogicalDrives юзать проверяшь биты EAX (сушествует драйв или нет) потом GetDriveType или вообще CreateFile('\\.\x:"... x - буква драйва.
В CreateFile параметр dwDesiredAccess в 0 - определяет запрос о доступности объекта на указанном устройстве. Т.о. можно запросить атрибуты устройства без обращения к нему.
Насколько я понимаю, через GetLogicalDrives я получу только количество дисков, а мне нужны также строки с их именами для добавления в Combobox. Или я неправ? На счёт CreateFile. Подразумевается перебор всех возможных драйвов? Если да, то вопрос немного в сторону. Кто-нибудь знает точно, сколько разделов может быть в винде? Количество букв в английском алфавите? Может у кого-то есть «кусочек» кода по данной теме?
Вряд ли он лучше, но работает: Код (Text): DWORD drv=GetLogicalDrives(); TCHAR drv_name[]=_T("A:\\"); for (int i=0;i<26;++i) { if (drv&1) { drv_name[0]=_T('A')+i; if(GetDriveType(drv_name)==DRIVE_FIXED) { //это жесткий диск } } drv>>=1; }
Чего ж тут громоздкого? Код (Text): void AddItem(LPCSTR pszDrive){ puts(pszDrive); } int main() { char buf[1024]; unsigned drives = 0, cb = GetLogicalDriveStrings(sizeof(buf), buf); // if(cb > sizeof(buf)) return -1; LPCSTR p = buf; while(cb){ AddItem(p); unsigned l = strlen(p) + 1; cb -= l, p += l, drives++; } printf("%d drives\n",drives); return 0; }
vg См. сообщение от mr_Infern0. А количество разделов в винде теоретически ограничено кол-вом букв в алфавите. 26, кажется...