Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Мониторинг сетевых принтеров. [D6, Win2k, WinXP]


Максимм ©   (2007-07-30 11:14:00) 

Необходимо написать программу для мониторинга сетевых прнтеров. Для реализации использую следующую функцию:
EnumJobs(hPrinter, 0, Length(aJobs), 1, @aJobs, cbBuf, pcbNeeded, pcReturned); Проблемма возникла в том что она некоректно возвращает количество рачпечаннх страниц. Как это можно исправить?? Или может есть какой нибудь другой способ???


Anatoly Podgoretsky   (2007-07-30 19:24:00) [1]

При том для большинства!
Кроме того я могу задать количество копий на принтере, тогда вообще швах.


Rouse_   (2007-07-30 12:34:00) [2]


> но значение 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.


Сергей М.   (2007-07-30 12:07:00) [3]


> Максимм   (30.07.07 12:03) [9]


Что, и для Level = 2 тоже равно нулю ?!


Максимм   (2007-07-30 12:03:00) [4]

я вас удивлю наверное, но значение PagesPrinted всегда равно "0" ....
не задавл бы таких вопросов если бв не попробавл .....


Сергей М.   (2007-07-30 11:57:00) [5]


> // то самое значение (aJobs[i].TotalPages)


Что значит "то самое" ?

Ты же задал вопрос о кол-ве распечатанныхстраниц, а не об полном кол-ве страниц !

И на то в структуре есть поле PagesPrinted, которое ни сном ни духом не фигурирует в твоем коде.


Rouse_   (2007-07-30 11:57:00) [6]

Кол-во расчечатанных страниц вообще-то 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 11:36:00) [7]

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:29:00) [8]

Ну тогда показывай свой код ...


Максимм   (2007-07-30 11:26:00) [9]

Что значит сколько должно быть ??? Количество страниц всегда разное ...


Сергей М.   (2007-07-30 11:25:00) [10]


> Практически всегда возвращает 1 или 0


А сколько на самом деле д.б. ?


Максимм   (2007-07-30 11:21:00) [11]

Практически всегда возвращает 1 или 0. То же самое с количеством копий.


Сергей М.   (2007-07-30 11:19:00) [12]


> она некоректно возвращает количество рачпечаннх страниц


И в чем заключается "некорректность" ?


Наверх

Титульная страница Поиск, карта сайта Написать письмо