Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
960to964
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
960to964
960to964
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Drucker auslesen

Drucker auslesen
16.03.2008 13:42:43
Sonnenpeter
Hallo,
ich habe in der Recherche das nauchfolgende Makro gefunden.
Private Declare Function lstrcpy Lib "kernel32.dll" Alias "lstrcpyA" (ByVal lpString1 As String, ByVal lpString2 As Long) As Long
Private Declare Function lstrlen Lib "kernel32.dll" Alias "lstrlenA" (ByVal lpString As Long) As Long
Private Declare Function EnumPrinters Lib "winspool.drv" Alias "EnumPrintersA" (ByVal flags As Long, ByVal name As String, ByVal Level As Long, pPrinterEnum As Long, ByVal cdBuf As Long, pcbNeeded As Long, pcReturned As Long) As Long
Const PRINTER_ENUM_LOCAL = &H2
Private Type PRINTER_INFO_1
flags As Long
pDescription As String
pName As String
pComment As String
End Type

Private Sub Installierte_Drucker()
Dim LongBuffer() As Long
Dim Printinfo() As PRINTER_INFO_1
Dim NumBytes As Long
Dim NumNeeded As Long
Dim NumPrinters As Long
Dim c As Integer, RetVal As Long
NumBytes = 3076
ReDim LongBuffer(0 To NumBytes / 4) As Long
RetVal = EnumPrinters(PRINTER_ENUM_LOCAL, "", 1, LongBuffer(0), NumBytes, NumNeeded,  _
NumPrinters)
If RetVal = 0 Then
NumBytes = NumNeeded
ReDim LongBuffer(0 To NumBytes / 4) As Long
RetVal = EnumPrinters(PRINTER_ENUM_LOCAL, "", 1, LongBuffer(0), NumBytes, NumNeeded,  _
NumPrinters)
If RetVal = 0 Then
Debug.Print "Fehler aufgetretten!"
End
End If
End If
If NumPrinters  0 Then ReDim Printinfo(0 To NumPrinters - 1) As PRINTER_INFO_1
For c = 0 To NumPrinters - 1
Printinfo(c).flags = LongBuffer(4 * c)
Printinfo(c).pDescription = Space(lstrlen(LongBuffer(4 * c + 1)))
RetVal = lstrcpy(Printinfo(c).pDescription, LongBuffer(4 * c + 1))
Printinfo(c).pName = Space(lstrlen(LongBuffer(4 * c + 2)))
RetVal = lstrcpy(Printinfo(c).pName, LongBuffer(4 * c + 2))
Printinfo(c).pComment = Space(lstrlen(LongBuffer(4 * c + 3)))
RetVal = lstrcpy(Printinfo(c).pComment, LongBuffer(4 * c + 3))
Next c
For c = 0 To NumPrinters - 1
MsgBox Printinfo(c).pName
Next c
End Sub


Das Ganze funktioniert auch ohne Probleme. Als Ausgabe erhalte ich unter anderen "PDFCreator" geliefert.
Nur hätte ich gerne "PDFCreator auf Ne00:" oder "PDFCreator auf Ne01:" oder ähnliches.
'Application.ActivePrinter = "PDFCreator auf Ne00:"
Meine VBA- Kenntnisse reichen hierzu leider nicht.
Ist es Möglich auch "PDFCreator auf Ne00:" als Ausgabe zu erhalten, wen ja, wie?
Gruß Sonnenpeter

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
WshNetwork.SetDefaultPrinter
16.03.2008 14:58:54
ransi
Hallo Peter
Ich nehme an du möchtest den PDF-Drucker auswählen.
Das geht auch so:
Option Explicit

Public Sub PDF_Drucker_Einstellen()
Dim Mywsh
Dim Druckers
Dim I
Set Mywsh = CreateObject("WScript.Network")
Set Druckers = Mywsh.EnumPrinterConnections
For I = 0 To Druckers.Count - 1 Step 2
    If LCase(Druckers.Item(I + 1)) Like "*" & "pdf" & "*" Then
        Mywsh.SetDefaultPrinter Druckers.Item(I + 1)
        Exit For
    End If
Next
MsgBox ActivePrinter
End Sub

ransi

Anzeige
AW: WshNetwork.SetDefaultPrinter
16.03.2008 15:14:00
Sonnenpeter
Hallo Rainer,
erstmal Danke!
Nur ich möchte varieren zwischen einem Schwarzweisdrucker, einen Faxmaker und dem PDFCreator.
Da die Drucker im Netz jedoch varieren von Ne00 bis NE04 suche ich einen Weg ohne Einzelanpassung die Drucker auszuwählen.
Hast Du da auch noch eine Möglickeit?
Gruß
SP

AW: Drucker auslesen
16.03.2008 15:58:00
anton
Hallo ,
noch eine Variante:

Public Sub Druckerauflistung()  
  Const HKEY_current_user = &H80000001
  Set oReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv")  
  strKeyPath = "Software\Microsoft\Windows NT\CurrentVersion\Devices"
  oReg.EnumValues HKEY_current_user, strKeyPath, arrValueNames
  For i = 0 To UBound(arrValueNames)  
    oReg.GetStringValue HKEY_current_user, strKeyPath, arrValueNames(i), strValue  
    msg = msg & arrValueNames(i) & Replace(strValue, "winspool,", " auf ") & vbCr
  Next
  Set oReg = Nothing  
  MsgBox msg, vbInformation, "Druckerliste WMI"
End Sub  

mfg Anton

Anzeige
AW: Drucker auslesen
16.03.2008 16:26:00
Sonnenpeter
Hallo Anton,
Danke für diese Variante, ich denke, jetzt kann ich weiterbasteln.
Gruß / SP

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige