EnumJobs返回作业个数老是为0??

north00 2013-03-22 09:08:07
各位高手,在VBA中使用EnumJobs监控网络打印机,结果发现返回作业的个数老为0,但是这个函数本身返回值为1,也就是意味着连接上打印机了,代码如下:

Private Sub CommandButton1_Click()

Dim sPrintName1 As String
Dim hPrinter As Long
Dim pDefault As PRINTER_DEFAULTS

Dim lngJobsFirstJob As Long, lngJobsEnumJob As Long, lngJobsLevel As Long
Dim byteJobsBuffer() As Byte
Dim lngJobsNeeded As Long
Dim lngJobsReturned As Long
Dim lngResult As Long
Dim udtJobInfo1() As JOB_INFO_1

Dim byteBuffer(64) As Byte

On Error Resume Next

sPrintName1 = "FX DocuCentre-IV C2265 PCL 6 (B8#2F)"

lngResult = OpenPrinter(sPrintName1, hPrinter, pDefault)

lngJobsFirstJob = 0 ' zero-based position within the print queue of the first print job to enumerate
lngJobsEnumJob = 99 ' total number of print jobs to enumerate

lngJobsLevel = 1 ' Specifies whether the function should use JOB_INFO_1
' or JOB_INFO_2 structures to store data for the enumerated jobs

lngResult = EnumJobs(hPrinter, lngJobsFirstJob, lngJobsEnumJob, lngJobsLevel, ByVal 0&, 0, lngJobsNeeded, lngJobsReturned)

If lngJobsNeeded > 0 Then
MsgBox lngJobsReturned
ReDim byteJobsBuffer(lngJobsNeeded - 1)
ReDim udtJobInfo1(lngJobsNeeded - 1)

lngResult = EnumJobs(hPrinter, lngJobsFirstJob, lngJobsEnumJob, _
lngJobsLevel, byteJobsBuffer(0), lngJobsNeeded, _
lngJobsNeeded, lngJobsReturned)

If lngJobsReturned > 0 Then

MoveMemory udtJobInfo1(0), byteJobsBuffer(0), Len(udtJobInfo1(0)) * lngJobsReturned

For lngjobscount = 0 To lngJobsReturned - 1

With udtJobInfo1(lngjobscount)

' Get the document name
lngResult = lstrcpy(byteBuffer(0), ByVal .pDocument)

strDocument = StrConv(byteBuffer(), vbUnicode)
' Document name has been returned as null terminated-string
strDocument = Left$(strDocument, InStr(strDocument, vbNullChar) - 1)

Sheet1.Range("D" & lngjobscount + 2) = strDocument


' Get the document's owner name
lngResult = lstrcpy(byteBuffer(0), ByVal .pUserName)

strOwnerName = StrConv(byteBuffer(), vbUnicode)
' Document's owner name has been returned as null-terminated string
strOwnerName = Left$(strOwnerName, InStr(strOwnerName, vbNullChar) - 1)

Sheet1.Range("C" & lngjobscount + 2) = strOwnerName


End With

Next lngjobscount

Else
' number of jobs returned = 0 (no jobs)
lngjobscount = 0

End If

End If

lngResult = ClosePrinter(hPrinter)


End Sub
...全文
33 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

7,762

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