Неточность в отображении установленных принтеров в vb.net

Я хочу, чтобы все принтеры были установлены или подключены к ПК в dropdownlist.

Я сделал для этого следующий код.

Public Function FillddlPrinters() As Boolean
        Dim printersettings As New System.Drawing.Printing.PrinterSettings
        Dim Cnt As Integer = 0

        Me.ddlPrinter.Items.Clear()

        For i = 0 To Drawing.Printing.PrinterSettings.InstalledPrinters.Count - 1

            If Drawing.Printing.PrinterSettings.InstalledPrinters(i).ToString.ToUpper.Trim.Contains("XPS") Or _
                  Drawing.Printing.PrinterSettings.InstalledPrinters(i).ToString.ToUpper.Trim.Contains("FAX") Or _
                  Drawing.Printing.PrinterSettings.InstalledPrinters(i).ToString.ToUpper.Trim.Contains("PDF") Then

                Continue For

            End If

            Me.ddlPrinter.Items.Insert(Cnt, Drawing.Printing.PrinterSettings.InstalledPrinters(i))
            Cnt += 1
        Next

        Me.ddlPrinter.Items.Insert(0, "Select Printer")

    End Function

Но это не дает мне все принтеры. Я не понимаю, где это идет не так.

Принтер, который не отображается, находится в сети. И я успешно подключен к сети. Но хотя это не отображается.

Тем временем он работает нормально на другом компьютере в другой сети. Чем не на моем??

Пожалуйста, помогите мне с этим.


person Pratik Soni    schedule 15.05.2014    source источник
comment
Ваш код не будет отображать принтеры, находящиеся в сети, но принтеры, установленные локально на машине.   -  person Matt Wilko    schedule 15.05.2014
comment
Тогда как я могу добавить все принтеры, доступные как локально, так и в сети?   -  person Pratik Soni    schedule 15.05.2014


Ответы (1)


Ваш код покажет только те принтеры, которые установлены локально. Если вы хотите найти принтеры в сети, вы можете использовать запрос WMI.

Добавьте ссылку на пространство имен System.Management, а затем используйте этот код:

    ' Use the ObjectQuery to get the list of configured printers
    Dim oquery As System.Management.ObjectQuery = New System.Management.ObjectQuery("SELECT * FROM Win32_Printer")

    Dim mosearcher As System.Management.ManagementObjectSearcher = New System.Management.ManagementObjectSearcher(oquery)

    Dim moc As System.Management.ManagementObjectCollection = mosearcher.Get()

    For Each mo As System.Management.ManagementObject In moc
        Debug.WriteLine(mo.ToString)
    Next

Изменено из этого источника: http://www.dotnetcurry.com/showarticle.aspx?ID= 148

person Matt Wilko    schedule 15.05.2014