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

时间:2015-02-12 07:39:20

标签: c# windows winforms c#-4.0 pinvoke

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

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

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

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

如果我的问题不明确,请告诉我。

提前致谢。

2 个答案:

答案 0 :(得分:3)

我刚写了这个并在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

希望这会有所帮助。

答案 1 :(得分:1)

要确定它是否通过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