using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;

namespace Keyboard_CS
{
    public partial class Form1 : Form
    {
        /// <summary>
        /// Функция возвращает статус подключаемой клавиатуры и ее возможности.
        /// </summary>
        /// <returns>Функция возвращает битовую маску, 
        /// показывающую присутствие клавиатуры и ее возможности
        /// </returns>
        [DllImport("coredll.dll")]
        public static extern uint GetKeyboardStatus();

        /// <summary>
        /// Показывает присутствие клавиатуры в системе
        /// </summary>
        public const uint KBDI_KEYBOARD_PRESENT = 0x0001;

        /// <summary>
        /// Показывает доступность клавиатуры. 
        /// Данный бит может быть изменен функцией EnableHardwareKeyboard
        /// </summary>
        public const uint KBDI_KEYBOARD_ENABLED = 0x0002;

        /// <summary>
        /// Показывает наличие на клавиатуре клавиш ENTER и ESC
        /// </summary>
        public const uint KBDI_KEYBOARD_ENTER_ESC = 0x0004;

        /// <summary>
        /// Показывает наличие клавиш с буквами и цифрами
        /// </summary>
        public const uint KBDI_KEYBOARD_ALPHA_NUM = 0x0008;

        public Form1()
        {
            InitializeComponent();
            #if DEBUG
                MinimizeBox = false;
            #else       
                MinimizeBox = true;
            #endif
        }

        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);
        }
    }
}