1

Windows プラットフォームで USB からシリアル ポートを見つけるための簡単なコードを書いています。ポートが必要な場合 (VID/PID 番号でフィルター可能)、プログラムはポートを開きます。

VendorID と ProductID のプロパティを持つ MonkeyBread プラグイン WinUSBDeviceMBS を使用して、特定の USB ポートを選択できます。以下のサンプルコード。

Dim devices() As WinUSBDeviceMBS = WinUSBDeviceMBS.devices
For Each d As WinUSBDeviceMBS in devices
    msgbox d.vendor+"-" + str(Hex(d.VendorID),"0000") + " " +d.product+"-" + str(Hex(d.ProductID),"0000")+d.serialnumber
Next
'this will give you a message box with "FTDI-0403 FT232R USB UART-6001 A60251HV"

また、Serial.serialport.Name の助けを借りて、シリアル デバイスの COM ポート名を取得できます。薄暗い i、整数カウントとしてカウント = System.SerialPortCount

for i = 0 to count - 1
    Msgbox System.SerialPort( i ).Name
next 
'this will popup msgbox with "COM1" or "COM3"... all the valid port number, but no vendor info or product info

しかし、これら2つを一致させる方法が見つかりません。何か案は?

4

1 に答える 1

1

Windows のみを使用していると仮定すると、レジストリを使用してこの情報を取得する必要があります。

システム上のすべての COM ポートのリストは、次の場所で取得できますHKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM。値はタイプに応じて一覧表示されるため、実際のシリアル ポートは名前 \Device\Serialn とデータ COMxx で表示されますが、他のデバイスは異なる場合があります。ここを見ると、COM ポートが属するデバイスのタイプをフィルタリングするために使用できる名前を見つけることができます。次に、これらをアプリケーションにリストするだけです。

DeclareWindows DLL の API にフックするステートメントを 使用して Xojo でこれを行うことができます: https://docs.xojo.com/index.php/Declare

ここにレジストリ API 関数に関するドキュメントがあります。これらはここで説明されているように使用されますが、Declare上記のステートメントを使用します: http://support.microsoft.com/kb/145679

于 2013-11-11T04:31:32.680 に答える