如何以编程方式检查键盘是否已连接?

How to check programatically if keyboard is connected or not?

我正在使用 C# winforms 开发应用程序。

我们的应用程序将安装在win8表面(触摸屏设备)上。

我们想检查键盘是否通过 USB 连接,然后我们的应用程序将不会显示软键盘,否则会显示。

许多方法可用于检查 WinRT,但 none 用于 winforms C#。

如果我的问题不清楚,请告诉我。

提前致谢。

我刚刚写了这篇文章并在 W8 上进行了测试:

ManagementObjectSearcher searcher = new ManagementObjectSearcher("Select Name from Win32_Keyboard");

        foreach(ManagementObject keyboard in searcher.Get())
        {
            if (!keyboard.GetPropertyValue("Name").Equals(""))
            {
                Console.WriteLine("KB Name: {0}", keyboard.GetPropertyValue("Name"));
            }
        }

我还连接了第二个键盘,可以看到它被检测到了。当我拔掉一个时,我得到一个条目,当拔掉两个时,我什么都没有。

我在这里也找到了一些例子: Example 1 这里 Example 2

希望这对您有所帮助。

要确定它是否通过 USB 连接,请检查该字符串:

private readonly string USB = "USB";

    private bool GetKeyboardPresent()
    {
        bool keyboardPresent = false;
        ManagementObjectSearcher searcher = new ManagementObjectSearcher("Select * from Win32_Keyboard");

        foreach (ManagementObject keyboard in searcher.Get())
        {
            foreach (PropertyData prop in keyboard.Properties)
            {
                if (Convert.ToString(prop.Value).Contains(USB))
                {
                    keyboardPresent = true;
                    break;
                }
            }      
        }

        return keyboardPresent;
    }

或者您可以改为使用此 Powershell 命令:

PS C:\Users\myUserID> Get-WmiObject Win32_Keyboard