继续 莫名其妙的问题Printers.Count ,今天上班,接着研究这个问题,发现调用API函数OK
[quote]
Private Const PRINTER_ENUM_CONNECTIONS = &H4
Private 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 Type PRINTER_INFO_4
pPrinterName As String
pServerName As String
Attributes 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
Private Declare Function PtrToStr Lib "Kernel32" Alias "lstrcpyA" _
(ByVal RetVal As String, ByVal Ptr As Long) As Long
Private Declare Function StrLen Lib "Kernel32" Alias "lstrlenA" _
(ByVal Ptr As Long) As Long
Sub EnumeratePrinters1()
Dim Success As Boolean, cbRequired As Long, cbBuffer As Long
Dim Buffer() As Long, nEntries As Long
Dim I As Long, PFlags As Long, PDesc As String, PName As String
Dim PComment As String, Temp As Long
cbBuffer = 3072
ReDim Buffer((cbBuffer \\ 4) – 1) As Long
Success = EnumPrinters(PRINTER_ENUM_CONNECTIONS Or _
PRINTER_ENUM_LOCAL, _
vbNullString, _
1, _
Buffer(0), _
cbBuffer, _
cbRequired, _
nEntries)
If Success Thenwww.yippeesoft.com
If cbRequired > cbBuffer Then
cbBuffer = cbRequired
Debug.Print "Buffer too small. Trying again with " & _
cbBuffer & " bytes."
ReDim Buffer(cbBuffer \\ 4) As Long
Success = EnumPrinters(PRINTER_ENUM_CONNECTIONS Or _
PRINTER_ENUM_LOCAL, _
vbNullString, _
1, _
Buffer(0), _
cbBuffer, _
cbRequired, _
nEntries)
If Not Success Then
Debug.Print "Error enumerating printers."
Exit Sub
End If
End If
Debug.Print "There are " & nEntries & _
" local and connected printers."
For I = 0 To nEntries – 1
PFlags = Buffer(4 * I)
PDesc = Space$(StrLen(Buffer(I * 4 + 1)))
Temp = PtrToStr(PDesc, Buffer(I * 4 + 1))
PName = Space$(StrLen(Buffer(I * 4 + 2)))
Temp = PtrToStr(PName, Buffer(I * 4 + 2))
PComment = Space$(StrLen(Buffer(I * 4 + 2)))
Temp = PtrToStr(PComment, Buffer(I * 4 + 2))
Debug.Print PFlags, PDesc, PName, PComment
Next I
Else
Debug.Print "Error enumerating printers."
End If
End Sub
Sub EnumeratePrinters4()
Dim Success As Boolean, cbRequired As Long, cbBuffer As Long
Dim Buffer() As Long, nEntries As Long
Dim I As Long, PName As String, SName As String
Dim Attrib As Long, Temp As Long
cbBuffer = 3072www.yippeesoft.com
ReDim Buffer((cbBuffer \\ 4) – 1) As Long
Success = EnumPrinters(PRINTER_ENUM_CONNECTIONS Or _
PRINTER_ENUM_LOCAL, _
vbNullString, _
4, _
Buffer(0), _
cbBuffer, _
cbRequired, _
nEntries)
If Success Thenwww.yippeesoft.com
If cbRequired > cbBuffer Then
cbBuffer = cbRequired
Debug.Print "Buffer too small. Trying again with " & _
cbBuffer & " bytes."
ReDim Buffer(cbBuffer \\ 4) As Long
Success = EnumPrinters(PRINTER_ENUM_CONNECTIONS Or _
PRINTER_ENUM_LOCAL, _
vbNullString, _
4, _
Buffer(0), _
cbBuffer, _
cbRequired, _
nEntries)
If Not Success Then
Debug.Print "Error enumerating printers."
Exit Sub
End If
End Ifwww.yippeesoft.com
Debug.Print "There are " & nEntries & _
" local and connected printers."
For I = 0 To nEntries – 1
PName = Space$(StrLen(Buffer(I * 3)))
Temp = PtrToStr(PName, Buffer(I * 3))
SName = Space$(StrLen(Buffer(I * 3 + 1)))
Temp = PtrToStr(SName, Buffer(I * 3 + 1))
Attrib = Buffer(I * 3 + 2)
MsgBox "Printer: " & PName \’ + "Server: " & Str(SName) + "Attributes: " & Str(Hex$(Attrib))
Next I
Else
MsgBox "Error enumerating printers."
End If
End Sub
[/quote]
难道要我把那一块代码改为API函数?
历史博文
- 20081118 bios aa - 2009
- 20071024 kvm uclinux error - 2008
- 20070221 cvs out of memory - 2007
- 0318 东方红 朗诵词 音乐舞蹈史诗《东方红》 - 2006
- 不可一世史館莊姜 - 2005
- Process.StandardOutput 属性 - 2005
- 莫名其妙的问题Printers.Count 3 - 2005