Александр Климов - Программирование КПК и смартфонов на .NET Compact Framework
- Название:Программирование КПК и смартфонов на .NET Compact Framework
- Автор:
- Жанр:
- Издательство:Питер
- Год:2007
- Город:Санкт-Петербург
- ISBN:978-5-91180-270-7
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Александр Климов - Программирование КПК и смартфонов на .NET Compact Framework краткое содержание
Мобильные устройства все активнее вторгаются в нашу жизнь. Карманные компьютеры и смартфоны давно утратили статус дорогих игрушек и перекочевали в разряд необходимых устройств. Значит, для них необходимо создавать программное обеспечение. Так почему вы должны оставаться в стороне?
Прочитав эту книгу, вы получите знания, которые позволят вам уверенно создавать программы для карманных компьютеров и смартфонов. А огромное количество разнообразных примеров поможет быстро совершенствоваться и развиваться, обогащая свой опыт работы.
Книга предназначена для начинающих программистов.
Программирование КПК и смартфонов на .NET Compact Framework - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
return RegDeleteValue(hkey, valueName);
} finally {
if (UIntPtr.Zero != hkey) {
RegCloseKey(hkey);
}
}
}
///
/// Типы ключей
///
public enum KeyType : uint {
None = 0,
String = 1,
Binary = 3,
Dword = 4,
}
///
/// Тип доступа
///
public enum KeyAccess : uint {
None = 0x0000,
QueryValue = 0x0001,
SetValue = 0x0002,
CreateSubKey = 0x0004,
EnumerateSubKeys = 0x0008,
Notify = 0x0010,
CreateLink = 0x0020
}
///
/// HKEY_CLASSES_ROOT
///
public static UIntPtr HKCR = new UintPtr(0x80000000);
///
/// HKEY_CURRENT_USER
///
public static UIntPtr HKCU = new UIntPtr(0x80000001);
///
/// HKEY_LOCAL_MACHINE
///
public static UIntPtr HKLM = new UIntPtr(0x80000002);
///
/// HKEY_USERS
///
public static UIntPtr HKU = new UintPtr(0x80000003);
///
/// Возвращаемое значение в случае успеха
///
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 приведен код, показывающий, как можно извлечь значение интересующего параметра.
private void butCheckKeyboard_Click(object sender, EventArgs e) {
uint check = 0;
Registry.GetDWORDValue(Registry.HKCU, "SOFTWARE\\Microsoft\\Shell",
"HasKeyboard", ref check);
lblInfo.Text = Convert.ToBoolean(check).ToString();
}
В этом примере используется функция-оболочка GetDWORDValue
из класса Registry
. Если же вы предпочитаете обходиться без функций-оболочек, а обращаться напрямую к функциям API, то пример можно переписать так, как показано в листинге 13.19.
private static bool IsKeyboard() {
uint dwordResult;
UIntPtr hkey = UIntPtr.Zero;
try {
int result =
Registry.RegOpenKeyEx(Registry.HKCU, "SOFTWARE\\Microsoft\\Shell", 0,
Registry.KeyAccess.None, ref hkey);
if (Registry.ERROR_SUCCESS != result) return false;
byte[] bytes = null;
uint length = 0;
Registry.KeyType keyType = Registry.KeyType.None;
result =
Registry.RegQueryValueEx(hkey, "HasKeyboard", IntPtr.Zero, ref keyType,
Интервал:
Закладка: