Форум: "WinAPI";
Текущий архив: 2008.03.30;
Скачать: [xml.tar.bz2];
ВнизМониторинг сетевых принтеров. Найти похожие ветки
← →
Максимм (2007-07-30 11:14) [0]Необходимо написать программу для мониторинга сетевых прнтеров. Для реализации использую следующую функцию:
EnumJobs(hPrinter, 0, Length(aJobs), 1, @aJobs, cbBuf, pcbNeeded, pcReturned); Проблемма возникла в том что она некоректно возвращает количество рачпечаннх страниц. Как это можно исправить?? Или может есть какой нибудь другой способ???
← →
Сергей М. © (2007-07-30 11:19) [1]
> она некоректно возвращает количество рачпечаннх страниц
И в чем заключается "некорректность" ?
← →
Максимм (2007-07-30 11:21) [2]Практически всегда возвращает 1 или 0. То же самое с количеством копий.
← →
Сергей М. © (2007-07-30 11:25) [3]
> Практически всегда возвращает 1 или 0
А сколько на самом деле д.б. ?
← →
Максимм (2007-07-30 11:26) [4]Что значит сколько должно быть ??? Количество страниц всегда разное ...
← →
Сергей М. © (2007-07-30 11:29) [5]Ну тогда показывай свой код ...
← →
Максимм (2007-07-30 11:36) [6]type
JOB_INFO_1_ARRAY = Array of 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 := 256;
OpenPrinter(PChar(sPrinterName), hPrinter, Nil);
EnumJobs(hPrinter, 0, Length(aJobs), 1, @aJobs, cbBuf, pcbNeeded, pcReturned);
ClosePrinter(hPrinter);
For i := 0 to pcReturned - 1 do
Begin
SetLength(Result, Length(Result) + 1);
Result[Length(Result) - 1] := aJobs[i];
End;
End;
procedure TForm1.Timer1Timer(Sender: TObject);
Var
i, ii, K, p : Integer;
aJobs : JOB_INFO_1_ARRAY;
Begin
Try
aJobs := GetSpoolerJobs("ПРИНТЕР");
For i := 0 To Length(aJobs) - 1 Do
Begin
S := IntToStr(aJobs[i].JobId) + #9 +
TimeToStr(Time) + #9 +
aJobs[i].pPrinterName + #9 +
aJobs[i].pMachineName + #9 +
aJobs[i].pUserName + #9 +
aJobs[i].pDocument + #9 +
IntToStr(aJobs[i].TotalPages);
// то самое значение (aJobs[i].TotalPages)
// Массив заданий
If Z1[aJobs[i].JobId] = 0 then
Begin
// записывает данные в файл
Z1[aJobs[i].JobId] := 1;
End;
End;
Except End;
End;
← →
Сергей М. © (2007-07-30 11:57) [7]
> // то самое значение (aJobs[i].TotalPages)
Что значит "то самое" ?
Ты же задал вопрос о кол-ве распечатанных страниц, а не об полном кол-ве страниц !
И на то в структуре есть поле PagesPrinted, которое ни сном ни духом не фигурирует в твоем коде.
← →
Rouse_ © (2007-07-30 11:57) [8]Кол-во расчечатанных страниц вообще-то PagesPrinted...
Это раз, а во вторых нужно тщательней курить MSDN...To determine the number of print jobs in the printer queue, call the GetPrinter function with the Level parameter set to 2
← →
Максимм (2007-07-30 12:03) [9]я вас удивлю наверное, но значение PagesPrinted всегда равно "0" ....
не задавл бы таких вопросов если бв не попробавл .....
← →
Сергей М. © (2007-07-30 12:07) [10]
> Максимм (30.07.07 12:03) [9]
Что, и для Level = 2 тоже равно нулю ?!
← →
Rouse_ © (2007-07-30 12:34) [11]
> но значение PagesPrinted всегда равно "0" ....
Исесно... я ж говрю - читай внимательней MSDN...PagesPrinted
Specifies the number of pages that have printed. This value may be zero if the print job does not contain page delimiting information.
← →
Anatoly Podgoretsky © (2007-07-30 19:24) [12]При том для большинства!
Кроме того я могу задать количество копий на принтере, тогда вообще швах.
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2008.03.30;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.044 c