Ich bin wie immer für jede Hilfe dankbar
Uwe
Hallo Uwe,
folgendermaßen:
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
Private Const PRINTER_ENUM_LOCAL = &H2
Private Const PRINTER_ENUM_NETWORK = &H40
Private Const PRINTER_ENUM_CONNECTIONS = &H4
Private Const PRINTER_ENUM_DEFAULT = &H1
Private Const PRINTER_ENUM_REMOTE = &H10
Private Const PRINTER_ENUM_SHARED = &H20
Type PRINTER_INFO_5
pPrinterName As String
pPortName As String
Attributes As Long
DeviceNotSelectedTimeout As Long
TransmissionRetryTimeout As Long
End Type
Private Sub DruckerListe()
Dim arrBuffer() As Long, lngLänge As Long
Dim udtDruckerinfo() As PRINTER_INFO_5
Dim lngzähler As Long, lngAnzahl As Long
Dim lngRück As Long, lngBuffZähler As Long
Dim PrinterTyp As Long, strMeldung As String
ReDim arrBuffer(1)
'PrinterTyp = PRINTER_ENUM_CONNECTIONS
'PrinterTyp = PRINTER_ENUM_DEFAULT
PrinterTyp = PRINTER_ENUM_LOCAL
'Buffergröße ermitteln
lngRück = EnumPrinters(PrinterTyp, _
vbNullString, 1, arrBuffer(0), 0, _
lngLänge, lngAnzahl)
'Buffer bereitstellen
ReDim arrBuffer(0 To (lngLänge + 3) \ 4)
'Infos über Drucker holen
lngRück = EnumPrinters(PrinterTyp, vbNullString, _
5, arrBuffer(0), lngLänge, lngLänge, lngAnzahl)
If lngAnzahl = 0 Then MsgBox "Keine Drucker verfügbar"
ReDim udtDruckerinfo(1 To lngAnzahl)
For lngzähler = 1 To lngAnzahl
'Zeilenumbruch für Liste erzeugen
If lngAnzahl > 1 Then strMeldung = strMeldung & vbCrLf
With udtDruckerinfo(lngzähler)
'Druckername
.pPrinterName = Space(lstrlen(arrBuffer(lngBuffZähler)))
lstrcpy .pPrinterName, arrBuffer(lngBuffZähler)
lngBuffZähler = lngBuffZähler + 1
'Portname
.pPortName = Space(lstrlen(arrBuffer(lngBuffZähler)))
lstrcpy .pPortName, arrBuffer(lngBuffZähler)
lngBuffZähler = lngBuffZähler + 1
'Verschiedene Attribute
.Attributes = arrBuffer(lngBuffZähler * 4)
lngBuffZähler = lngBuffZähler + 1
'Timeout Druckerauswahl (was auch immer das ist?)
.DeviceNotSelectedTimeout = arrBuffer(lngBuffZähler * 4)
lngBuffZähler = lngBuffZähler + 1
'Timeout Übertragung (was auch immer das ist?)
.TransmissionRetryTimeout = arrBuffer(lngBuffZähler * 4)
lngBuffZähler = lngBuffZähler + 1
'String für Liste erzeugen
strMeldung = strMeldung & .pPrinterName
strMeldung = strMeldung & " auf "
strMeldung = strMeldung & .pPortName
End With
Next
'Liste anzeigen
MsgBox strMeldung
End Sub
MfG
Michael
Michael Schwimmer schrieb in Nachricht
<8u4cmg$bop$04$1...@news.t-online.com>...
wer kann denn noch bei diesem Problem helfen??
vielen Dank
Hallo Uwe,
wie schon als Antwort auf deine PM, kann ich
das nicht nachvollziehen. Der Port, der unter
HKEY_LOCAL_MACHINE\System\CurrentControlSet\
control\Print\Printers\DruckerXYZ\
angegeben ist, wird auch geliefert. Vergleiche mal die
Ausgabe mit dem Schlüssel.
Eventuell Fehler bei Copy-Paste?
Wenn du andere Infos über Drucker haben willst, musst du
die Funktion aufbohren, und perversere Strukturen benutzen.
Hier PRINTER_INFO_2
Type PRINTER_INFO_2
pServerName As Long
pPrinterName As Long
pShareName As Long
pPortName As Long
pDriverName As Long
pComment As Long
pLocation As Long
pDevMode As Long
pSepFile As Long
pPrintProcessor As Long
pDatatype As Long
pParameters As Long
pSecurityDescriptor As Long 'SECURITY_DESCRIPTOR
Attributes As Long
Priority As Long
DefaultPriority As Long
StartTime As Long
UntilTime As Long
Status As Long
cJobs As Long
AveragePPM As Long
End Type
MfG
Michael