使用 C# 在 windows 7 上检测键盘

Detect keyboard on windows 7 using C#

我一直在寻找一种方法来检测触摸屏设备(当它使用指针设备驱动程序而不是触摸屏显示驱动程序时)或检测 C# 和 WPF 中何时存在键盘。

请注意,这是 Windows 7 嵌入的,而不是 windows 8.

我看到了一些对 system.management 等人的引用。但不确定如何以这种方式使用它们。

本质上这是为了在没有连接键盘并且用户输入文本框时出现 WPF 键盘。

如果文本框是通过 Touch 选择的,您应该得到 GotTouchCapture or TouchDown 事件。您可以注册到其中一个并在它被触发时显示键盘...

好的,所以我几天前找到了这个解决方案,它似乎应该运行良好,因为如果键盘连接到触摸屏设备,它也不会显示屏幕键盘(至少它不应该,除非OS 覆盖了它,我还没有正确测试它)

在这种方法中,我使用名为 HIDSHARP 的 Nuget 库浏览 USB HID 列表,通过在描述中查找单词键盘来查看是否连接了键盘。

如果找不到 USB,我会通过管理对象查找 ps/2 键盘。

 /// <summary>
    /// TEST AND SET GLOBAL KEYBOARD ATTACHED BOOL keyB
    /// </summary>
    internal static void TestKeyboard()
    {
        keyB = false;

        //FIND WHETHER A USB KEYBOARD IS PLUGGED IN
        HidSharp.HidDeviceLoader hd = new HidSharp.HidDeviceLoader();

        foreach (HidSharp.HidDevice item in hd.GetDevices())
        {
            if (item.ProductName.Contains("Keyboard"))
            {
                keyB = true;
                return;
            }
        }

        //FIND WHETHER A PS/2 KEYBOARD IS PLUGGED IN.
        string query = "select * from Win32_Keyboard";
        System.Management.ObjectQuery oQuery = new ObjectQuery(query);
        ManagementObjectSearcher searcher = new ManagementObjectSearcher(oQuery);
        ManagementObjectCollection recordSet = searcher.Get();
        foreach (ManagementObject record in recordSet)
        {
            if (record.Properties["Description"].Value.ToString().Contains("Keyboard"))
            {
                keyB = true;
                return;
            }
        }

    }