///
/// Возвращаемое значение в случае успеха
///
public const int ERROR_SUCCESS = 0;
///
/// Функция для создания заданного раздела реестра. Если раздел
/// уже существует, то функция открывает его.
///
/// [in] Дескриптор к открываемому разделу
/// или одна из ветвей реестра:
/// HKCR, HKCU, HKLM.
/// [in] Имя для нового раздела. Данный
/// раздел должен быть подразделом раздела, определенного в
/// параметре hKey.
///
/// [in] Зарезервированный параметр.
/// Установлен равным 0
/// [in] Имя класса или типа объекта
/// Данный параметр игнорируется, если раздел уже существует
///
/// [in] Игнорируется; установите
/// равным 0
///
/// [in] Игнорируется; установите
/// равным 0
///
/// [in] Установите в NULL.
///
/// [out] Переменная, получаемая от
/// дескриптора нового или открытого раздела
/// Если вы больше не нуждаетесь в дескрипторе, то вызовите
/// функцию RegCloseKey для его закрытия.
/// [out] Переменная, которая
/// получает значение 1 (REG_CREATED_NEW_KEY),
/// если раздел был создан
/// и значение 2 (REG_OPENED_EXISTING_KEY), если был открыт уже
/// существующий раздел
///
/// ERROR_SUCCESS сообщает об успешном вызове функции.
/// В случае ошибки возвращается ненулевое значение
///
[DllImport("coredll.dll", SetLastError = true)]
public static extern int RegCreateKeyEx(
UIntPtr hkey, String lpSubKey, uint Reserved, StringBuilder lpClass,
uint dwOptions, KeyAccess samDesired, IntPtr lpSecurityAttributes,
ref UIntPtr phkResult, ref uint lpdwDisposition);
///
/// Функция для удаления раздела реестра
///
/// [in] Дескриптор к удаляемому разделу или
/// одна из ветвей реестра: HKCR, HKCU, HKLM.
///
/// [in] Имя удаляемого раздела.
/// Нельзя использовать NULL
///
/// ERROR_SUCCESS сообщает об успешном вызове функции
/// В случае ошибки возвращается ненулевое значение
///
[DllImport("coredll.dll", SetLastError = true)]
public static extern int RegDeleteKey(UIntPtr hkey, string subkeyName );
///
/// Функция для открытия заданного раздела реестра.
///
/// [in] Дескриптор к открываемому разделу
/// или одна из ветвей реестра HKCR, HKCU, HKLM.
/// [in] Имя открываемого раздела
///
/// [in] Зарезервированный параметр.
/// Установлен равным 0
/// [in] He поддерживается. Установите
/// в 0.
/// [out] Переменная, получаемая от
/// дескриптора открытого раздела. Если вы больше не нуждаетесь
/// в дескрипторе, то вызовите функцию RegCloseKey для его
/// закрытия
/// ERROR_SUCCESS сообщает об успешном вызове функции.
/// В случае ошибки возвращается ненулевое значение
///
[DllImport("coredll.dll", SetLastError = true)]
public static extern int RegOpenKeyEx(
UIntPtr hkey, String lpSubKey, uint ulOptions, KeyAccess samDesired,
ref UIntPtr phkResult);
///
/// Функция получает тип и данные из заданного раздела реестра
///
/// [in] Дескриптор к открываемому разделу
/// или одна из ветвей реестра: HKCR, HKCU, HKLM.
/// [in] Значение параметра.
///
/// [in] Зарезервированный параметр.
/// Установите в NULL.
/// [out] Тип данных
///
/// [out] Буфер, получающий данные.
/// Данный параметр может быть NULL, если данные не требуются.
///
/// [in/out] Размер буфера в байтах
///
/// ERROR_SUCCESS сообщает об успешном вызове функции.
/// В случае ошибки возвращается ненулевое значение
///
[DllImport("coredll.dll", SetLastError = true)]
public static extern int RegQueryValueEx(
UIntPtr hkey, String lpValueName, IntPtr lpReserved, ref KeyType lpType,
byte[] lpData, ref uint lpcbData);
///
/// Функция создает параметр в разделе реестра.
///
[DllImport("coredll.dll", SetLastError = true)]
public static extern int RegSetValueEx(
UIntPtr hkey, String lpValueName, uint Reserved, KeyType dwType,
byte[] lpData, uint cbData);
[DllImport("coredll.dll", SetLastError = true)]
public static extern int RegDeleteValue(UIntPtr hkey, string valueName);
[DllImport("coredll.dll", SetLastError = true)]
public static extern int RegCloseKey(UIntPtr hkey);
}
}
Наличие внешней клавиатуры
С помощью класса Registry
разработчик может получать или устанавливать значения параметров в реестре. Предположим, что нужно узнать, подключена ли к устройству внешняя клавиатура. За данную функцию отвечает параметр HasKeyboard
в разделе HKEY_CURRENT_USER\Software\Microsoft\Shell
. Если данный параметр имеет единичное значение, то система работает с подключенной внешней клавиатурой. Если значение равно нулю, то клавиатуры нет. В листинге 13.18 приведен код, показывающий, как можно извлечь значение интересующего параметра.
Читать дальше