Страница 1 из 1

перехват очериди печати

Добавлено: 12 июн 2010, 19:34
tru_bala
Доброго времени суток!
JobFields[i++] = JOB_NOTIFY_FIELD_PRINTER_NAME;
JobFields[i++] = JOB_NOTIFY_FIELD_MACHINE_NAME;
JobFields[i++] = JOB_NOTIFY_FIELD_PORT_NAME;
JobFields[i++] = JOB_NOTIFY_FIELD_USER_NAME;
JobFields[i++] = JOB_NOTIFY_FIELD_NOTIFY_NAME;
JobFields[i++] = JOB_NOTIFY_FIELD_DATATYPE;
JobFields[i++] = JOB_NOTIFY_FIELD_PRINT_PROCESSOR;
JobFields[i++] = JOB_NOTIFY_FIELD_PARAMETERS;
JobFields[i++] = JOB_NOTIFY_FIELD_DRIVER_NAME;
JobFields[i++] = JOB_NOTIFY_FIELD_STATUS_STRING;
JobFields[i++] = JOB_NOTIFY_FIELD_DOCUMENT;
JobFields[i++] = JOB_NOTIFY_FIELD_PRIORITY;
JobFields[i++] = JOB_NOTIFY_FIELD_POSITION;
JobFields[i++] = JOB_NOTIFY_FIELD_START_TIME;
JobFields[i++] = JOB_NOTIFY_FIELD_UNTIL_TIME;
JobFields[i++] = JOB_NOTIFY_FIELD_TIME;
JobFields[i++] = JOB_NOTIFY_FIELD_TOTAL_PAGES;
JobFields[i++] = JOB_NOTIFY_FIELD_PAGES_PRINTED;
JobFields[i++] = JOB_NOTIFY_FIELD_TOTAL_BYTES;
JobFields[i++] = JOB_NOTIFY_FIELD_BYTES_PRINTED;
i = 0;
printerFields[i++] = PRINTER_NOTIFY_FIELD_PRINTER_NAME;
................................
printerFields[i++] = PRINTER_NOTIFY_FIELD_AVERAGE_PPM;

prnOptType[0].Count = 20;
prnOptType[0].Type = PRINTER_NOTIFY_TYPE;
prnOptType[0].pFields = printerFields;
prnOptType[1].Type = JOB_NOTIFY_TYPE;
prnOptType[1].Count = 20;
prnOptType[1].pFields = JobFields;
prnOpt = (PRINTER_NOTIFY_OPTIONS *) malloc(2 * sizeof(PRINTER_NOTIFY_OPTIONS));
prnOpt->Version = 2;
prnOpt->Count = 2;
prnOpt->pTypes = prnOptType;
prnOpt->Flags = PRINTER_NOTIFY_OPTIONS_REFRESH;
DWORD pdw = 0;
while(whileFlag == 0) {
if((chgObject = FindFirstPrinterChangeNotification(hPrinter, PRINTER_CHANGE_WRITE_JOB, 0, prnOpt)) != INVALID_HANDLE_VALUE) {
if((dwWait = WaitForSingleObject(chgObject, INFINITE)) == WAIT_OBJECT_0) {
FindNextPrinterChangeNotification(chgObject, &pdw, (LPVOID) prnOpt, (LPVOID *) &prnNotifyInfo);
for(i = 0; i < prnNotifyInfo->Count; i++) {
if(prnNotifyInfo->aData.Type == JOB_NOTIFY_TYPE) {
if(prnNotifyInfo->aData.Field == JOB_NOTIFY_FIELD_MACHINE_NAME) {
NameMach = (LPSTR)prnNotifyInfo->aData.NotifyData.Data.pBuf;
flagF = 1;
}
if(prnNotifyInfo->aData.Field == JOB_NOTIFY_FIELD_USER_NAME) {
NameUser = (LPSTR)prnNotifyInfo->aData.NotifyData.Data.pBuf;
flagF = 1;
}
if(prnNotifyInfo->aData.Field == JOB_NOTIFY_FIELD_DOCUMENT) {
NameDoc = (LPSTR)prnNotifyInfo->aData.NotifyData.Data.pBuf;
flagF = 1;
}
if(prnNotifyInfo->aData.Field == JOB_NOTIFY_FIELD_TOTAL_PAGES) {
TotP = prnNotifyInfo->aData.NotifyData.adwData[0];
flagF = 1;
}
}
else if(prnNotifyInfo->aData.Type == PRINTER_NOTIFY_TYPE) {
if(prnNotifyInfo->aData[i].Field == PRINTER_NOTIFY_FIELD_STATUS)
}
}
}
}
if(prnOpt->Flags == PRINTER_NOTIFY_INFO_DISCARDED) {
prnOpt->Flags = PRINTER_NOTIFY_OPTIONS_REFRESH;
}
FindClosePrinterChangeNotification(chgObject);
if(flagF) {
funcWriteFile(NameMach, NameUser, NameDoc, TotP);
}
}
проблема заключается в том, что при отправке на печать функция FindNextPrinterChangeNotification(chgObject, &pdw, (LPVOID) prnOpt, (LPVOID *) &prnNotifyInfo); значение prnNotifyInfo->aData[i].Field возвращает PRINTER_NOTIFY_TYPE, постоянно! А мне нужно что приходили сообщения JOB_NOTIFY_TYPE, что забирать из структуры имя машины, юзера и т.д. не могу понять в чем проблема. Зарание благодарен!