我想知道检测鼠标或键盘是否插入计算机的最佳方法是什么? 我有一个应用程序,主要是在触摸屏独立使用,但我想知道是否有插入的键盘不起火拉起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.Management
和ManagementObjectSearcher
这是一个示例代码。 根据需要修改。
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 ++的例子