диспетчер очереди печати — прослушиватель при изменении состояния задания для принтера

Добрый день,

Из моего приложения, когда я печатаю документ на принтере, я хотел бы прослушивать следующие события при печати: ADD_JOB, REMOVE_JOB и CHANGE_JOB.

Итак, я создаю этот код:

// Get change notification handle for the printer
_HANDLE _chgObject= FindFirstPrinterChangeNotification(
docPrinter.GetPrinterHandle(),
PRINTER_CHANGE_JOB | PRINTER_CHANGE_ADD_JOB | PRINTER_CHANGE_DELETE_JOB,
0,
NULL);

if (this->_chgObject != INVALID_HANDLE_VALUE)
{
while (true) {
DWORD pdwChange;
PRINTER_NOTIFY_OPTIONS notificationOptions;
//begin to test
DocumentPrinter docPrinter(this->_printerName);
docPrinter.OpenConnection();
SetJob(docPrinter.GetPrinterHandle(), docPrinter.GetLastJobId(), 0, NULL, JOB_CONTROL_DELETE);
//end to test

// Wait for the change notification
WaitForSingleObject(this->_chgObject, INFINITE);

bool fcnreturn = FindNextPrinterChangeNotification(
this->_chgObject,
&pdwChange,
&notificationOptions,
NULL);

if (fcnreturn) {
int j;
j = 0;
// Check value of *pdwChange and
//  deal with the indicated change
}
}
// Close Printer Change Notification handle when finished.
}

Как видите, в первой строке я подписываюсь на события PRINTER_CHANGE_JOB, PRINTER_CHANGE_ADD_JOB и PRINTER_CHANGE_DELETE_JOB. Затем в начале моего цикла while я пытаюсь удалить последнее задание спулера. Оно работает. Но у меня много проблем.

1 / Когда выполняется FindNextPrinterChangeNotification, переменные ‘pdwChange’ и ‘NotificationOptions’ имеют неверное значение. Зачем ?

2 / FindNextPrinterChangeNotification всегда возвращает «ложь». Зачем ?

3 / Я хотел бы получить «идентификатор задания», «идентификатор процесса», «имя машины» и т. Д. Работы, которую я удалил. Как это сделать ?

4 / В чем разница между PRINTER_CHANGE_JOB и PRINTER_CHANGE_ADD_JOB?

Я уже искал в интернете, но ничего не нашел

Спасибо

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]