Нужно написать аналог утилиты regedit для работы с реестром Windows для курсовой на c++, можно и на c#. Хотелось бы уточнить, насколько вообще это задание сложное? Какие библиотеки можно использовать для этого? С помощью каких компонентов можно создать такой графический интерфейс (дерево каталогов и т.п.)?
Это Windows программа в самой простейшей вариации. В главном окне - вертикальный сплиттер, в левой панели дерево (tree control), в правой панели список (list control). Графическое оформление легко исполняется даже на чистом WinAPI, с любым фреймворком вообще без труда. Пожалуй, проще всего будет Visual C++ и MFC - в шаблонах MFC проектов есть 'Explorer', который создает это приложение полностью, останется только добавить конкретное наполнение (то есть работу с реестром). Для работы с реестром можно использовать класс CRegKey.
ДОПОЛНЕНИЕ
Выше произошел долгий спор на тему того, нужно ли асинхронно читать реестр для последующего отображения в treectrl и listctrl. Я считаю такую оптимизацию полной глупостью, и чтобы не быть голословным, решил написать небольшой тест, который читает основные ветки и сообщает затраченное время. Первоначальная версия с GetTickCount выдала все нули, так что пришлось переделывать ее на таймер высокого разрешения.
static double frequency;
void EnumReg(LPCTSTR szHiveName, HKEY hHive) {
LARGE_INTEGER tm0;
if (!::QueryPerformanceCounter(&tm0)) throw win_error();
TCHAR szName[MAX_PATH];
DWORD uNameLen;
DWORD nKeys = 0;
LONG lr;
for (;;) {
uNameLen = MAX_PATH;
lr = ::RegEnumKeyEx(hHive, nKeys++, szName, &uNameLen, NULL, NULL, NULL, NULL);
if (lr == ERROR_NO_MORE_ITEMS) break;
if (lr != ERROR_SUCCESS) throw win_error(lr);
}
LARGE_INTEGER elaps;
if (!::QueryPerformanceCounter(&elaps)) throw win_error();
elaps.QuadPart -= tm0.QuadPart;
double elapsed = (double)elaps.QuadPart;
elapsed *= 1.0e3; // We need milliseconds
elapsed /= frequency;
_tprintf(_TEXT("%s:\t%u subkeys, elapsed time %7.3fms\n"), szHiveName, nKeys, elapsed);
}
void main() {
try {
LARGE_INTEGER freq;
if (!::QueryPerformanceFrequency(&freq)) throw win_error();
frequency = (double)freq.QuadPart;
EnumReg(_TEXT("HKEY_LOCAL_MACHINE"), HKEY_LOCAL_MACHINE);
EnumReg(_TEXT("HKEY_CURRENT_USER"), HKEY_CURRENT_USER);
EnumReg(_TEXT("HKEY_CLASSES_ROOT"), HKEY_CLASSES_ROOT);
}
catch (generic_error &se) {
printf("\n\n");
printf(se.Message());
}
TCHAR pat[120];
printf("\nPress any key...");
_getts(pat);
}
В результате вышло следующее:
Отсюда очевидно, что время наполнения и обновления контрола будет минимум на порядок превышать время чтения реестра. Это если говорить о уникально огромной ветке HKCR. Для любого другого ключа время чтения будет составлять микросекунды, так что любые многопоточные оптимизации тут будут неуместными.
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости