Mal die andere Richtung: VB PrinterSettings in Windows

  • Allgemein

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von dive26.

    Mal die andere Richtung: VB PrinterSettings in Windows

    Hallo,

    weiß hier jemand vielleicht wo man unter Windows 8.1 den String wiederfindet der hiermit ausgelesen wird:
    Dim name = Printing.PrinterSettings.InstalledPrinters(i)

    Unter Geräte und Drucker in der Auflistung der Drucker wird für den Namen eines freigegebenen Druckers ein Ersatz verwendet.
    Zum Beispiel hat ein lokal installierter Drucker den Namen "Drucker1" und wird auch mit der obigen Methode als "Drucker1" ausgelesen.
    Ein freigegebener Drucker wird mit dem Namen "Drucker2 an PC1" aufgelistet aber mit der obigen Methode als "\\PC1\Drucker2". Das ist natürlich der Pfad mit dem der Drucker zu erreichen ist.
    Aber das steht so quasi nirgendwo mehr, wenn man so einen Drucker installiert hat. bzw. ich kann es nicht finden.

    Ich hatte einen Designfehler in einem Programm entdeckt, so ist mir das aufgefallen.
    Vielleicht steht es ja doch irgendwo. Vb muss es ja auch irgendwo herbekommen

    Viele Grüße
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Die einfachste Lösung ist, den Netzwerkpfad zum Drucker auch lokal zu verwenden "\\PC1\Drucker2" ;-).

    Ich stand auch vor diesem Problem bei meiner Kassensoftware.
    Beim Artikel in der zentralen Datenbank ist z.B. der Drucker "Kueche" hinterlegt. Auf dem lokalen Rechner wird dieser auch mit "Kueche" installiert. Auf dem Netzwerkrechner jedoch mit "\\Kasse2\Kueche".

    Ich bin den einfachen Weg gegangen und suche einfach in der Druckerenumeration in den Druckernamen ob der Betriff "Kueche" enthalten ist.
    Und schon gelöst.

    Jedoch ist der sauberste Weg gleich einen Netzwerkdrucker zu verwenden und auf allen Rechnern mit identischen Druckernamen zu installieren. Windows-Druckerfreigaben sind nicht das Gelbe vom Ei ;-).
    Liebe Grüße
    Roland Berghöfer

    Meine aktuellen und kostenlos verwendbaren Tools (mit VB.NET erstellt): freeremarkabletools.com | priconman.com | SimpleCalendar | AudibleTouch | BOComponent.com | bonit.at

    dive26 schrieb:

    Jedoch ist der sauberste Weg gleich einen Netzwerkdrucker zu verwenden und auf allen Rechnern mit identischen Druckernamen zu installieren. Windows-Druckerfreigaben sind nicht das Gelbe vom Ei ;-).

    Was ist bei der Freigabe denn das Problem? Abseits der Namen
    An sich ist es gar keine schlechte Sache, denn wenn man auf jedem System den Drucker eigenständig installiert, dann muss man auch an jedem System Änderungen vornehmen, falls nötig.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Haudruferzappeltnoch“ ()

    Was ist bei den Freigabe denn das Problem?


    Genau das was Du in Deinem Beitrag als Frage/Problemstellung geschrieben hast ;-).

    Aber um auf Deine Eingangsfrage zurückzukommen.
    In der Druckerauflistung kann man Name UND "Port" und noch vieles mehr auslesen (siehe Screenshot).
    Dann darfst aber nicht nur auf die einfache Variante Dim name = Printing.PrinterSettings.InstalledPrinters(i) zugreifen.

    Hier mein Code den ich dazu verwende:


    VB.NET-Quellcode

    1. GetPrinterDriver("HP Laserjet 1100C") 'übergibt den Treibernamen als String
    2. GetPrinterPort("HP Laserjet 1100C") 'übergibt den Port als String
    3. ''' <summary>
    4. ''' Gibt den Treibernamen für den angegebenen Drucker zurück
    5. ''' Imports System.Management nicht vergessen!!!
    6. ''' </summary>
    7. ''' <param name="Druckername"></param>
    8. ''' <returns></returns>
    9. ''' <remarks></remarks>
    10. Public Function GetPrinterDriver(Druckername As String) As String
    11. Dim moReturn As Management.ManagementObjectCollection
    12. Dim moSearch As Management.ManagementObjectSearcher
    13. Dim mo As Management.ManagementObject
    14. moSearch = New Management.ManagementObjectSearcher("Select * from Win32_Printer ")
    15. moReturn = moSearch.Get
    16. For Each mo In moReturn
    17. If mo("Name").ToString = Druckername Then
    18. Return mo("DriverName").ToString
    19. Exit Function
    20. End If
    21. Next
    22. Return ""
    23. End Function
    24. ''' <summary>
    25. ''' Gibt den Portnamen für den angegebenen Drucker zurück
    26. ''' Imports System.Management nicht vergessen!!!
    27. ''' </summary>
    28. ''' <param name="Druckername"></param>
    29. ''' <returns></returns>
    30. ''' <remarks></remarks>
    31. Public Function GetPrinterPort(Druckername As String) As String
    32. Dim moReturn As Management.ManagementObjectCollection
    33. Dim moSearch As Management.ManagementObjectSearcher
    34. Dim mo As Management.ManagementObject
    35. moSearch = New Management.ManagementObjectSearcher("Select * from Win32_Printer ")
    36. moReturn = moSearch.Get
    37. For Each mo In moReturn
    38. If mo("Name").ToString = Druckername Then
    39. Return mo("PortName").ToString
    40. Exit Function
    41. End If
    42. Next
    43. Return ""
    44. End Function
    Bilder
    • 01082022142306.jpg

      85,96 kB, 622×174, 40 mal angesehen
    Liebe Grüße
    Roland Berghöfer

    Meine aktuellen und kostenlos verwendbaren Tools (mit VB.NET erstellt): freeremarkabletools.com | priconman.com | SimpleCalendar | AudibleTouch | BOComponent.com | bonit.at