Добрый день,
Из моего приложения, когда я печатаю документ на принтере, я хотел бы прослушивать следующие события при печати: 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,
¬ificationOptions,
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?
Я уже искал в интернете, но ничего не нашел
Спасибо
Задача ещё не решена.
Других решений пока нет …