UsbDevice 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
代表 USB 裝置。 物件提供方法與屬性,讓應用程式可用來列舉 WinUSB 裝置,以及傳送 IN 和 OUT 控制傳輸。
public ref class UsbDevice sealed : IClosable
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.UniversalApiContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
class UsbDevice final : IClosable
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
public sealed class UsbDevice : System.IDisposable
Public NotInheritable Class UsbDevice
Implements IDisposable
- 繼承
- 屬性
- 實作
Windows 需求
裝置系列 |
Windows 10 (已於 10.0.10240.0 引進)
|
API contract |
Windows.Foundation.UniversalApiContract (已於 v1.0 引進)
|
範例
此範例程式碼示範如何藉由指定廠商/產品識別碼來取得 UsbDevice 物件。
protected override async void OnLaunched(LaunchActivatedEventArgs args)
{
UInt32 vid = 0x045E;
UInt32 pid = 0x078F;
string aqs = UsbDevice.GetDeviceSelector(vid, pid);
var myDevices = await Windows.Devices.Enumeration.DeviceInformation.FindAllAsync(aqs, null);
if (myDevices.Count == 0)
{
ShowError("Device not found!");
return;
}
UsbDevice device = await UsbDevice.FromIdAsync(myDevices[0].Id);
// Send a control transfer.
UsbSetupPacket initSetupPacket = new UsbSetupPacket()
{
Request = initRequest,
RequestType = new UsbControlRequestType()
{
Recipient = UsbControlRecipient.DefaultInterface,
ControlTransferType = UsbControlTransferType.Vendor
}
};
await device.SendOutControlTransferAsync(initSetupPacket);
}
備註
取得 UsbDevice 物件的參考之前,您必須擁有下列其中一個識別碼:
- 實體裝置的廠商和產品識別碼。 這些識別碼是硬體識別碼字串的一部分。 或者,您可以從裝置管理員中的 Hardware Ids屬性衍生識別碼。 例如,如果 硬體識別碼 為
USB\VID_045E&PID_078E
,則廠商識別碼為0x045E
,而產品識別碼為0x078E
。 - 裝置介面 GUID。 您可以從DeviceInterfaceGuids登錄專案取得該 GUID:HKEY_LOCAL_MACHINE\System\CurrentControlSet\列舉\USB\< 裝置識別碼 >\< 實例識別碼 >\裝置參數
- 裝置的類別、子類別和通訊協定代碼。 您可以從 [裝置參數] 機碼下找到的CompatibleIds登錄專案取得該資訊。
若要取得 UsbDevice 物件:
- 取得進階查詢語法 (AQS) 字串,其中包含在列舉裝置集合中尋找裝置的搜尋準則。 如果您想要依廠商識別碼/產品識別碼或裝置介面 GUID 進行搜尋,請呼叫 GetDeviceSelector。 如果您想要依裝置類別搜尋,請呼叫 GetDeviceClassSelector。 這兩個呼叫都會擷取格式化的 AQS 字串。
- 將擷取的字串傳遞至 FindAllAsync。 呼叫會擷 取 DeviceInformationCollection 物件。
- 迴圈查看集合。 每次反覆運算都會取得 DeviceInformation 物件。
- 取得 DeviceInformation.Id 屬性值。 字串值是裝置實例路徑。 例如:
\\?\USB#VID_045E&PID_078F#6&1b8ff026&0&5#{dee824ef-729b-4a0e-9c14-b7117d33a817}
。 - 傳遞裝置實例字串並取得 UsbDevice 物件,以呼叫 FromIdAsync 。 然後,您可以使用 UsbDevice 物件來執行其他作業,例如傳送控制項傳輸。 當應用程式使用 UsbDevice 物件完成時,應用程式必須呼叫 Close來釋放它。
屬性
Configuration |
取得 物件,表示包含所有介面及其端點的 USB 組態。 |
DefaultInterface |
取得 物件,表示 USB 組態中的預設或第一個介面。 |
DeviceDescriptor |
取得 物件,表示 USB 裝置描述項。 |
方法
Close() |
釋放先前透過呼叫FromIdAsync取得之UsbDevice物件的參考。 |
Dispose() |
執行與釋放 (Free)、釋放 (Release) 或重設 Unmanaged 資源相關聯之應用程式定義的工作。 |
FromIdAsync(String) |
啟動建立 UsbDevice 物件的非同步作業。 |
GetDeviceClassSelector(UsbDeviceClass) |
取得進階查詢語法 (AQS) 字串,應用程式可以傳遞至 DeviceInformation.FindAllAsync ,以尋找特定類型的 USB 裝置。 |
GetDeviceSelector(Guid) |
根據應用程式指定的裝置介面 GUID 識別碼,取得 AQS) 字串 (進階查詢語法。 應用程式會將字串傳遞至 DeviceInformation.FindAllAsync ,以尋找特定類型的 USB 裝置。 |
GetDeviceSelector(UInt32, UInt32) |
根據應用程式指定的廠商和產品識別碼,取得 AQS) 字串 (進階查詢語法。 應用程式會將字串傳遞至 DeviceInformation.FindAllAsync ,以尋找特定類型的 USB 裝置。 |
GetDeviceSelector(UInt32, UInt32, Guid) |
根據應用程式指定的廠商、產品和裝置介面 GUID 識別碼,取得 AQS) 字串 (進階查詢語法。 應用程式會將字串傳遞至 DeviceInformation.FindAllAsync ,以尋找特定類型的 USB 裝置。 |
SendControlInTransferAsync(UsbSetupPacket) |
啟動從裝置的預設控制端點讀取的零長度 USB 控制項傳輸。 |
SendControlInTransferAsync(UsbSetupPacket, IBuffer) |
啟動 USB 控制傳輸,以從裝置的預設控制端點接收資料。 |
SendControlOutTransferAsync(UsbSetupPacket) |
啟動長度為零的 USB 控制項傳輸,以寫入裝置的預設控制端點。 |
SendControlOutTransferAsync(UsbSetupPacket, IBuffer) |
啟動 USB 控制項傳輸,以將資料傳送至裝置的預設控制端點。 |