Программирование КПК и смартфонов на .NET Compact Framework — страница 39 из 41

Узнать о наличии в системе подключаемой клавиатуры можно с помощью функции API или просмотрев значение соответствующего ключа в реестре. Использование реестра рассматривалось несколько раньше. В листинге 13.22 приведен код, который показывает, как можно узнать о присутствии подключенной клавиатуры с помощью функции API

GetKeyboardStatus
.

Листинг 13.22

/// 

/// Функция возвращает статус подключаемой клавиатуры и ее

/// возможности.

/// 

/// Функция возвращает битовую маску,

/// показывающую присутствие клавиатуры и ее возможности

/// 

[DllImport("coredll.dll")]

public static extern uint GetKeyboardStatus();


/// 

/// Показывает присутствие клавиатуры в системе

/// 

public const uint KBDI_KEYBOARD_PRESENT = 0x0001;


/// 

/// Показывает доступность клавиатуры.

/// Данный бит может быть изменен функцией

/// EnableHardwareKeyboard

/// 

public const uint KBDI_KEYBOARD_ENABLED = 0x0002;


/// 

/// Показывает наличие на клавиатуре клавиш ENTER и ESC

/// 

public const uint KBDI_KEYBOARD_ENTER_ESC = 0x0004;


/// 

/// Показывает наличие клавиш с буквами и цифрами

/// 

public const uint KBDI_KEYBOARD_ALPHA_NUM = 0x0008;


private void Form1_Load(object sender, EventArgs e) {

 MessageBox.Show("Наличие и доступность клавиатуры: " +

  IsKeyboard().ToString());

}


private static bool IsKeyboard() {

 uint flags = KBDI_KEYBOARD_ENABLED | KBDI_KEYBOARD_PRESENT;

 return ((GetKeyboardStatus() & flags) == flags);

}

Виброзвонок

Как правило, практически все современные модели мобильных телефонов и смартфонов поддерживают функцию виброзвонка. Следовательно, должны существовать функции для его включения и выключения. Для использования виброзвонка на смартфоне применяются функции

Vibrate
,
VibrateStop
и
VibrateGetDeviceCaps
.

При помощи этих функций разработчик может использовать возможности виброзвонка в своих приложениях. Соответствующий код приведен в листинге 13.23.

Листинг 13.23

/// 

/// Включает виброзвонок

/// 

/// S_OK сообщает об успешном вызове функции. В случае

/// ошибки возвращается E_FAIL

///

[DllImport("aygshell")]

private static extern int Vibrate(int cvn, IntPtr rgvn, uint fRepeat,

 uint dwTimeout);


/// 

/// Останавливает виброзвонок

/// 

/// S_OK сообщает об остановке виброзвонка. В случае

/// ошибки возвращается EFAIL

/// 

[DllImport("aygshell")]

private static extern int VibrateStop();


/// 

/// Получает сведения о возможности использования виброзвонка

/// 

/// Перечисление VIBRATEDEVICECAPS,

/// определяющее возможности воспроизведения виброзвонка

/// устройством.

///

[DllImport("aygshell")]

private static extern int VibrateGetDeviceCaps(VibrationCapabilities caps);