最近用aardio写了一个打印管理工具,写了一个简单的库,实现了简单的打印机和打印任务管理功能,分享给大家一起学习。
库文件:printMGT
//Printer MGT
//打印机控制 by breezee
namespace printMGT;
import com.wmi;
//获取所有打印机
getAllPrinter = function() {
//返回数据结构:
//{name=打印机名, status=打印机状态, portName=端口名}
var getPrinterStatus = function(statusCode) { //返回打印机状态
select(statusCode) {
case 1 return "其他"
case 2 return "未知"
case 3 return "空闲"
case 4 return "正在打印"
case 5 return "预热"
case 6 return "停止打印"
case 7 return "脱机"
else return "错误"
}
}
var prtList = {};
//https://learn.microsoft.com/zh-cn/windows/win32/cimwin32prov/win32-printer?redirectedfrom=MSDN
//https://wutils.com/wmi/root/cimv2/win32_printer/
//DeviceID 系统上打印机的唯一标识符, PortName 端口, PrinterState 打印机的状态信息与逻辑设备
for index, wmiPrinter in com.wmi.each("SELECT * FROM Win32_Printer") {
..table.push( prtList, {name = wmiPrinter.Name; status = wmiPrinter.WorkOffline?"脱机":getPrinterStatus(wmiPrinter.PrinterStatus), portName = wmiPrinter.PortName}); //打印机名称,打印机状态:就绪/脱机/正在打印
}
return prtList;
}
//获取打印任务
getPrintQueue = function(printerName) { //如果没有指定打印机,则读取所有打印任务
//返回数据结构:
//{name="打印机名称";jobs={
{"文档名","状态","所有者","页数","文档大小","纸张大小","提交时间","端口","优先级","任务ID","打印机名称"}}}
var jobs = {};
for index, wmiJob in com.wmi.each("SELECT * FROM Win32_PrintJob") {
//Name 打印机名+作业的标识符号; DriverName 用于打印作业的打印机驱动程序的名称;
//JobId 作业的标识符; JobStatus 作业状态; Status 对象的当前状态; StatusMask 与此打印作业相关的可能状态的掩码
//StartTime 作业开始的时间, ElapsedTime 作业执行的时间长度, TimeSu