Для ясности (компилируется без ошибок):
| Код | #include <windows.h> #include <fstream> using std::ofstream;
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{ PRINTER_INFO_2 *Pr; DWORD byteNeed = 0,prCount=0;//Кол-во необходимых байт, количество принтеров //Делаем первый вызов с буфером NULL, чтоб узнать нужный размер буфера JOB_INFO_1 *pInfoPrinter; DWORD m_NonberJob, byteNeed1 = 0, byteUsed;//Кол-во необходимых байт, количество принтеров //ADDJOB_INFO_1 *pAddJob; DWORD byteNeed2 = 0;
EnumPrinters(PRINTER_ENUM_CONNECTIONS|PRINTER_ENUM_LOCAL, NULL, 2, NULL, 0, &byteNeed,&prCount);
//Создаем буфер Pr = new PRINTER_INFO_2 [byteNeed];
//Делаем второй вызов уже с нужным буфером if(!EnumPrinters(PRINTER_ENUM_CONNECTIONS|PRINTER_ENUM_LOCAL, NULL, 2, (LPBYTE)Pr, byteNeed,&byteNeed,&prCount))
{ MessageBox(NULL, "Error", "Принтер", MB_OK); } //LPCTSTR m_PrinterNane; ofstream out; out.open("1.txt");
HANDLE hHandlePrinter=NULL; HANDLE hSignal=NULL; DWORD dwRet; int i; for (i=0; i<(int)prCount; i++) { if( Pr[i].Attributes != PRINTER_ATTRIBUTE_LOCAL ) { /* out << (char *) Pr[i].pPortName << '\n'; out << (char *) Pr[i].pPrinterName << '\n'; out << '\n'<< '\n'<< '\n'<< '\n'<< '\n';*/ if (!strcmp(Pr[i].pPrinterName, "HP Deskjet F300 series") ) { if ( OpenPrinter(Pr[i].pPrinterName, &hHandlePrinter, NULL)) { //hSignal = FindFirstPrinterChangeNotification( hHandlePrinter, PRINTER_CHANGE_WRITE_JOB, NULL, NULL); //if (hSignal != INVALID_HANDLE_VALUE ) { // dwRet = WaitForSingleObject( hSignal, INFINITE); // if (dwRet == WAIT_FAILED ) MessageBox(NULL, "Error", "Error", NULL); // else { while (1) { Sleep(10); if (!GetPrinter(hHandlePrinter, 2, (LPBYTE)Pr, byteNeed, &prCount)) { MessageBox(NULL, "Error GetPrinter","Error", MB_OK); } //EnumJobs(hHandlePrinter, 0, Pr->cJobs, 1, NULL, 0,&byteNeed1, &m_NonberJob); //int t = GetLastError(); pInfoPrinter = new JOB_INFO_1[100]; if (!EnumJobs(hHandlePrinter, 0, Pr->cJobs, 1, (LPBYTE)pInfoPrinter, 1000,&byteNeed1, &m_NonberJob)) { MessageBox(NULL, "Error EnumJobs","Error", MB_OK); } if (pInfoPrinter->Status == JOB_STATUS_PRINTING) { out << (char *)pInfoPrinter->pPrinterName ; }
delete pInfoPrinter; } } } FindClosePrinterChangeNotification(hSignal);
} ClosePrinter(hHandlePrinter); }
} } delete Pr;
//delete pAddJob;
return 0;
|
|