Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.03.30;
Скачать: CL | DM;

Вниз

Мониторинг сетевых принтеров.   Найти похожие ветки 

 
Максимм   (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 вся ветка

Текущий архив: 2008.03.30;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.06 c
15-1203476951
Slider007
2008-02-20 06:09
2008.03.30
С днем рождения ! 20 февраля 2008 среда


2-1204201273
mrfreeman2007
2008-02-28 15:21
2008.03.30
Вывод компа из спячки


3-1194512166
zorik
2007-11-08 11:56
2008.03.30
Корректное отключение (подключение) TIBDatabase


15-1203169723
Andy BitOff
2008-02-16 16:48
2008.03.30
Выбираем DVD-player


15-1203259266
Alexd31
2008-02-17 17:41
2008.03.30
чем можно открыть DDF файл?