qtproject в реестре что это
QSettings: Просматриваем, создаем и удаляем записи в реестре Windows
В первую очередь обеспечим возможность просмотра содержимого реестра:
Далее обеспечим возможность добавления новых значений в открытую ветку (с помощью кнопки Создать ):
Наше приложение действительно сможет влиять на систему (поэтому будьте осторожны при тестировании примера):
Также мы сможем удалять записи, которые нам не нужны (по нажатию кнопки Удалить ):
Реализация
Заголовочный файл mainwidget.h :
Файл реализации mainwidget.cpp :
Просмотр реестра мы основываем на классе QSettings с его функциями-членами для доступа к группам ( childGroups() ) и к ключам для заданной группы ( childKeys() ). При этом QSettings инициализируется следующим образом:
При этом нам приходится обрабатывать сигнал разворачивания элемента дерева:
Поиск пути в реестре для некоторого элемента дерева происходит с помощью вспомогательной функции:
Обратите внимание, что вложенные элементы в пути реестра разделяются символами «\\» (например, HKEY_CURRENT_USER\\Environment ).
Чтение значений происходит при щелчке на элементе в дереве:
Обратите внимание, что для упрощения мы считываем все значения без учета их типа, как текст. Это может привести к появлению загадочных надписей в интерфейсе программы на неизвестных человечеству языках. Именно по этой причине я не добавил функцию редактирования значений в нашу программу.
Создание новой записи сводится к добавлению значения в текущую ветку реестра:
Запрос данных у пользователя осуществляем с помощью модального диалогового окна, описание которого здесь мы опускаем.
Удаление значения из реестра сводится реализуется не сложнее, чем добавление:
Пример работы с реестром Windows
Нужно сделать программу, которая показывает список программ из автозапуска! Просто даже не знаю с чего начать работу с реестром, изучаю Qt буквально пару недель, прошу помочь, напишите для примера не сложную програмку, которая показывает работу с реестром, заранее спасибо!
Желательно, что-то типа такого:
Класс TRegistry для работы с реестром Windows
Есть класс TRegistry для работы с реестром операционной системы Windows. И тут же возникает вопрос.
тонкости работы с реестром
есть програма которая по нажатию кнопки творит вот такое чудо void __fastcall.
DLL, функции работы с реестром
Недавно познакомился с DLL. Начал делать дллку. В ней должна быть функция работающая с реестром.
как это не прискорбно, но QSettings не умеет полноценно работать с реестром, где то в нете когда-то нарыл класс для полноценной работы с реестром в Win естественно он юзает WinAPI и ни о какой кроссплатформенности не может идти речи, хотя все что касается реестра не может быть кроссплатформенно
Примечания:
Все функции являются статическими и можно использовать их не создавая переменных класса.
В функцию regWrite можно передавать значения в типах: QByteArray, QString, Int.
Тип HKEY_LIST может принимать значения:
HK_CLASSES_ROOT
HK_CURRENT_USER
HK_LOCAL_MACHINE
HK_USERS
HK_CURRENT_CONFIG
Функции для получения и записи значений реестра:
static QString regReadString(HKEY_LIST,QString path, QString val); //Фукнция для чтения REG_SZ текстовой строки возвращающая QString
static QByteArray regReadArray(HKEY_LIST,QString path, QString val); //Фукнция для чтения REG_BINARY массивов возвращающая QByteArray
static int regReadInt(HKEY_LIST,QString path, QString val); //Фукнция для чтения REG_DWORD возвращающая Int
static bool regWrite(HKEY_LIST,QString path, QString val, QString data, bool createSubKeys=true); //Функция для записи значения из QString в REG_SZ, при флаге createSubKeys=true создаются все ветки если конечного ключа не существует
static bool regWrite(HKEY_LIST,QString path, QString val, QByteArray data, bool createSubKeys=true); //Функция для записи значения из QByteArray в REG_BINARY, флаг createSubKeys делает то что уже написано выше
static bool regWrite(HKEY_LIST,QString path, QString val, int data, bool createSubKeys=true); //Функция для записи значения из int в REG_DWORD, флаг createSubKeys делает то что уже написано выше
static bool regRemove(HKEY_LIST,QString path); //Удаление ключа path со всеми значениями. Удаление не произойдет если существуют подветки
static bool regRemove(HKEY_LIST,QString path, QString val); // Удаление значения val из ветки path
если удалось удалить ветку то обе функции возвратят true если нет то false
Системные функции:
static QString shellUserName(); //Возвращает Имя текущего пользователя
static QString shellComputerName(); //Возвращает Имя компьютера
static QString shellUserTemp(); //Возвращает путь временной папки пользователя
static QString shellSystemTemp(); //Возвращает системный путь временной папки
static QString shellWindowsDir(); //Возвращает путь к папке Windows
static void shellSetTempDir(QString); //Изменяет путь временной папки пользователя и системы на указанную
Пример записи в реестр:
JulyRegApi::regWrite(JulyRegApi::HK_LOCAL_MACHINE,»SOFTWARE\ \GigaSOFT\\SomeSoft»,»SomeKeyName»,QString(«Text writed there»));
в результате будет записано текст «Text writed there» в ключ «SomeKeyName» который находиться в ветке «HKEY_LOCAL_MACHINE\SOFTWARE\GigaSOFT\SomeSoft»
такой же формат записи в реестр для этой функции типов QByteArray и Int
Пример чтения из реестра:
QString myValue;
myValue=JulyRegApi::regReadString(JulyRegApi::HK_LOCAL_MACHI NE,»SOFTWARE\\GigaSOFT\\SomeSoft», «SomeKeyName»);
в результате myValue примет значение ключа «SomeKeyName» из ветки «SOFTWARE\\GigaSOFT\\SomeSoft»
если перед этим выполнить запись из примера выше то myValue==»Text writed there»;
Формат параметров для функций regReadArray и regReadInt такой же как и в этом примере regReadString но возвращают они другой тип QByteArray и Int соответственно.
kak.torange.ru
В файлах SYSTEM.DAT и USER.DAT в каталоге Windows 95/98 или в папке C:\W\System32\Config\ в Windows NT хранится так называемый системный реестр, содержащий большое количество информации. Кроме записей, необходимых Windows, большинство программ при установке записывают туда и свою собственную информацию. Чтобы внести изменения в реестр, необходимо открыть его с помощью программы, предназначенной для этого. Примером может служить программа REGEDIT, поставляемая в стандартном комплекте Windows. Для ее запуска откройте диалоговое окно Пуск/Выполнить, введите Regedit и нажмите OK.
Вы увидите окно, разделенное на две части. В левой находится навигатор, похожий на навигатор Проводника, а справа собственно информация. Реестр состоит из шести разделов: HKEY_CLASSES_ROOT, HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE, HKEY_USERS, HKEY_CURRENT_CONFIG и HKEY_DYN_DATA. В каждом разделе содержатся папки. Если в папке или разделе есть подпапки, то слева от этой папки находится значок «плюс«. При нажатии на него эта папка «разворачивается», а значок превращается в «минус«, нажав на который ее можно снова «свернуть«. Если же нажать на значок папки или ее название, то в правом окне появится список тех параметров, которые содержатся в этой папке (но не в подпапках!). Каждый параметр состоит из его имени и значения. Для каждого параметра существует свой путь, по которому его можно найти. Путь состоит из последовательности папок, в которых находится этот параметр, начиная с родительской папки (это один из шести вышеперечисленных основных разделов). Примером такого пути может быть HKEY_CURRENT_CONFIG\ Display\ Settings, а названием параметра Resolution. В объединении эти два значения — параметр и путь к нему (его часто называют адресом) указывают на уникальный параметр. Например, к двум различным параметрам может быть один и тот же путь, два параметра могут иметь одинаковые названия, но лежать в различных папках и подпапках, но не может существовать двух параметров с одинаковым адресом и именем. По реестру можно осуществлять поиск (используя меню, или сочетанием клавиш CTRL + F).
Выделив нужный раздел (нажав на значок раздела или его имя), в нем можно создать параметр, или подраздел. Для этого необходимо воспользоваться меню Правка/Создать. В системном реестре Windows существует 3 вида параметров: строковой, двоичный, и DWORD. В строковом хранится одна строка (string), в двоичном — двоичное значение, в DWORD — десятичное или шестнадцатеричное значение. При создании параметра необходимо указать его имя. Затем, дважды нажав на нем в правом окне, можно ввести значение параметра (или изменить существующее).
Если в совете сказано установить значение параметра, это значит, что необходимо изменить существующее значение параметра на нужное, или, если параметр с таким именем отсутствует, создать его, а затем изменить содержимое.
В конце работы для большинства изменений необходимо закрыть REGEDIT и перезагрузить компьютер.Ну, во-первых разберемся, что это такое: реестр Windows. Когда мы устанавливаем или удаляем программы, изменяем параметры Windows ставим новое оборудование, все это фиксируется и записывается в реестр. Можно сказать так, реестр — это сердце Windows. Чтобы посмотреть или отредактировать реестр надо запустить программу Regedit (Пуск — Выполнить — Regedit). Физически, реестор хранится в каталоге Windows (95/98) под именами User.dat и System.dat. Сразу говорю, если не знаете то, что хотите изменить на 100% не изменяйте, а иначе грош цена. Ну, а для тех кто все таки изменил даю подсказку. При удачной загрузке, Windows делает резервные копии реестра под именами User.da0 и System.da0. Этим и воспользуемся. Конечно можно создать свои резервные копии на всякий «пожарный». Если Windows не грузится, то при загрузке зажимаем Ctrl. Как появиться меню выбираем «Command prompt only«, переходим в папку Windows («CD C:\Windows») и наберите команду scanreg / restore (в Windowse NT — rdisk). Теперь перезагрузитесь и Windows должен запуститься. Если такой программы нет, то придется набирать в командной строке из папки Windows:
Ну, а теперь перейдем непосредственно к реестру.
1.)Откройте regedit, найдите ключ
Здесь Вы найдете полный список установленных программ. Если каких то программ уже нет, удалите ненужные папки с их названиями (неполный список отображается в «Панель управления — Установка и удаление программ»).
находится список всех запускающихся программ при загрузке Windows. Вы можете удалить ненужную программу, а можете и добавить. Для этого надо создать Строковый параметр, для имени надо ввести название программы, а в качестве значения параметра ввести путь к программе. Если на Вашем компьютере несколько пользователей, то списки программ могут быть здесь:
HKEY_USERS\.DEAFAULT\Software\Microsoft\Windows\CurrentVersion и
HKEY_USERS\(Имя пользователя)\Software\Microsoft\Windows\CurrentVersion
3.)Вот и все, разминка закончена, и мы переходим к Главному меню.
Чтобы избавиться от пункта Избранное (Windows 98), зайдите в раздел
и создайте здесь Двоичный параметр NoFavoritesMenu со значением 01 00 00 00. Все! Теперь пункт Избранное больше появляться не будет. Удалите созданный параметр или измените его значение на 00 00 00 00, чтобы вернуть пункт на место. Избавляться от других пунктов можно аналогично:
Документы — параметр NoRecentDocsMenu
Настройки — NoSetFolders
Найти — NoFind
Завершение работы — NoClose
Завершение сеанса… — NoLogOff.
Также можно отменить работу правой кнопкой мыши в главном меню, для этого создайте тамже DWORD-параметр под именем NoChangeStartMenu с значением 1. Готово! Ну и последние штрихи. Нравится сообщение о том, с какой кнопки следует начать работу? Нет? Тогда создаем DWORD-параметр с именем NoStartBanner и значением 1.
и создайте Строковый параметр LegalNoticeCaption. В качестве значения введите «Обнаружен вирус «Чернобыль»», создайте еще один строковый параметр LegalNoticeText с значением «Нажмите «Ок» и все данные на жестком диске будут уничтожены». Перезапустите Windows и наслаждайтесь результатом. В первом параметре вписываем заголовок, а во втором — сам текст.
5.)Теперь можно изменить часики в нижнем правом углу. Зайдите на
и создайте строковый параметр sTimeFormat
Его значение «HH:mm«, где HH — часы, : — разделительный знак, а mm — минуты. Для вступления в силу изменений необходима перезагрузка. Весело посмотреть как друг будет мучится настраивать часы если поменять местами HH и mm! Ну, а если хотите нагадить очень силно, тогда надо сделать так: Hm:mH’mH;Hm и тд.
6.)Чтобы не было в значках ярлыков стрелочек, найдите ключ HKEY_CLASSES_ROOT\Piffile и удалите параметр IsShortcut, тоже самое следует проделать в папке Lnkfile. Перезагрузите компьютер и наслаждайтесь результатом.
7.)Путь к инсталляционным файлам Windows 95/98 лежит в
Измените его и Windows будет искать установочные файлы при добавлении компонентов или изменении параметров системы.
8.)Чтобы убрать «ладошку» с зашареных ресурсов, достаточно удалить значении По умолчанию из ключа
9.)Еще Вы можете вообще убрать с рабочего стола все значки. Для этого создайте в ключе
DWORD-параметр с именем «NoDesktop«. Перезагрузитесь и увидете самый чистый в мире Рабочий стол.
10.)Для того, чтобы скрыть диски в проводнике, заходим в
и создаем здесь Двоичный параметр с именем «NoDrives».
Значение будет зависить от того, какие диски хотите скрыть:
Диск A — значение 01 00 00 00
B — 02 00 00 00
C — 04 00 00 00
D — 08 00 00 00
E — 10 00 00 00
F — 20 00 00 00
Если хотите скрыть несколько дисков, то нужно просуммировать их значения. Но учтите, что эти числа шестнадцатеричные. Чтобы верно рассчитать, воспользуйтесь калькулятором (Программы — стандартные — Калькулятор). Выберите в меню Калькулятора «Вид — Инженерный«, затем выберите «Hex» и просчитайте. Например, чтобы скрыть диски C и D надо плюсовать 04 00 00 00 и 08 00 00 00. Вводим в значение параметра 0C 00 00 00. Чтобы скрыть диски A и E надо просуммировать 01 00 00 00 и 10 00 00 00, получаем результат 11 00 00 00.
11.)Откройте Свойства: Экран, здесь и поскрываем некоторые вкладки. В редакторе реестра найдите раздел
создайте здесь DWORD-параметр с именем NoDispBackgroundPage и значением 1. Теперь вкладка Фон отображаться не будет. Остальные вкладки скрываются следующими параметрами:
NoDispAppearancePage — Оформление
NoDispScrSavPage — Заставка
NoDispSettingPage — Настройка.
12.)Теперь сделаем так, чтобы пункт Открыть с помощью… всегда появлялся в контекстном меню. Для этого найдем ключ HKEY_CLASSES_ROOT\*\ и создадим в нем раздел shell (если его нет). Здесь создадим еще раздел «openas«, а в нем еще «command«. Измените значение «По умолчанию» на «C:\WINDOWS\rundll32.exe shell32.dll,OpenAs_RunDLL %1«. Готово, можете проверять.
13.)Для изменения скорости выпадания Главного меню зайдите в ключ
и создайте Строковый параметр Menu Show Delay. В значение введите время задержки (в миллисекундах) и перезагрузитесь.
14.)Сейчас попробуем пункт Открыть в Блокноте поместить в контекстное меню. Зайдем в раздел HKEY_CLASSES_ROOT\*\shell (Если нет — создайте). Создайте раздел «Open» и измените По умолчанию на «Открыть в Блокноте«. Теперь создайте раздел «command» а в нем измените По умолчанию на «notepad.exe %1«. Готово.
15.)А сейчас поиграемся с Internet Explorer’ом. Хотите изменить обои браузера? Пожалуйста. Зайдите в ключ
и создайте Строковый параметр «BackBitmap«. А в качестве параметра введите путь к рисунку в формате Bmp и перезапустите браузер. Но это еще не все.
создайте новый Строковый параметр Window Title. В значении введите то, что вы желаете увидеть в заголовке после названия страницы, перезапустите браузер и наслаждайтесь. Точно также будет выглядить и проводник.
16.)Если Вы хотите любоваться именем или просто словом после часов в Systray (нижняя панель) то зайдите на
и создайте два строковых параметра: s1159 и s2359. В их значение следует ввести нужное имя. Ограничение — 8 букв.
17.)Когда надо перезапустить реестр, а перезагружать машину не охота, то в некоторых случаях поможет следующее: нажмите Ctrl+Alt+Del, затем выберите Explorer и кнопку «Завершить задачу». На предложение выключить машину отвечайте отказом, затем жмите «Снять задачу» в следующем окне, после чего увидите, как исчезла и появилась «Панель задач«.
Не все работает в Windows 95
Восстановление реестра
При работе с реестром надо соблюдать осторожность. Удаление каких-либо важных данных случайно или по незнанию может привести к краху операционной системы. Тогда спасти положение может только восстановление последней работоспособной копии.
Если Вы собрались поэкспериментировать с реестром, предварительно сохраните на диске файлы SYSTEM.DAT и USER.DAT. Они находятся в каталоге, куда была установлена операционная система и имеют атрибуты «только для чтения» и «скрытый». В случае если реестр будет серьезно испорчен, Вы сможете переписать эти файлы в каталог Windows, установить нужные атрибуты и реестр будет как новенький. Только не вздумайте восстанавливать эти файлы, когда загружен Windows, иначе система накроется окончательно и спасет ее только полная переустановка! Для восстановления этих файлов надо предварительно перезагрузиться в DOS и уже там заменять испорченные файлы хорошими.
Но это не единственный вариант восстановления данных. Дело в том, что операционная система, при каждом удачном запуске сохраняет копию реестра в CAB-файле, который записывается в скрытый каталог SYSBCKUP каталога Windows. По умолчанию, хранятся последние пять копий. Это число может варьироваться от 0 до 99 и устанавливается значением ключа MaxBackupCopies в файле scanreg.ini в каталоге Windows. Правда не стоит устанавливать слишком большое значение, т.к. файлы занимают немало места (один файл имеет размер больше мегабайта).
Чтобы восстановить реестр с одной из этих резервных копий надо перезагрузиться в DOS и выполнить команду
Появится список доступных резервных копий реестра отсортированных по времени их создания. После выбора нужной копии данные будут благополучно восстановлены, и Вы получите реестр, отвечающий состоянию дел на момент его создания.
Но если Вы устанавливали какие-то программы или меняли настройки операционной системы в промежуток между последней резервной копией и сбоем в реестре, то все эти данные безвозвратно пропадут. Надо ли нам это? Однозначно нет! Чтобы в любое время создать резервную копию реестра воспользуйтесь командой
которая в случае нормально прошедшей проверки создаст резервную копию.
Еще один вариант резервирования и восстановления реестра состоит в экспортировании раздела или целой ветви, которую Вы планируете изменять. Это можно осуществить в Regedite для Windows в меню «Реестр». Выделите нужный раздел и щелкните по пункту «Экспорт файла реестра». После задания имени файла данные этого раздела будут в него экспортированы. Файл имеет расширение REG. Для его импортирования в реестр достаточно дважды щелкнуть на нем и данные будут перенесены. Правда этот способ восстановления информации имеет один существенный недостаток: все удаленные или измененные записи будут восстановлены, но вот добавленные записи удалены не будут. Поэтому данный способ больше подходит, если Вы проводите какие-то несущественные изменения, и чтобы откатить их не вводя старые данные заново, можно воспользоваться экспортом/импортом.
Вообще, работать с реестром надо крайне осторожно, но если Вы будете периодически резервировать его, то никаких проблем возникнуть не должно
Развёртывание приложений Qt в Windows
Вступление
Добрый день, уважаемые читатели! Совсем недавно я завершил разработку одного своего приложения на Qt, и мне захотелось создать профессиональную программу установки, чтобы всё было «как у взрослых». Как оказалось, сделать это непросто, учитывая, что на официальном сайте инструментария информации по развёртыванию почти нет. В данной статье рассмотрены некоторые этапы подготовки программ на Qt версии 5.2 или выше для распространения на компьютеры других пользователей. Итак, вот план руководства:
1. Подготовка проекта Qt к развёртыванию
Для того, чтобы было проще следовать инструкциям, создадим простой проект Qt Widgets. Все последующие операции будут относиться к этому проекту. Ниже приведено содержимое исходных файлов приложения:
Программы выглядят особенно качественно и профессионально, если они несут с собой метаданные о разработчике, версии программного продукта, авторских правах, языке и многом другом. Для примера, обратимся к свойствам файла Photoshop.exe всем известной системы Adobe Photoshop. На рисунке ниже показано окно свойств данного файла:
Добавить подобную информацию можно с помощью файла ресурсов. Файл ресурсов имеет расширение .rc и несёт в себе текстовый код, описывающий используемые в приложении ресурсы. Подобные скрипты используются в проектах Visual Studio, основанных на WinAPI, и содержат различные дескрипторы иконок, строк, идентификаторов и прочего. В проектах Qt всё это имеет мало смысла, однако включение общей информации о программе всё же необходимо. Ниже приведены исходный код файла ресурсов и содержимое файла проекта, который также потребуется изменить:
В данном примере важно не забыть добавить файлы resources.rc и icon.ico в папку с исходными файлами проекта. На рисунке ниже показано окно свойств программы после сборки:
Иногда бывает необходимо, чтобы программа запускалась с правами администратора. В рамках Qt это можно реализовать путём использования несложных инструкций в файле проекта. Ниже приведён код, позволяющий программе запрашивать права администратора при запуске:
Следует отметить, что все указанные выше инструкции будут гарантированно работать только при использовании комплекта сборки Visual Studio. Подробную информацию о файлах ресурсов можно найти на портале MSDN в разделе «About Resource Files».
2. Компоновка дистрибутива программы
Создание дистрибутива приложения с учётом всех его файлов, которые должны устанавливаться на компьютерах пользователей, вероятно, является самым сложным этапом развёртывания. Требуется тщательно проанализировать исполняемый файл программы на наличие зависимостей, позаботиться о файлах переводов, не забыть про ресурсы приложения. Решить часть этих проблем поможет утилита windeployqt.exe, которая поставляется вместе с комплектом сборки. Данный инструмент работает в командной строке и поддерживает некоторые параметры конфигурации. На рисунке ниже показано окно командной строки с запущенной утилитой:
Последним параметром обязательно должен быть указан путь к двоичным файлам собранного приложения или имена этих файлов. В таблице ниже перечислены параметры утилиты, которые можно использовать при работе с ней:
После запуска утилиты возле исполняемого файла программы должны появиться различные библиотеки и служебные файлы, которые позволят приложению корректно запускаться и работать на многих компьютерах. На рисунке ниже показано окно Проводника Windows со структурой дистрибутива:
Следует отметить, что перед использованием windeployqt.exe необходимо добавить путь к этому файлу в переменную среды PATH, в противном случае данный инструмент работать не будет.
3. Подписание кода и создание установщика
После компоновки дистрибутива программы попробуем запустить приложение от имени администратора. На рисунке ниже показано сообщение системной службы User Account Control (UAC) с предупреждением о запуске приложения неизвестного издателя:
Данное предупреждение отпугивает пользователей и создаёт приложению плохую репутацию. Чтобы исправить ситуацию, нужно подписать файлы программы с помощью специального сертификата. Разработчики, подписывая свои программы, как бы дают дополнительные гарантии надёжности приложений с точки зрения информационной безопасности. Разработчики программного обеспечения с открытым исходным кодом могут получить сертификаты для своих проектов бесплатно, к примеру, на сайте Certum. Для использования сертификата понадобиться специальная программа, которая подпишет файлы приложения. Для этого можно использовать удобный инструмент DigiCert Certificate Utility. На рисунке ниже показано окно данной программы со списком сертификатов для подписания кода:
После использования данной утилиты стоить снова попробовать запустить приложение от имени администратора. Ниже показано сообщение UAC с отображением информации об издателе программы:
После проделанной работы пришло время задуматься над выбором системы создания установщика для подготовленного приложения. Существуют как платные, так и бесплатные продукты для выполнения данной задачи. В таблице ниже перечислены некоторые инструменты для создания программ установки:
Платные | Бесплатные |
InstallShield | Qt Installer Framework |
Setup Factory | NSIS |
SetupBuilder | Inno Setup |
Smart Install Maker | WiX |
Сложно дать какие-либо рекомендации по поводу выбора той или иной системы. Разработчики ПО с открытым исходным кодом, вероятно, выберут бесплатные инструменты, в то же время платные продукты часто используются коммерческими компаниями.