список подключенных жестких дисков
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\IDE\название
смотрим, если там есть подветвь Control то диск подключен, если этой подветви нету - значит диск подключался ранее
смотрим, если там есть подветвь Control то диск подключен, если этой подветви нету - значит диск подключался ранее
Спасибо)) а как можно определить сушествует ветвь или нет?? спомошью каких функций??
//ok
}
в общем у вас должно получиться что-то вроде:
Reg->RootKey = HKEY_LOCAL_MACHINE;
TStringList *list = new TStringList();
TStringList *list2 = new TStringList();
AnsiString put = "\\SYSTEM\\CurrentControlSet\\Enum\\IDE";
AnsiString clas = "";
//.....
Reg->OpenKeyReadOnly(put); //открываем ветку
Reg->GetKeyNames(list); //получаем все подветки
for(int i=0; i < list->Count; i++){ //проходимся по подветкам
put = put+"\\"+list->Strings;
Reg->OpenKeyReadOnly(put);
Reg->GetKeyNames(list2); //получаем все под-подветки
for(int j=0; j < list2->Count; j++){
Reg->OpenKeyReadOnly(put + "\\" + list2->Strings[j]);
clas = Reg->ReadString("Class"); //считываем класс устройства
if(clas == "DiskDrive") //если это жестяк
if (Reg->KeyExists("Control")){ //проверочка на Control
//АГА! Есть.
//получили название жестяка
ShowMessage(list->Strings);
}
}
}
Reg->CloseKey();
delete Reg;
delete list;
delete list2;
написал по памяти, не компилировал
не думаю что инфа об оперативке содержится в реестре!
Скорее она достается через APIшные функциии из зарезирвированной памяти устройств.
Про COM не в курсе.
Информация о всех устройствах хранится в реестре. В том числе и о размере оперативной памяти, частоте процессора и т.п. И именно оттуда ряд функций возвращают указанные значение. Обращения непосредственно к устройствам в современной архитектуре ОС - достаточно затратно (и осуществляется на уровне ядра)- и поэтому данные операции стараются минимизировать. Обращения же к реестру таких затрат не требует и доступно для пользовательского уровня.
Топикстартеру - еще одно нарушение - и вы получите бан.
Тема закрыта.