AW: Code32Bit auf 64Bit Druckerfunktion
11.03.2021 20:45:46
Nepumuk
Hallo Andre,
das kannst du einfacher haben:
Option Explicit
Private Declare PtrSafe Function GetProfileStringA Lib "kernel32.dll" ( _
ByVal lpAppName As String, _
ByVal lpKeyName As String, _
ByVal lpDefault As String, _
ByVal lpReturnedString As String, _
ByVal nSize As Long) As Long
Private Const MAX_PRINTERS = 32&
Private lastrPrinterNames(MAX_PRINTERS) As String
Private lastrPrinterPorts(MAX_PRINTERS) As String
Private llngPrinterCount As Long
Public Sub GetPrinterList()
Dim strBuffer As String
Dim ialngIndex As Long
strBuffer = Space$(&H2000)
llngPrinterCount = 0
Call GetProfileStringA("PrinterPorts", vbNullString, _
vbNullString, strBuffer, Len(strBuffer))
Call GetPrinterNames(strBuffer)
Call GetPrinterPorts
For ialngIndex = 0 To llngPrinterCount - 1
Debug.Print lastrPrinterNames(ialngIndex) & " auf " & _
lastrPrinterPorts(ialngIndex)
Next
End Sub
Private Sub GetPrinterNames(ByVal strBuffer As String)
Dim lngIndex As Long
Dim strName As String
Do
lngIndex = InStr(strBuffer, vbNullChar)
If lngIndex > 0 Then
strName = Left$(strBuffer, lngIndex - 1)
If Len(Trim$(strName)) > 0 Then
lastrPrinterNames(llngPrinterCount) = Trim$(strName)
llngPrinterCount = llngPrinterCount + 1
End If
strBuffer = Mid$(strBuffer, lngIndex + 1)
Else
If Len(Trim$(strBuffer)) > 0 Then
lastrPrinterNames(llngPrinterCount) = Trim$(strBuffer)
llngPrinterCount = llngPrinterCount + 1
End If
strBuffer = ""
End If
Loop While (lngIndex > 0) And (llngPrinterCount < MAX_PRINTERS)
End Sub
Private Sub GetPrinterPorts()
Dim strBuffer As String
Dim lngIndex As Long
For lngIndex = 0 To llngPrinterCount - 1
strBuffer = Space$(&H400)
Call GetProfileStringA("PrinterPorts", lastrPrinterNames(lngIndex), _
vbNullString, strBuffer, Len(strBuffer))
Call GetPort(strBuffer, lastrPrinterPorts(lngIndex))
Next
End Sub
Private Sub GetPort(ByVal Buffer As String, PrinterPort As String)
Dim lngDriver As Long, lngPort As Long
PrinterPort = ""
lngDriver = InStr(1, Buffer, ",")
If lngDriver > 0 Then
lngPort = InStr(lngDriver + 1, Buffer, ",")
If lngPort > 0 Then
PrinterPort = Mid$(Buffer, lngDriver + 1, lngPort - lngDriver - 1)
End If
End If
End Sub
Gruß
Nepumuk