编程检测鼠标和键盘是否插入

我想知道检测鼠标键盘是否插入计算机的最佳方法是什么? 我有一个应用程序,主要是在触摸屏独立使用,但我想知道是否有插入的键盘不起火拉起Windows键盘或包含数字键盘的窗体。 然后改变一些行为,如果没有插入鼠标。

使用VB.Net,我会使用System.Management (不要忘记在项目[菜单] – >添加引用) ManagementObjectSearcher结合System.Linq添加此引用来找到像这样的解决方案,

 Imports System Imports System.Management Imports System.Linq Public modulee modulee1 Public Sub Main() Console.WriteLine(HasDevice("PointingDevice")) Console.WriteLine(HasDevice("Keyboard")) Console.ReadKey() End Sub Public Function HasDevice(strtype As String) Dim searcher As New ManagementObjectSearcher("root\CIMV2", "SELECT * FROM Win32_" + strtype) Dim result = From mobj In searcher.Get() Select mobj Where mobj("Status").ToString() = 0 Return Not IsNothing(result) End Function End modulee 

结果

在这里输入图像说明

你也可以硬编码它,以避免像TRiNE建议的输入错误(尽管使用C#)

 Public Function HasPointingDevice() Dim searcher As New ManagementObjectSearcher("root\CIMV2", "SELECT * FROM Win32_PointingDevice") Dim result = From mobj In searcher.Get() Select mobj Where mobj("Status").ToString() = 0 Return Not IsNothing(result) End Function Public Function HasKeyboard() Dim searcher As New ManagementObjectSearcher("root\CIMV2", "SELECT * FROM Win32_Keyboard") Dim result = From mobj In searcher.Get() Select mobj Where mobj("Status").ToString() = 0 Return Not IsNothing(result) End Function 

并像这样称呼他们

 Public Sub Main() Console.WriteLine(HasPointingDevice()) Console.WriteLine(HasKeyboard()) Console.ReadKey() End Sub 

他们会产生相同的结果

您可以使用C# System.ManagementManagementObjectSearcher

这是一个示例代码。 根据需要修改。

  public bool isPointingDeviceAttached() { ManagementObjectSearcher searcher = new ManagementObjectSearcher("root\\CIMV2", "SELECT * FROM Win32_PointingDevice"); int devCount = 0; foreach (ManagementObject obj in searcher.Get()) { if(obj["Status"].ToString().Contains("OK")) // if device is ready devCount++; } return devCount>0; } public bool isKeyboardAttached() { ManagementObjectSearcher searcher = new ManagementObjectSearcher("root\\CIMV2", "SELECT * FROM Win32_Keyboard"); int devCount = 0; foreach (ManagementObject obj in searcher.Get()) { if (obj["Status"].ToString().Contains("OK")) // if device is ready devCount++; } return devCount>0; } 

确保using System.Management;添加using System.Management; 行并在引用中添加System.Management 。 您可以根据需要使用更多的ManagementObject属性。 这是一个属性列表和一些其他的外部参考。

指向设备类参考。 &属性列表

C#,类似C ++的例子