/// </param>
/// <returns>ERROR_SUCCESS сообщает об успешном вызове функции.
/// В случае ошибки возвращается ненулевое значение
/// </returns>
[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);
/// <summary>
/// Функция для удаления раздела реестра
/// </summary>
/// <param name='hkey'>[in] Дескриптор к удаляемому разделу или
/// одна из ветвей реестра: HKCR, HKCU, HKLM.
/// </param>
/// <param name='subkeyName'>[in] Имя удаляемого раздела.
/// Нельзя использовать NULL
/// </param>
/// <returns>ERROR_SUCCESS сообщает об успешном вызове функции
/// В случае ошибки возвращается ненулевое значение
/// </returns>
[DllImport('coredll.dll', SetLastError = true)]
public static extern int RegDeleteKey(UIntPtr hkey, string subkeyName );
/// <summary>
/// Функция для открытия заданного раздела реестра.
/// </summary>
/// <param name='hkey'>[in] Дескриптор к открываемому разделу
/// или одна из ветвей реестра HKCR, HKCU, HKLM.</param>
/// <param name='lpSubKey'>[in] Имя открываемого раздела
/// </param>
/// <param name='ulOptions'>[in] Зарезервированный параметр.
/// Установлен равным 0</param>
/// <param name='samDesired'>[in] He поддерживается. Установите
/// в 0.</param>
/// <param name='phkResult'>[out] Переменная, получаемая от
/// дескриптора открытого раздела. Если вы больше не нуждаетесь
/// в дескрипторе, то вызовите функцию RegCloseKey для его
/// закрытия</param>
/// <returns>ERROR_SUCCESS сообщает об успешном вызове функции.
/// В случае ошибки возвращается ненулевое значение
/// </returns>
[DllImport('coredll.dll', SetLastError = true)]
public static extern int RegOpenKeyEx(
UIntPtr hkey, String lpSubKey, uint ulOptions, KeyAccess samDesired,
ref UIntPtr phkResult);
/// <summary>
/// Функция получает тип и данные из заданного раздела реестра
/// </summary>
/// <param name='hkey'>[in] Дескриптор к открываемому разделу
/// или одна из ветвей реестра: HKCR, HKCU, HKLM.</param>
/// <param name='lpValueName'>[in] Значение параметра.
/// </param>
/// <param name='lpReserved'>[in] Зарезервированный параметр.
/// Установите в NULL.</param>
/// <param name='lpType'>[out] Тип данных
/// </param>
/// <param name='lpData'>[out] Буфер, получающий данные.
/// Данный параметр может быть NULL, если данные не требуются.
/// </param>
/// <param name='lpcbData'>[in/out] Размер буфера в байтах
/// </param>
/// <returns>ERROR_SUCCESS сообщает об успешном вызове функции.
/// В случае ошибки возвращается ненулевое значение
/// </returns>
[DllImport('coredll.dll', SetLastError = true)]
public static extern int RegQueryValueEx(
UIntPtr hkey, String lpValueName, IntPtr lpReserved, ref KeyType lpType,
byte[] lpData, ref uint lpcbData);
/// <summary>
/// Функция создает параметр в разделе реестра.
/// </summary>
[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_USERSoftwareMicrosoftShell
. Если данный параметр имеет единичное значение, то система работает с подключенной внешней клавиатурой. Если значение равно нулю, то клавиатуры нет. В листинге 13.18 приведен код, показывающий, как можно извлечь значение интересующего параметра.