2011-12-29 30 views
5

在C#應用程序中,有哪些檢測連接到計算機的某些設備是否存在的好方法?當然,在編程上。我需要支持Windows XP和7如何檢測某個設備的存在

背景

我一直在考慮使用一些連接設備龐大的C#應用​​程序。這些設備是定製的硬件,並沒有設計用於沒有軟件。當C#應用程序啓動時,它會搜索這些連接的設備並在適當時與它們進行通信。可以有多個連接的設備。我沒有看過搜索設備的源代碼。使用USB或串行電纜將設備插入PC。它們在設備管理器中顯示爲COM端口。有時在PC和設備之間可以有USB集線器或串口到USB轉換器。

當設備連接到某個USB集線器或使用某個串行到USB轉換器時,有時軟件無法正確檢測到設備。有時它從PC到PC有所不同。我們不確定是否會導致某些驅動程序。

我被告知要查看設備搜索算法,如果可能,提出更好的解決方案並替換當前的實現。我之前沒有做過這類任務,我需要了解Windows如何管理設備下的設備。

如何在C#中搜索特定的連接設備?有什麼好的做法,我應該注意或避免什麼?

+0

也許這篇文章interresting:http://stackoverflow.com/questions/68749/working-with-usb-devices-in-net和http://www.developerfusion.com/article/84338/making-usb-c-friendly/ – Ruben 2011-12-29 09:48:58

+0

您可以使用WMI等枚舉所有連接的(usb)設備。據我所知,他們工作起來很慢。可能有更好的方法。 http://stackoverflow.com/questions/3331043/get-list-of-connected-usb-devices – CodingBarfield 2011-12-29 10:22:29

回答

3

您可以在註冊表中的所有設備:HKLM/CURRENTCONTROLSET /枚舉(http://msdn.microsoft.com/en-us/library/windows/hardware/ff546173(v=vs.85).aspx

但會有與串行端口的問題。您無法確定哪個設備連接到串行端口。它可以是手機,調制解調器,鼠標,您的設備,另一個自定義設備等。爲了確保您的設備連接到給定的串行端口,您必須嘗試與它通信。如果它以適當的方式迴應 - 那麼是的,它是您的設備。

由於許多使用串口設備的程序要求用戶手動選擇連接設備的串口。

UPD:

約列舉串口另一個鏈接:http://social.msdn.microsoft.com/Forums/en-US/netfxbcl/thread/afb62e84-53e5-4f17-ba91-8de15c4c2e38/

+0

您提供的鏈接是爲Windows CE。你可以提供一個鏈接的Windows XP/7?謝謝。我無法通過快速搜索在msdn中找到它。 – Donotalo 2011-12-29 11:01:08

+0

哎呀,對不起。固定文章。現在它指向適當的文章。 – werewindle 2011-12-29 11:08:34