![]() |
1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!
![]() ![]() |
![]() |
18192123 |
![]()
Сообщение
#1
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 920 Пол: Женский Реальное имя: Марина Репутация: ![]() ![]() ![]() |
Здравствуйте!
Мне требуется реализовать программу, считывающую из системного реестра данные об установленных в операционной системе принтерах (для рабочей станции в целом и для каждого профиля пользователя). Информацию о принтерах выводить в файл (с помощью асинхронных файловых операций). Итак..Прежде всего мне не ясно, как добраться до этой информации?? С помощью операции RegOpenKey открыть корневой ключ HKEY_USERS (случай для каждого профиля пользователя)? А как после добраться до нужной информации? И вообще, я хотя бы в том направлении думаю? И как быть со случаем "для рабочей станции"? Объясните пожалуйста! |
volvo |
![]()
Сообщение
#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;(проверить не могу, я не под Windows сейчас...) Это все было для пользователей... Для системы в целом - достаточно подобным же образом получить подпапки ключа HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Print\Printers |
18192123 |
![]()
Сообщение
#3
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 920 Пол: Женский Реальное имя: Марина Репутация: ![]() ![]() ![]() |
Сообщение отредактировано: 18192123 - 21.11.2008 19:08 |
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
Цитата а как сюда привязать IDname wchar_t reg_path[1024] = {0}; Сообщение отредактировано: volvo - 21.11.2008 19:37 |
18192123 |
![]()
Сообщение
#5
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 920 Пол: Женский Реальное имя: Марина Репутация: ![]() ![]() ![]() |
|
volvo |
![]()
Сообщение
#6
|
Гость ![]() |
Я же говорю, все пишется прямо тут, без проверки... Цикл обработки очередного пользователя должен быть наподобие:
wchar_t reg_path[1024] = {0}; |
18192123 |
![]()
Сообщение
#7
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 920 Пол: Женский Реальное имя: Марина Репутация: ![]() ![]() ![]() |
wchar_t reg_path[1024] = {0}; у меня на 1-м же шаге vret получается 259 (ERROR_NO_MORE_ITEMS)...Как это интерпретировать?? |
volvo |
![]()
Сообщение
#8
|
Гость ![]() |
Это какому IDname соответствует? А в реестре смотрела, там действительно что-то есть для этого пользователя в ветке HKEY_USERS? Если нету, то так и должно быть.
|
18192123 |
![]()
Сообщение
#9
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 920 Пол: Женский Реальное имя: Марина Репутация: ![]() ![]() ![]() |
Это какому IDname соответствует? А в реестре смотрела, там действительно что-то есть для этого пользователя в ветке HKEY_USERS? Если нету, то так и должно быть. для S-1-5-18 S-1-5-19 S-1-5-20 S-1-5-21-....................... Вообщем для всех пользователей...а в реестре не пусто.... Эскизы прикрепленных изображений ![]() |
18192123 |
![]()
Сообщение
#10
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 920 Пол: Женский Реальное имя: Марина Репутация: ![]() ![]() ![]() |
Вроде разобралась...
Сообщение отредактировано: 18192123 - 21.11.2008 22:22 |
volvo |
![]()
Сообщение
#11
|
Гость ![]() |
Да, вот я проверил в WinXP под Builder-ом:
, это точно работает, все принтеры перечисляются... Сообщение отредактировано: volvo - 21.11.2008 23:04 |
18192123 |
![]()
Сообщение
#12
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 920 Пол: Женский Реальное имя: Марина Репутация: ![]() ![]() ![]() |
Спасибо!! У меня тоже всё перечисляется!
Ещё возник вопрос с записью в файл..
по идее в создаваемый файл должны записаться профили пользователей... запись происходит..но в полном беспорядке...выводится только s-1- вместо s-1-5-18, тоже самое вместо s-1-5-19 и s-1-5-20, для профиля s-1-5-21-.. выводится почти половина.. Объясните пожалуйста, в чём дело?? |
volvo |
![]()
Сообщение
#13
|
Гость ![]() |
Во-первых, чтобы корректно прочесть Блокнотом то, что записывается через WriteFile, надо добавить:
DWORD CountBytes=0; Ну, а во-вторых, ты просто неправильно вычисляешь размеры записываемой строки. Надо вот так: WriteFile(hFile, &IDname, (wcslen(IDname) + 1) * sizeof(wchar_t), &CountBytes, NULL); |
18192123 |
![]()
Сообщение
#14
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 920 Пол: Женский Реальное имя: Марина Репутация: ![]() ![]() ![]() |
Во-первых, чтобы корректно прочесть Блокнотом то, что записывается через WriteFile, надо добавить:
Спасибо большое!! Теперь буду знать!) И ещё одна проблемка..По одному лишнему символу после каждого профиля пользователя (рис). Скажите пожалуйста, откуда они "берутся"?? Эскизы прикрепленных изображений ![]() |
volvo |
![]()
Сообщение
#15
|
Гость ![]() |
Цитата откуда они "берутся"?? Непонятно... Единственное, что можно предположить - это что можно попробовать убрать единицуWriteFile(hFile, &IDname, wcslen(IDname) * sizeof(wchar_t), &CountBytes, NULL);(хотя это нежелательно, все-таки завершающий ноль нужен), возможно Блокнот так реагирует на нулевые символы... Или ты пыталась добавить перевод строки? |
18192123 |
![]()
Сообщение
#16
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 920 Пол: Женский Реальное имя: Марина Репутация: ![]() ![]() ![]() |
Непонятно... Единственное, что можно предположить - это что можно попробовать убрать единицу WriteFile(hFile, &IDname, wcslen(IDname) * sizeof(wchar_t), &CountBytes, NULL);(хотя это нежелательно, все-таки завершающий ноль нужен), возможно Блокнот так реагирует на нулевые символы... Или ты пыталась добавить перевод строки? Пробовала убрать единицу - не помогло.. Кстати, о переводе строки..Я вот так попыталась:
Добавился ещё один лишний символ.. Как корректно произвести перевод на новую строчку? Скажите пожалуйста! |
volvo |
![]()
Сообщение
#17
|
Гость ![]() |
Не знаю, что там творит VC, Билдер отрабатывает прекрасно:
wchar_t IDnameHelp[256]={0};: ![]() , как видишь ничего лишнего не пишется... |
18192123 |
![]()
Сообщение
#18
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 920 Пол: Женский Реальное имя: Марина Репутация: ![]() ![]() ![]() |
Ура! Отработало, ничего лишнего, на новую строку переводит!) Спасибо!
Меня интересует ещё один момент..всё о том же системном реестре.. Итак, приложение получает ин-цию о принтерах из реестра и записывает в файл.. И мне сказано по заданию, что настройки этого приложения должны храниться в реестре, в ветке HKCU\Software.. Это означает, что мне в этой ветке нужно создавать свой ключ, а для него какие-то параметры? И если да, то о каких настройках приложения может идти речь? Объясните пожалуйста! |
volvo |
![]()
Сообщение
#19
|
Гость ![]() |
Цитата Это означает, что мне в этой ветке нужно создавать свой ключ, а для него какие-то параметры? Похоже на то...Цитата И если да, то о каких настройках приложения может идти речь? Ну, мало ли, какие настройки могут быть у программы... Например, путь, по которому был записан файл. Возможно, у тебя приложение может на выбор перечислять либо всех пользователей, либо только тех, кто не имеет административных прав (дополнительный чекбокс). И это может храниться в качестве настройки. Тут все ограничено только твоей фантазией...P.S. Если что - я не сторонник засорения реестра настройками.. Файл INI в папке, где установлено приложение, для этой цели подходит куда лучше... |
![]() ![]() |
![]() |
Текстовая версия | 24.07.2025 0:41 |