1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| Option Explicit
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 Type PRINTER_INFO_1
flags As Long
pDescription As String
pName As String
pComment As String
End Type
Private Sub UserForm_Initialize()
Dim mamem() As Long, printinfo() As PRINTER_INFO_1, numbytes As Long
Dim nums As Long, nbimpris As Long
Dim i As Integer, rt As Long
numbytes = 3076
ReDim mamem(0 To numbytes / 4) As Long
rt = EnumPrinters(&H2, "", 1, mamem(0), numbytes, nums, nbimpris)
If rt = 0 Then
numbytes = nums
ReDim mamem(0 To numbytes / 4) As Long
rt = EnumPrinters(&H2, "", 1, mamem(0), numbytes, nums, nbimpris)
If rt = 0 Then
MsgBox "Could not successfully enumerate the printes."
End
End If
End If
If nbimpris <> 0 Then ReDim printinfo(0 To nbimpris - 1) As PRINTER_INFO_1
For i = 0 To nbimpris - 1
printinfo(i).flags = mamem(4 * i)
printinfo(i).pDescription = Space(lstrlen(mamem(4 * i + 1)))
rt = lstrcpy(printinfo(i).pDescription, mamem(4 * i + 1))
printinfo(i).pName = Space(lstrlen(mamem(4 * i + 2)))
rt = lstrcpy(printinfo(i).pName, mamem(4 * i + 2))
printinfo(i).pComment = Space(lstrlen(mamem(4 * i + 3)))
Next i
For i = 0 To nbimpris - 1
List1.AddItem printinfo(i).pName
Next i
End Sub |
Partager