CTI Comet USB AutoFind

As the CTI Comet USB no longer works with fixed COM ports, some users may find it harder to setup their software with the correct COM port. To aid developers in making it easier for their customers, we have developed the following code which we will provide under the MIT Licence. (LICENCE) This means that you are free to use the code or binary as you wish however we will provide NO support for it in any way!

The code is reasonably simple, it queries the computer for all CTI Comet USB devices and returns the result as a string. There are two different ways this could be used.

  1. If your software uses VB.NET you could incorporate the code into your solution.
  2. Use the included executable and call from within your software parsing the result.

When the code/program is executed, it will print the COM ports of all the CTI Comet USB devices connected to the computer. This will either be a no devices or a single COM port as below:


Or it will output multiple COM ports with the character ; seperating them as below:

The code requires the .NET framework v4 (Download) (Microsoft Download Link) to satisfy the System.Management import.

Files you can download are below:

Below is the code used in the software that was written using Microsoft Visual Studio Express, remember to include the LICENCE if you copy this code. And dont forget to add System.Management under project references for the .NET project.

This code has been tested on Windows Vista and 7.

  1. Imports System.Management
  2.  
  3. Module MainModule
  4.  
  5.     Sub Main()
  6.  
  7.         ' Create the dictionary to hold all COMETS.
  8.        Dim result As New Dictionary(Of String, String)
  9.  
  10.         ' Search for all COMET devices.
  11.        result = findCOM()
  12.  
  13.         ' Output the result to the console.
  14.        Dim i As Integer
  15.         Dim str As String
  16.         str = ""
  17.         i = 0
  18.         For Each foundPort As KeyValuePair(Of String, String) In result
  19.             If Not (i = 0) Then
  20.                 str += ";"
  21.             End If
  22.             str += "COM" + foundPort.Key
  23.             i = i + 1
  24.         Next
  25.         System.Console.Write(str)
  26.  
  27.     End Sub
  28.  
  29.     ' Returns a list of COM port numbers for all attached CTI Comet USB devices.
  30.    ' Formatted with a ; between each device.
  31.    Private Function findCOM()
  32.         Dim identPnpPorts As New Dictionary(Of String, String)
  33.         Dim returnSerials As New Dictionary(Of String, String)
  34.         Dim portNameData As String
  35.         Dim comPortNumber As String
  36.  
  37.         Try
  38.             Dim portSearcher As New ManagementObjectSearcher("\root\CIMV2", "Select Name from Win32_PnPEntity")
  39.             For Each port As System.Management.ManagementObject In portSearcher.Get()
  40.  
  41.                 'search all of the PNP entries for the device
  42.                If port("Name").ToString.ToUpper.Contains("(COM") Then
  43.                     portNameData = port("Name").ToString
  44.                     comPortNumber = port("Name").ToString.Substring(port("Name").ToString.IndexOf("(COM") + 4)
  45.                     comPortNumber = comPortNumber.TrimEnd(")"c)
  46.                     identPnpPorts.Add(comPortNumber, portNameData)
  47.                 End If
  48.             Next
  49.         Catch ex As Exception
  50.             'Need to handle possible errors
  51.        End Try
  52.  
  53.         For Each foundPort As KeyValuePair(Of String, String) In identPnpPorts
  54.             If (foundPort.Value.Contains("CTI Comet USB COM Port")) Then
  55.                 returnSerials.Add(foundPort.Key, foundPort.Value)
  56.             End If
  57.         Next
  58.  
  59.         Return returnSerials
  60.  
  61.     End Function
  62. End Module