/// <summary>
/// Показывает наличие на клавиатуре клавиш ENTER и ESC
/// </summary>
public const uint KBDI_KEYBOARD_ENTER_ESC = 0x0004;
/// <summary>
/// Показывает наличие клавиш с буквами и цифрами
/// </summary>
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.
/// <summary>
/// Включает виброзвонок
/// </summary>
/// <returns>S_OK сообщает об успешном вызове функции. В случае
/// ошибки возвращается E_FAIL
///</returns>
[DllImport('aygshell')]
private static extern int Vibrate(int cvn, IntPtr rgvn, uint fRepeat,
uint dwTimeout);
/// <summary>
/// Останавливает виброзвонок
/// </summary>
/// <returns>S_OK сообщает об остановке виброзвонка. В случае
/// ошибки возвращается EFAIL
/// </returns>
[DllImport('aygshell')]
private static extern int VibrateStop();
/// <summary>
/// Получает сведения о возможности использования виброзвонка
/// </summary>
/// <param name='caps'>Перечисление VIBRATEDEVICECAPS,
/// определяющее возможности воспроизведения виброзвонка
/// устройством.
///</param>
[DllImport('aygshell')]
private static extern int VibrateGetDeviceCaps(VibrationCapabilities caps);
/// <summary>
/// Используется функцией VibrateGetDeviceCaps для определения
/// возможности воспроизведения виброзвонка.
/// </summary>
public enum VibrationCapabilities : int {
VDC_Amplitude,
VDC_Frequency,
}
private void mnuStopVibrate_Click(object sender, EventArgs e) {
StopVibrate();
}
private void mnuVibrate_Click(object sender, EventArgs e) {
StartVibrate();
}
/// <summary>
/// Включаем виброзвонок
/// </summary>
/// <returns>В успешном случае возвращается TRUE, в случае
/// ошибки - FALSE.</returns>
public static bool StartVibrate() {
int result = Vibrate(0, IntPtr.Zero, 0xffffffff, 0xffffffff);
if (result != 0) {
return false;
}
return true;
}
/// <summary>
/// Останавливаем виброзвонок
/// </summary>
/// <returns>В успешном случае возвращается TRUE, в случае
/// ошибки - FALSE.</returns>
public static bool StopVibrate() {
int result = VibrateStop();
if (result != 0) {
return false;