Imports Microsoft.Win32
Imports System.Drawing.Printing
Public Class Form1
' Importación de libreria
' En el Load de un form pon lo siguiente:
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Try
Dim ListBox1 As New ListBox
Dim pd As New PrintDocument
Dim Impresoras As String
Dim nombre As String
' Default printer
Dim s_Default_Printer As String = pd.PrinterSettings.PrinterName
' recorre las impresoras instaladas
For Each Impresoras In PrinterSettings.InstalledPrinters
ListBox1.Items.Add(Impresoras.ToString)
Next
' selecciona la impresora predeterminada
nombre = s_Default_Printer
'**************************************************************
Dim Impresora As String = nombre
Dim Key As RegistryKey
Dim KeyPrinter As RegistryKey
Dim Keys() As String
Dim Valores() As String
Dim Puerto As String
Dim i As Long
Dim x As Long
' Me posiciono en la clave del registro de Windows donde se almacenan las impresoras configuradas
Key = Microsoft.Win32.Registry.LocalMachine
Key = Key.OpenSubKey("SOFTWARE\Microsoft\Windows NT\CurrentVersion\Print\Printers", False)
' Recupero las subclaves de la clave principal
Keys = Key.GetSubKeyNames()
For i = 0 To UBound(Keys)
' Compruebo el nombre de la clave por si coincide con la impresora
If UCase(Keys(i).ToString) = UCase(Impresora) Then
' Leo los valores de la clave de la impresora
KeyPrinter = Microsoft.Win32.Registry.LocalMachine
KeyPrinter = KeyPrinter.OpenSubKey("SOFTWARE\Microsoft\Windows NT\CurrentVersion\Print\Printers\" & Keys(i).ToString, False)
Puerto = KeyPrinter.GetValue("port", "")
If Puerto = "" Then
MsgBox("No se ha encontrado la clave PORT de la impresora seleccionada", MsgBoxStyle.Critical)
Else
MsgBox("El puerto de la impresora " & Impresora & " es " & Puerto, MsgBoxStyle.Information)
End If
i = UBound(Keys)
End If
Next i
Catch ex As Exception
End Try
End Sub
End Class