2,723
社区成员
发帖
与我相关
我的任务
分享
Declare Long GlobalAlloc in win32api ;
Long uFlags, ;
Long dwBytes
Declare Long GlobalFree in win32api ;
Long hMem
Declare Long OpenPrinter in winspool.drv ;
String pPrinterName, ;
Long @ phPrinter, ;
String pDefault
Declare Long ClosePrinter in winspool.drv ;
Long @ phPrinter
Declare Long EnumJobs in winspool.drv ;
Long hPrinter, ;
Long FirstJob, ;
Long NoJobs, ;
Long Level, ;
Long pJob, ;
Long cbBuf, ;
Long @ pcbNeeded, ;
Long @ pcReturned
Declare Long SystemTimeToTzSpecificLocalTime in win32api ;
String lpTimeZoneInformation, ;
String lpUniversalTime, ;
String @ lpLocalTimein
Declare Long GetLastError in win32api
m.cPrinterName = GetPrinter()
If Empty(m.cPrinterName)
MessageBox('没有选择要获取打印队列信息的打印机。', 64, '')
Return .f.
EndIf
m.hPrinter = 0
If 0 == OpenPrinter(m.cPrinterName + Chr(0), @ m.hPrinter, Null)
MessageBox('打开打印机失败。', 64, '')
Return .f.
EndIf
Try
m.pMem = 0
m.nNeedBytes = 0
m.nJobInfo = 0
If 0 == EnumJobs(m.hPrinter, 0, 100, 1, 0, 0, @ m.nNeedBytes, @ m.nJobInfo)
m.nErrNo = GetLastError()
If 122 != m.nErrNo
Error '枚举打印任务准备工作失败。错误码:' + Transform(m.nErrNo)
EndIf
EndIf
m.pMem = GlobalAlloc(0x0040, m.nNeedBytes)
If 0 == m.pMem
Error '分配内存失败。错误码:' + Transform(GetLastError())
EndIf
If 0 == EnumJobs(m.hPrinter, 0, 100, 1, m.pMem, m.nNeedBytes, @ m.nNeedBytes, @ m.nJobInfo)
Error '枚举打印任务失败。错误码:' + Transform(GetLastError())
EndIf
m.oErr = Null
Catch to m.oErr
EndTry
If IsNull(m.oErr)
m.cResult = Sys(2600, m.pMem, m.nNeedBytes)
Create Cursor printertask ( ;
文档名 V(50) ;
, 状态 V(50) ;
, 机器名 V(50) ;
, 所有者 V(50) ;
, 总页数 I ;
, 已打印页数 I ;
, 提交时间 T)
m.nStructSize = 12*4 + 16
m.oo = NewObject('Empty')
For m.ii = 1 to m.nJobInfo
m.cBlock = Substr(m.cResult, 1 + (m.ii - 1) * m.nStructSize, m.nStructSize)
m.cc = Sys(2600, CToBin(Substr(m.cBlock, 1 + 2*4, 4), 'rs'), 100)
m.nn = At(Chr(0), m.cc)
If m.nn > 0
m.cc = Left(m.cc, m.nn - 1)
EndIf
AddProperty(m.oo, '机器名', m.cc)
m.cc = Sys(2600, CToBin(Substr(m.cBlock, 1 + 3*4, 4), 'rs'), 100)
m.nn = At(Chr(0), m.cc)
If m.nn > 0
m.cc = Left(m.cc, m.nn - 1)
EndIf
AddProperty(m.oo, '所有者', m.cc)
m.cc = Sys(2600, CToBin(Substr(m.cBlock, 1 + 4*4, 4), 'rs'), 100)
m.nn = At(Chr(0), m.cc)
If m.nn > 0
m.cc = Left(m.cc, m.nn - 1)
EndIf
AddProperty(m.oo, '文档名', m.cc)
m.nn = CToBin(Substr(m.cBlock, 1 + 6*4, 4), 'rs')
If 0 == m.nn
m.nn = CToBin(Substr(m.cBlock, 1 + 7*4, 4), 'rs')
m.cc = ''
If Bittest(m.nn, 0)
m.cc = m.cc + ' - 已暂停'
EndIf
If Bittest(m.nn, 1)
m.cc = m.cc + ' - 错误'
EndIf
If Bittest(m.nn, 2)
m.cc = m.cc + ' - 正在删除'
EndIf
If Bittest(m.nn, 3)
m.cc = m.cc + ' - 脱机打印中'
EndIf
If Bittest(m.nn, 4)
m.cc = m.cc + ' - 正在打印'
EndIf
If Bittest(m.nn, 5)
m.cc = m.cc + ' - 已离线'
EndIf
If Bittest(m.nn, 6)
m.cc = m.cc + ' - 换页中'
EndIf
If Bittest(m.nn, 6)
m.cc = m.cc + ' - 打印完成'
EndIf
If Bittest(m.nn, 6)
m.cc = m.cc + ' - 已删除'
EndIf
m.cc = Ltrim(m.cc, ' - ')
Else
m.cc = Sys(2600, m.nn, 100)
m.nn = At(Chr(0), m.cc)
If m.nn > 0
m.cc = Left(m.cc, m.nn - 1)
EndIf
EndIf
AddProperty(m.oo, '状态', m.cc)
m.nn = CToBin(Substr(m.cBlock, 1 + 10*4, 4), 'rs')
AddProperty(m.oo, '总页数', m.nn)
m.nn = CToBin(Substr(m.cBlock, 1 + 11*4, 4), 'rs')
AddProperty(m.oo, '已打印页数', m.nn)
m.cc = Substr(m.cBlock, 1 + 12*4, 16)
m.cc2 = Replicate(Chr(0), 16)
SystemTimeToTzSpecificLocalTime(Null, m.cc, @ m.cc2)
m.cc = Transform(CToBin(Substr(m.cc2, 1, 2)+0h0000, 'rs')) ;
+ '-' + Transform(CToBin(Substr(m.cc2, 3, 2)+0h0000, 'rs')) ;
+ '-' + Transform(CToBin(Substr(m.cc2, 7, 2)+0h0000, 'rs')) ;
+ ' ' + Transform(CToBin(Substr(m.cc2, 9, 2)+0h0000, 'rs')) ;
+ ':' + Transform(CToBin(Substr(m.cc2, 11, 2)+0h0000, 'rs')) ;
+ ':' + Transform(CToBin(Substr(m.cc2, 13, 2)+0h0000, 'rs'))
AddProperty(m.oo, '提交时间', Ctot(m.cc))
Append blank
Gather name m.oo
EndFor
Else
Use in Select('printertask')
MessageBox(m.oErr.Message)
EndIf
If 0 != m.pMem
GlobalFree(m.pMem)
EndIf
If 0 != m.hPrinter
ClosePrinter(m.hPrinter)
EndIf
If Used('printertask')
Goto top in printertask
Browse nowait name oo
m.oo.Autofit()
EndIf