В Windows существуют встроенные средства для мониторинга заданий на
принтере. Однако, давайте разберёмся, как отслеживать задания на принтере
программно. Для существует API функция "EnumJobs", которая позволяет получить
давольно много информации о текущем состоянии принтера (Имя задания, Состояние,
дату, время и т.д.).
Ниже представлена функция, которая использует EnumJobs и возвращает массив
структуры, в котором представлена вся необходимая информация:
uses WinSpool;
type
JOB_INFO_1_ARRAY = arrayof JOB_INFO_1;
function GetSpoolerJobs(sPrinterName: string): JOB_INFO_1_ARRAY;
var
i: Integer;
hPrinter: THandle;
bResult: Boolean;
cbBuf: DWORD;
pcbNeeded: DWORD;
pcReturned: DWORD;
aJobs: array[0..99] of JOB_INFO_1;
begin
cbBuf := 1000;
bResult := OpenPrinter(PChar(sPrinterName), hPrinter, nil);
ifnot bResult thenbegin
ShowMessage("Error opening the printer");
exit;
end;
bResult := EnumJobs(hPrinter, 0, Length(aJobs), 1, @aJobs, cbBuf, pcbNeeded,
pcReturned);
ifnot bResult thenbegin
ShowMessage("Error Getting Jobs information");
exit;
end;
ClosePrinter(hPrinter);
for i := 0 to pcReturned - 1 dobeginif aJobs[i].pDocument <> nilthenbegin
SetLength(Result, Length(Result) + 1);
Result[Length(Result) - 1] := aJobs[i];
end;
end;
end;
Пример использования:
Создайте новый проект со StringGrid и Timer.
В StringGrid установите свойства “ColCount” и “RowCount” в 20.
У таймера (Timer) установите свойство “Interval” в 500.
В обработчик события “OnTime” таймера добавьте следующий код:
Если Вас заинтересовала или понравилась информация по разработке на Delph - "Как получить информацию о заданиях на принтере", Вы можете поставить закладку в социальной сети или в своём блоге на данную страницу: Так же Вы можете задать вопрос по работе этого модуля или примера через форму обратной связи, в сообщение обязательно указывайте название или ссылку на статью!