Интернет, компьютеры, софт и прочий Hi-Tech | ||
Избранные докиМетки (все метки)internet, it, интернет, интернет сеть, информационные технологии, ит, по, программное обеспечение, сайт, софт
Подписаться через RSS2Email.ru
Дополнительномобильные, электроника, видеокарта, СКС, AXIS, аутсорсинг, интернет, сеть, радионяни, гаджеты |
Доступ к реестру Windows с помощью XPCOM
ВведениеПри реализации Windows-специфической функциональности, часто требуется доступ к реестру Windows для получения информации о других установленных в окружении программ. Для этого в XPCOM существуют интерфейсы для чтения и записи данных реестра. Данная статья предназначена показать, как используются эти интерфейсы в некоторых продуктах Mozilla. Все примеры из этого документа написаны на JavaScript с использованием XPCOM. Поддержка в Firefox 1.5 и более новых версияхВ Firefox 1.5 было добавлено новое API, представленное интерфейсом nsIWindowsRegKey, который предоставляет расширенную функциональность для работы с реестром. Этот интерфейс реализует все необходимое API и за вас беспокоится о реализации некоторых низкоуровневых нюансах Windows. Если расширение, которое вы пишите, предназначено работать только с Firefox 1.5 и более поздними версиями, то этого раздела вам будет вполне достаточно для работы. Простой примерВот простой пример, демонстрирующий, как прочесть ProductId вашей Windows: var wrk = Components.classes["@mozilla.org/windows-registry-key;1"]
.createInstance(Components.interfaces.nsIWindowsRegKey);
wrk.open(wrk.ROOT_KEY_LOCAL_MACHINE,
"SOFTWARE\\Microsoft\\Windows\\CurrentVersion",
wrk.ACCESS_READ);
var id = wrk.readStringValue("ProductId");
wrk.close();
Несмотря на свою простоту этот пример демонстрирует несколько важных моментов, касающихся использования интерфейса. Во-первых, вы должны использовать createInstance() для получения экземпляра объекта этого интерфейса, а не getService(). Во-вторых, вы должны вызвать open() с нужным ключом перед попыткой чтения его значения. Заметьте, что при вызове open() указан корневой ключ с использованием именованной константы, определяемой интерфейсом nsIWindowsRegKey. А именно — ROOT_KEY_LOCAL_MACHINE, которая соответствует HKEY_LOCAL_MACHINE в реестре Windows. Также заметьте, что путь к ключу содержит эскейпирование обратных слэшей, обязательное в строковых константах JavaScript и C++. Требуемые права доступа указываются с помощью именованной константы из интерфейса. В данном примере это — ACCESS_READ. Это может оказаться очень важным, когда действие осуществляется из под не-администраторского аккаунта с ограниченными привилегиями. Соответствующие ключам значения читаются с помощью readStringValue(). При чтении вы можете указать, какого типа данные вы ожидаете получить. Это будет подробнее описано ниже. Кроме того, заметьте, что вы должны закрыть ключ после использования, если не желаете вызвать утечку системных ресурсов. Открытие ключей реестраПеред тем, как что либо делать с ключом реестра, вы должны сначала открыть этот интересующий вас ключ. На примере выше показано, как использовать для этого метод open(). Если вы хотите создать новый ключ, вы можете использовать метод create(), который имеет те же праметры, что и open(). Заметьте, что вызов create() для существующего ключа не приведет к ошибке и совершит то же самое, что и вызов open(). Оба эти метода принимают корневой ключ в качестве первого параметра. В JavaScript`е вам достаточно будет использовать в качестве этого параметра какую-то из именованных констант рассматриваемого интерфейса. Вот они:
Вторым параметром для open() и create() является путь к нужному ключу. Как видно из примера выше, вы должны эскейпировать обратные слэши в строке пути. Третий параметр для open() и create() — это режим доступа. Он указывается как бинарная комбинация флагов, определенных интерфейсом. Вы можете прочесть исчерпывающие объяснения в документации по интерфейсу, а здесь мы укажем только наиболее часто используемые режимы:
В дополнение к open() и create() имеются еще методы openChild() и createChild(). Вы можете вызывать эти методы для открытия дочерний ключей уже открытых ключей реестра. Оба метода принимают в качестве параметров относительный путь и режим доступа, и возвращают новый объект, реализующий интерфейс nsIWindowsRegKey. Ниже приведен пример, аналогичный вышеизложенному, но с использованием openChild(): var wrk = Components.classes["@mozilla.org/windows-registry-key;1"]
.createInstance(Components.interfaces.nsIWindowsRegKey);
wrk.open(wrk.ROOT_KEY_LOCAL_MACHINE,
"SOFTWARE\\Microsoft",
wrk.ACCESS_READ);
var subkey = wrk.openChild("Windows\\CurrentVersion", wrk.ACCESS_READ);
var id = subkey.readStringValue("ProductId");
subkey.close();
wrk.close();
Один раз открыв ключ реестра вы можете начать его использовать. Далее: Чтение данных из реестра >>> 04.05.2010. Перевод с английского — Д.Скоробогатов (aka xBB) Последнее редактирование: 2010-05-05 11:56:16 Метки материала: программирование, xpcom, com, microsoft windows, mozilla, firefox, javascript, js Оставьте, пожалуйста, свой комментарий к публикации |
|
© 2007-2012, Дмитрий Скоробогатов.
Разрешается воспроизводить, распространять и/или изменять материалы сайта
в соответствии с условиями GNU Free Documentation License,
версии 1.2 или любой более поздней версии, опубликованной FSF,
если только иное не указано в самих материалах.