1. Пользуйтесь тегами кода. - [code] ... [/code] 2. Точно указывайте язык, название и версию компилятора (интерпретатора). 3. Название темы должно быть информативным. В описании темы указываем язык!!!
Здравствуйте! Мне требуется реализовать программу, считывающую из системного реестра данные об установленных в операционной системе принтерах (для рабочей станции в целом и для каждого профиля пользователя). Информацию о принтерах выводить в файл (с помощью асинхронных файловых операций).
Итак..Прежде всего мне не ясно, как добраться до этой информации?? С помощью операции RegOpenKey открыть корневой ключ HKEY_USERS (случай для каждого профиля пользователя)? А как после добраться до нужной информации? И вообще, я хотя бы в том направлении думаю? И как быть со случаем "для рабочей станции"? Объясните пожалуйста!
HKEY keyID = 0; LONG L = RegOpenKeyExW( HKEY_LOCAL_MACHINE, L"software\\microsoft\\windows NT\\CurrentVersion\\ProfileList", 0, KEY_ALL_ACCESS, &keyID); for (int i = 0;; ++i) { wchar_t IDname[256] = {0}; LONG ret = RegEnumKeyW(keyID, i, IDname, 256); if (ret != ERROR_SUCCESS) { break; // Все, больше подпапок нет, выходим из цикла перечисления пользователей } Memo1->Lines->Add(String("IDname = ") + IDname);
wchar_t reg_path[1024] = {0}; HKEY usrDevID = 0; wsprintfW(reg_path, L"%s\\software\\microsoft\\windows NT\\CurrentVersion\\Devices", IDname); LONG L1 = RegOpenKeyExW(HKEY_USERS, reg_path, 0, KEY_ALL_ACCESS, &usrDevID); // а теперь читаем все принтеры пользователя IDname for (int j = 0;; ++j) { wchar_t AValue[MAX_VALUE_LEN] = {0}; // #define MAX_VALUE_LEN 16383 DWORD nValue = MAX_VALUE_LEN; LONG vret = RegEnumValueW(usrDevID, j, AValue, &nValue, NULL, NULL, NULL, NULL); if (vret != ERROR_SUCCESS) { break; // Все, с очередным пользователем закончили } Memo1->Lines->Add(AValue); } // for j RegCloseKey(usrDevID);