2015-12-29 76 views
2

我想知道檢測鼠標或鍵盤是否插入計算機的最佳方法是什麼?我有一個主要用於觸摸屏獨立應用程序的應用程序,但我想知道是否有插入的鍵盤不會觸發拔出Windows鍵盤或包含數字鍵盤的窗體。如果沒有插入鼠標,則改變一些行爲。編程檢測鼠標和鍵盤是否插入

+0

不是我曾經嘗試過的,但[this](http://www.codeproject.com/Articles/51477/How-to-Get-a-List-of-Non-Working-Devices-Using -VB)也許有用,也許你可以做一些事情使用它來找到鼠標/鍵盤。但不知道。 –

回答

2

使用VB.Net,我會用System.Management(不要忘記在項目[菜單]添加此引用 - >添加引用)ManagementObjectSearcherSystem.Linq相結合,找到解決這個樣子,

Imports System 
Imports System.Management 
Imports System.Linq 

Public Module Module1 
    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 Module 

結果

enter image description here

你也硬編碼,以避免輸入錯誤像三合建議(雖然使用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 

他們會產生相同的結果

1

您可以使用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;線,並在添加引用System.Management。 您可以根據需要使用更多的ManagementObject屬性。以下是屬性列表和一些其他外部參考。

Pointing device class ref. & attribute list

C#, C++ similar example