返回首页

您好,

现在我有代码,监视打印作业,但它使用轮询方法,以便它使用100%的CPU NBSP。 现在我需要一个代码,监视打印作业,而不是由事件使用轮询方法,以便它可以非常有效的......我已经是代码WT按照............
NBSP

NBSP { BR}
的#include"stdafx.h中"
#包括LT; windows.hgt;
#包括LT; winerror.hgt;
#包括LT; stdio.hgt;
# LT; stdlib.hgt;
#包括LT; ctype.hgt;
#包括LT; conio.hgt;
#包括LT; string.hgt;
#包括LT; tchar.hgt的;
#定义MAX_PRINTERS 256
#定义的dwFlags PRINTER_ENUM_CONNECTIONS PRINTER_ENUM_LOCAL
NBSP
INT主(INT ARGC,CHAR *的argv [])
{
NBSP ; HANDLEnbsp; hPrinter [MAX_PRINTERS]
DWORDnbsp; NBSP pcbNeeded = 0,pcReturned = 0,dwBytesNeeded = 0,dwReturned = 0;
JOB_INFO_2 * pJobInfo = NULL;
PRINTER_INFO_4 * pinfo4 = NULL,
intnbsp; 以前MAX_PRINTERS],I = 0;
SYSTEMTIMEnbsp; ST;
NBSP LPWSTR FP
手柄手柄;
NBSP ; DWORD小号= 0;
字符NO_OF_COPIES的= 0;
NBSP TCHAR味精[142]
DWORD NO_OF_PRINTS = NULL,
NBSP DWORD NO_OF_BYTES = NULL;
NBSP

NBSP 手柄=的CreateFile(长的"D:\ \ PrinterDatabase.txt",FILE_APPEND_DATA,FILE_SHARE_READ | FILE_SHARE_WRITE,
NBSP空,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,为NULL)
NBSP SetFilePointer(手柄,1,0,FILE_BEGIN);
{BR } NBSP 为(i = 0;传染性喉气管炎; MAX_PRINTERS; I)
{
以前的[I] = 0;
}


(EnumPrinters(4,NULL的dwFlags,(LPBYTE)pinfo4 dwBytesNeeded,
NBSP ; 放大器;,AMP dwBytesNeeded; dwReturned))
NBSP {
NBSP
如果(GetLastError函数()== ERROR_INSUFFICIENT_BUFFER),
NBSP {{ BR} NBSP
NBSP ; NBSP
(pinfo4)
LocalFree(pinfo4); NBSP
NBSP ; pinfo4 =(PRINTER_INFO_4 *)LocalAlloc的(LPTR,dwBytesNeeded);
}
NBSP
其他 {
NBSP ;的MessageBoxW(为NULL,L"的EnumPrinters失败:"L"的信息",MB_ICONWARNING);
NBSP返回1;
}
}

printf("请\ N ***************************************** ************** \ N \ N")

的printf("#打印机(计算机上安装本地/网络)=%鲁\ N"
dwReturned)
的 printf("请\ n按任何键,如果你想退出\ N \ N")


为(i = 0;我LT(INT)dwReturned; I)
{
如果(OpenPrinter(pinfo4 [我] pPrinterName,(LPHANDLE)放大器;!hPrinter [I],
NBSP NBSP(LPPRINTER_DEFAULTS)NULL))
{
, NBSP
NBSP ;的MessageBoxW(为NULL,L"的OpenPrinter失败",L"的信息",MB_ICONWARNING);
的 回报;
}
}

NBSP

