IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

> Считывание данных из системного реестра, VC++ 2008 EE
сообщение
Сообщение #1


Профи
****

Группа: Пользователи
Сообщений: 920
Пол: Женский
Реальное имя: Марина

Репутация: -  2  +


Здравствуйте!
Мне требуется реализовать программу, считывающую из системного реестра данные об установленных в операционной системе принтерах (для рабочей станции в целом и для каждого профиля пользователя). Информацию о принтерах выводить в файл (с помощью асинхронных файловых операций).

Итак..Прежде всего мне не ясно, как добраться до этой информации??
С помощью операции RegOpenKey открыть корневой ключ HKEY_USERS (случай для каждого профиля пользователя)? А как после добраться до нужной информации? И вообще, я хотя бы в том направлении думаю? И как быть со случаем "для рабочей станции"?
Объясните пожалуйста!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Гость






Для начала - в HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList лежит список пользователей (подпапки данного ключа), так что для начала надо открыть указанный ключ через RegOpenKeyEx, для него сделать перечисление всех дочерних веток с сипользованием RegEnumKey, в результате ты по поочередно получаешь ID пользователей, зарегистрированных в системе. А уж как получила ID - то открывать "HKEY_USERS\\" + ID + "\\Software\Microsoft\Windows NT\CurrentVersion\Devices" (здесь хранится список принтеров для каждого конкретного пользователя) и получать всю информацию, записанную там через RegEnumValue... То есть, будет что-то типа:

HKEY keyID = 0;
RegOpenKeyEx(
HKEY_LOCAL_MACHINE, L"software\\microsoft\\windows NT\\CurrentVersion\\ProfileList",
0, KEY_ALL_ACCESS, &keyID
);
for (int i = 0;; ++i) {
wchar_t IDname[256] = {};
LONG ret = RegEnumKey(keyID, i, IDname, 256);
if (ret != ERROR_SUCCESS) {
break; // Все, больше подпапок нет, выходим из цикла перечисления пользователей
}

// Здесь для каждого IDname открываешь его ветку HKU\...\Devices, и перечисляешь принтеры
// то есть, добавляется еще один цикл

} // всё, пользователи перечислены, выходим
RegCloseKey (IDkey); // и закрываем ключ реестра

(проверить не могу, я не под Windows сейчас...)

Это все было для пользователей... Для системы в целом - достаточно подобным же образом получить подпапки ключа HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Print\Printers
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Профи
****

Группа: Пользователи
Сообщений: 920
Пол: Женский
Реальное имя: Марина

Репутация: -  2  +


Цитата(volvo @ 21.11.2008 14:27) *


// Здесь для каждого IDname открываешь его ветку HKU\...\Devices, и перечисляешь принтеры




HKEY keyUs = 0;
//RegOpenKeyEx(HKEY_USER,L"software\\microsoft\\windows NT\\CurrentVersion//\\Devices",0,KEY_ALL_ACCESS,&keyUs);
// а как сюда привязать IDname (ведь в путь я должна поставить, то что содержится в IDname...)




Сообщение отредактировано: 18192123 -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
18192123   Считывание данных из системного реестра   21.11.2008 16:26
volvo   Для начала - в HKEY_LOCAL_MACHINE\SOFTWARE…   21.11.2008 18:27
18192123   [code=cpp] // Здесь для каждого IDname открывае…   21.11.2008 23:07
volvo   wchar_t reg_path[1024] = {0}; wsprintfW(reg_path…   21.11.2008 23:37
18192123   wsprintfW(reg_path, L"HKL_USERS\…   22.11.2008 0:23
volvo   Я же говорю, все пишется прямо тут, без проверки..…   22.11.2008 0:57
18192123   wchar_t reg_path[1024] = {0}; wsprintfW(reg_path,…   22.11.2008 1:28
volvo   Это какому IDname соответствует? А в реестре смотр…   22.11.2008 1:33
18192123   Это какому IDname соответствует? А в реестре смот…   22.11.2008 1:47
18192123   Вроде разобралась... for (int j = 0;; ++j) { wc…   22.11.2008 2:21
volvo   Да, вот я проверил в WinXP под Builder-ом: HKEY …   22.11.2008 3:03
18192123   Спасибо!! У меня тоже всё перечисляется…   22.11.2008 6:18
volvo   Во-первых, чтобы корректно прочесть Блокнотом то, …   22.11.2008 7:31
18192123   Во-первых, чтобы корректно прочесть Блокнотом то,…   22.11.2008 17:33
volvo   Непонятно... Единственное, что можно предположить …   22.11.2008 19:11
18192123   Непонятно... Единственное, что можно предположить…   23.11.2008 2:40
volvo   Не знаю, что там творит VC, Билдер отрабатывает пр…   23.11.2008 3:30
18192123   Ура! Отработало, ничего лишнего, на новую стро…   23.11.2008 7:10
volvo   Похоже на то... Ну, мало ли, какие настройки могу…   23.11.2008 7:43


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 29.04.2024 21:18
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name