В 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” таймера добавьте следующий код:
Как получить информацию о заданиях на принтере в Windows с помощью программного обеспечения.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.