而(kbhit())
NBSP / /永远保持投票站和转储信息时,
NBSP ; / /作业被提交到任何打印机
NBSP。 NBSP {

NBSP为(i = 0;传染性喉气管炎;
(INT)dwReturned的; I)/ /打印机安装。 NBSP { NBSP
NBSP
(的EnumJobs((HANDLE)hPrinter [!我],0,1,2,(LPBYTE)pJobInfo"
pcbNeeded (LPDWORD)放大器; pcbNeeded,(LPDWORD)放大器; pcReturned))
NBSP { NBSP
NBSP NBSP
如果(GetLastError函数()== ERROR_INSUFFICIENT_BUFFER),
NBSP NBSP {

NBSP 如果(LocalFree(pJobInfo)的pJobInfo)
NBSP pJobInfo =(JOB_INFO_2 *)LocalAlloc的(LPTR,pcbNeeded);
NBSP
}

其他 {

NBSP NBSP的MessageBoxW(NULL,L"的打印机的EnumJobs失败",L"的信息", MB_ICONWARNING)
NBSP转到清理; { BR} }
}

NBSP ; NBSP
(pcReturned GT 0 )/ /有一个打印作业从打印机[我]
NBSP { NBSP
NBSP NBSP
((INT)pJobInfo -GT; JOBID = [])
! {
的char *语句="\ R \ N * *********************************打印机信息*************** **************"
NBSP NBSP WriteFile的(手柄,声明,函数strlen(声明)28,放大器; NO_OF_BYTES,为NULL)
NBSP 的char * JOBID ="\ R \ nJOBID:"
NBSP
NBSP NBSP
NBSP,字符Jobinfo_ID,[5] = {0}
NBSP ; ITOA(pJobInfo-GT作业ID Jobinfo_ID,10);
NBSP NBSP WriteFile的(手柄,JOBID,函数strlen(JOBID),放大器; NO_OF_BYTES,空)
WriteFile的(处理,LPCTSTR类型( Jobinfo_ID),函数strlen(Jobinfo_ID),放大器; NO_OF_BYTES,NULL); NBSP

NBSP ; NBSP NBSP

NBSP NBSP NBSP字符*的PrinterName ="\ R \ R \ nPrinter Namenbsp; :"
WriteFile的(处理,PrinterName的,函数strlen(PrinterName的),放大器; NO_OF_BYTES,NULL);
NBSP NBSP WriteFile的(处理,"(pJobInfo-GT; pPrinterName),strlen的((CHAR * )"(pJobInfo-GT; pPrinterName))56,放大器; NO_OF_BYTES,为NULL)
NBSP
NBSP
NBSP ; NBSP字符*计算机名="\ R \ nMachineName:"
WriteFile的(处理,计算机名,函数strlen(计算机名),放大器; NO_OF_BYTES,NULLnbsp; NBSP)
NBSP WriteFile的(手柄,pJobInfo-GT; pMachineName,strlen的((char *)的"(pJobInfo-GT; pMachineName))25,放大器; NO_OF_BYTES,NULL)

NBSP字符* USERNAME ="\ R \ nUserNamenbsp; :"
NBSP WriteFile的(处理,用户名,函数strlen(用户名),放大器; NO_OF_BYTES,NULLnbsp; )
NBSP ; NBSP WriteFile的(手柄,pJobInfo-GT; pUserName,函数strlen((CHAR *)(pJobInfo-GT; pUserName))12,放大器; NO_OF_BYTES,空)

的char * DocumentName ="\ R \ nDocumentNamenbsp; :"
WriteFile的(处理, DocumentName,函数strlen(DocumentName),放大器; NO_OF_BYTES,NULLnbsp; NBSP)
WriteFile的(处理。pJobInfo-GT; pDocument,函数strlen((char *)的(pJobInfo GT; pDocument的))58,放大器; NO_OF_BYTES,为NULL)
NBSP {BR } NBSP 如果(pJobInfo-GT; pDevMode-GT dmFields放大器; DM_COPIES)
NBSP ;
ITOA(; pDevMode pJobInfo-GT-GT; dmCopies,功放; NO_OF_COPIES 10);

NBSP NBSP字符* ="\ R \ n系统的复本:"
NBSP复制; WriteFile的(处理,副本,strlen的(复印件),放大器; NO_OF_BYTES,为NULL)
NBSP NBSP字符dmCopies [3] = {0}
NBSP ITOA(pJobInfo-GT; pDevMode-GT的dmCopies,dmCopies,10);
WriteFile的(处理的dmCopies,strlen的(dmCopies) 2,放大器; NO_OF_BYTES,为NULL)

NBSP
NBSP
NBSP NBSP

NBSP
(句柄= INVALID_HANDLE_VALUE)
NBSP NBSP的MessageBoxW(NULL,L"的文件创建成功",L"的信息",MB_OKCANCEL)
NBSP NBSP
NBSP
其他 NBSP MessageBoxA(NULL,"文件创建失败","信息",MB_ICONWARNING);
NBSP
NBSP
NBSP NBSP
NBSP
NBSP GetLocalTime(AMP; ST); / *获取本地时间* /
NBSP
NBSP NBSP / / printf的("Datenbsp; :%D /%D /%d的Timenbsp; NBSP ?%D:D:D:d条\ n"
NBSP字符日期[20] = {0}
NBSP字符月[ 4] = {0}
ITOA(st.wMonth,月,10);
NBSP字符日[4] = {0}
NBSP ; ITOA(st.wDay,日,10);
NBSP NBSP字符年[6] = {0}
ITOA(st.wYear,年份,10);
strcat的(日,月);
NBSP的strcat(日期," - ");
NBSP的strcat(日期,日);
NBSP的strcat(日期," - ");
strcat的(日,年);
NBSP字符* ="\ R \ nDate:"
日NBSP WriteFile的(处理日期,函数strlen(月),放大器; NO_OF_BYTES,为NULL)
WriteFile的(手柄,日期函数strlen(日)6,放大器; NO_OF_BYTES,NULL)

NBSP字符时间[ 20] = {0}
字符分钟[4] = {0}
NBSP网上书店股市ITOA(st.wMinute分钟,10);
NBSP NBSP NBSP字符秒[4] = {0}
ITOA(st.wSecond,秒,10);
NBSP字符小时[6] = {0}
NBSP ; ITOA(st.wHour小时,10);
NBSP ; strcat的(时间,小时);
NBSP ; strcat的(时间,":");
NBSP ; NBSP的strcat(时,分);
NBSP ; strcat的(时间,":");
NBSP ; strcat的(时间,秒);
NBSP NBSP
NBSP
NBSP 的char *定时="\ R \ n时间:";
WriteFile的(手柄,定时,strlen的(定时),放大器; NO_OF_BYTES,NULL);
NBSP ; WriteFile的(处理时间,strlen的(时间)6,放大器; NO_OF_BYTES,为NULL)
NBSP
printf("请\ n按任何键,如果你想退出\ N \ N" )
} NBSP
} NBSP
}
}
NBSP
NBSP参考getch()
NBSP
清理:
LocalFree"(pinfo4); LocalFree( pJobInfo); / /清除内存

(I = 0;传染性喉气管炎(INT)dwReturned; I){
NBSP
NBSP(ClosePrinter((HANDLE)hPrinter [I])); {{ BR} NBSP的MessageBoxW(为NULL,L"的ClosePrinter失败",L"的信息",MB_ICONWARNING)
NBSP ; 返回1;
}
NBSP }
返回0;

NBSP

NBSP

NBSP
{BR }



请帮我尽快...

谢谢| Kantesh Nagaradder:OriginalGriff:不要转贴同样的问题 - 如果你有更多的信息,编辑你以前的问题。 (使用"改善问题"部件编辑您的问题,并提供更好的信息。)
不要说这是迫切的。
不要告诉我们你已经试过到目前为止

回答