Postup:
Do modulu zapište:
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 Const CCHDEVICENAME = 32
Private Const CCHFORMNAME = 32
Private Type ACL
AclRevision As Byte
Sbz1 As Byte
AclSize As Integer
AceCount As Integer
Sbz2 As Integer
End Type
Private Type DEVMODE
dmDeviceName As String * CCHDEVICENAME
dmSpecVersion As Integer
dmDriverVersion As Integer
dmSize As Integer
dmDriverExtra As Integer
dmFields As Long
dmOrientation As Integer
dmPaperSize As Integer
dmPaperLength As Integer
dmPaperWidth As Integer
dmScale As Integer
dmCopies As Integer
dmDefaultSource As Integer
dmPrintQuality As Integer
dmColor As Integer
dmDuplex As Integer
dmYResolution As Integer
dmTTOption As Integer
dmCollate As Integer
dmFormName As String * CCHFORMNAME
dmUnusedPadding As Integer
dmBitsPerPel As Integer
dmPelsWidth As Long
dmPelsHeight As Long
dmDisplayFlags As Long
dmDisplayFrequency As Long
End Type
Private Type SECURITY_DESCRIPTOR
Revision As Byte
Sbz1 As Byte
Control As Long
Owner As Long
Group As Long
Sacl As ACL
Dacl As ACL
End Type
Private Type PRINTER_INFO_2
pServerName As String
pPrinterName As String
pShareName As String
pPortName As String
pDriverName As String
pComment As String
pLocation As String
pDevMode As DEVMODE
pSepFile As String
pPrintProcessor As String
pDatatype As String
pParameters As String
pSecurityDescriptor As 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
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
Const PRINTER_ENUM_CONNECTIONS = &H4
Na formulář přidejte tlačítko a na jeho událost Click:
Private Sub Command1_Click()
Dim longbuffer() As Long
Dim printinfo() As PRINTER_INFO_2
Dim numbytes As Long
Dim numneeded As Long
Dim numprinters As Long
Dim c As Integer, retval As Long
'
Zjištění informací o lokálních tiskárnách
numbytes = 3076
ReDim longbuffer(0 To numbytes / 4) As Long
retval = EnumPrinters(PRINTER_ENUM_LOCAL Or _
PRINTER_ENUM_CONNECTIONS, "", 2, longbuffer(0),
_
numbytes, numneeded, numprinters)
If retval = 0 Then
Exit Sub
End If
ReDim printinfo(0 To numprinters - 1) As PRINTER_INFO_2
For c = 0 To numprinters - 1
printinfo(c).pPrinterName = Space(lstrlen(longbuffer(21
* c + 1)))
retval = lstrcpy(printinfo(c).pPrinterName,
longbuffer(21 * c + 1))
printinfo(c).Status = longbuffer(21 * c
+ 18)
printinfo(c).cJobs = longbuffer(21 * c +
19)
Next c
For c = 0 To numprinters - 1
Debug.Print printinfo(c).pPrinterName;
" Stav: "; printinfo(c).Status
Debug.Print "Počet úloh: ";
printinfo(c).cJobs
Next c
End Sub
|