16,472
社区成员
发帖
与我相关
我的任务
分享
void fu_PrintJob()
{
JOB_INFO_1 *pJob1;
BOOL bRet;
DWORD dwNeed,dwItems;
long lRow,lRowCount;
CString strId,strRq,strSj,strUser,strPrinterName,strDocName,strPageCount; //日期、时间、使用者、打印机名称、文档名称、总页数
SYSTEMTIME t_UCT,t_Local; //UCT时间和本地时间
int k;
TIME_ZONE_INFORMATION timeinfo;
//获取打印作业数量
bRet = ::EnumJobs(hPrinter,0,0XFFFFFFFF,1,NULL,0,&dwNeed,&dwItems);
//分配内存空间
pJob1 = (JOB_INFO_1*)malloc(dwNeed);
//分别获取打印作业
bRet = ::EnumJobs(hPrinter,0,0XFFFFFFFF,1,(LPBYTE)pJob1,dwNeed,&dwNeed,&dwItems);
if(bRet)
{
for(k=0;k<dwItems;k++)
{
strId.Format("%d",pJob1[k].JobId); //ID
t_UCT = pJob1[k].Submitted;
::GetTimeZoneInformation(&timeinfo);
::SystemTimeToTzSpecificLocalTime(&timeinfo,&t_UCT,&t_Local);
strRq.Format("%d-%02d-%02d",
t_Local.wYear,
t_Local.wMonth,
t_Local.wDay
); //打印日期
strSj.Format("%d:%d:%d",
t_Local.wHour,
t_Local.wMinute,
t_Local.wSecond
); //打印时间
strPrinterName.Format("%s",pJob1[k].pPrinterName); //打印机名称
strDocName.Format("%s",pJob1[k].pDocument); //文档名称
strUser.Format("%s",pJob1[k].pUserName); //使用者名称
strPageCount.Format("%d",pJob1[k].TotalPages +1); //总页数,不知道为何总为0
//写入列表
lRowCount = pList->GetItemCount();
lRow = pList->InsertItem(lRowCount +1 ,strId);
//日期
pList->SetItemText(lRow,1,strRq);
//时间
pList->SetItemText(lRow,2,strSj);
//打印机名称
pList->SetItemText(lRow,3,strPrinterName);
//文档名称
pList->SetItemText(lRow,4,strDocName);
//所有者
pList->SetItemText(lRow,5,strUser);
//总页数
pList->SetItemText(lRow,6,strPageCount);
}
}
else
{
//strText += "枚举打印作业失败";
}
//释放内存空间
free(pJob1);
//写日志
fu_WriteLog(strId,strRq,strSj,strPrinterName,strDocName,strUser,strPageCount);
}
typedef struct _JOB_INFO_1 {
DWORD JobId;
LPTSTR pPrinterName;
LPTSTR pMachineName;
LPTSTR pUserName;
LPTSTR pDocument;
LPTSTR pDatatype;
LPTSTR pStatus;
DWORD Status;
DWORD Priority;
DWORD Position;
DWORD TotalPages;
DWORD PagesPrinted;
SYSTEMTIME Submitted;
} JOB_INFO_1, *PJOB_INFO_1;
TotalPages
Specifies how many pages the document contains. This value may be zero if the print job does not contain page delimiting information.