Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Мониторинг печати / 25 сообщений из 27, страница 1 из 2
07.02.2018, 18:52
    #39598479
Петр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мониторинг печати
Друзья, подскажите есть ли библиотеки (delphi) для мониторинга печати. Возможно платные.
В основном нужно контролировать количество распечатанных страниц, размер бумаги.
Ну и сопутствующие вещи:
состояние принтера, IP-адрес, имена пользователей.
...
Рейтинг: 0 / 0
07.02.2018, 18:59
    #39598488
JayDi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мониторинг печати
Нет. Чтобы был доступ к сетевому принтеру и его данным, нужна соответствующая поддержка от этого самого принтера, которую еще и включить надо в винде. И у разных моделей это всё разное (т.е. у кого-то можно вытащить данные, а у кого-то не получится).
...
Рейтинг: 0 / 0
07.02.2018, 18:59
    #39598489
DarkMaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мониторинг печати
...
Рейтинг: 0 / 0
07.02.2018, 19:02
    #39598491
DarkMaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мониторинг печати
ПетрДрузья, подскажите есть ли библиотеки (delphi) для мониторинга печати. Возможно платные.
В основном нужно контролировать количество распечатанных страниц, размер бумаги.
Ну и сопутствующие вещи:
состояние принтера, IP-адрес, имена пользователей.

Вот еще советуют через WMI.

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
//-----------------------------------------------------------------------------------------------------
//     This code was generated by the Wmi Delphi Code Creator (WDCC) Version 1.8.5.0
//     http://code.google.com/p/wmi-delphi-code-creator/
//     Blog http://theroadtodelphi.wordpress.com/wmi-delphi-code-creator/
//     Author Rodrigo Ruz V. (RRUZ) Copyright (C) 2011-2014 
//----------------------------------------------------------------------------------------------------- 
//
//     LIABILITY DISCLAIMER
//     THIS GENERATED CODE IS DISTRIBUTED "AS IS". NO WARRANTY OF ANY KIND IS EXPRESSED OR IMPLIED.
//     YOU USE IT AT YOUR OWN RISK. THE AUTHOR NOT WILL BE LIABLE FOR DATA LOSS,
//     DAMAGES AND LOSS OF PROFITS OR ANY OTHER KIND OF LOSS WHILE USING OR MISUSING THIS CODE.
//
//----------------------------------------------------------------------------------------------------
program GetWMI_Info;

{$APPTYPE CONSOLE}

uses
  SysUtils,
  ActiveX,
  ComObj,
  Variants,
  Dialogs;



// La clase Win32_PrintJob representa un trabajo de impresión generado por una aplicación Win32. Las unidades de trabajo generadas por el comando Imprimir de una aplicación que se ejecuta en un sistema Win32 son descendientes (o miembros) de esta clase.
// Ejemplo: un documento de impresora creado por una aplicación de Office 97

procedure  GetWin32_PrintJobInfo;
const
  WbemUser            ='';
  WbemPassword        ='';
  WbemComputer        ='localhost';
  wbemFlagForwardOnly = $00000020;
var
  FSWbemLocator : OLEVariant;
  FWMIService   : OLEVariant;
  FWbemObjectSet: OLEVariant;
  FWbemObject   : OLEVariant;
  oEnum         : IEnumvariant;
  iValue        : LongWord;
  str:String;
begin;
  FSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
  FWMIService   := FSWbemLocator.ConnectServer(WbemComputer, 'root\CIMV2', WbemUser, WbemPassword);
  FWbemObjectSet:= FWMIService.ExecQuery('SELECT * FROM Win32_PrintJob','WQL',wbemFlagForwardOnly);
  oEnum         := IUnknown(FWbemObjectSet._NewEnum) as IEnumVariant;
  Str := '';
  while oEnum.Next(1, FWbemObject, iValue) = 0 do
  begin
    Str := Str + sLineBreak + Format('Caption           %s',[String(FWbemObject.Caption)]);// String
    Str := Str + sLineBreak + Format('DataType          %s',[String(FWbemObject.DataType)]);// String
    Str := Str + sLineBreak + Format('Description       %s',[String(FWbemObject.Description)]);// String
    Str := Str + sLineBreak + Format('Document          %s',[String(FWbemObject.Document)]);// String
    Str := Str + sLineBreak + Format('DriverName        %s',[String(FWbemObject.DriverName)]);// String
    Str := Str + sLineBreak + Format('ElapsedTime       %s',[String(FWbemObject.ElapsedTime)]);// Datetime
    Str := Str + sLineBreak + Format('HostPrintQueue    %s',[String(FWbemObject.HostPrintQueue)]);// String
    Str := Str + sLineBreak + Format('JobId             %d',[Integer(FWbemObject.JobId)]);// Uint32
    Str := Str + sLineBreak + Format('JobStatus         %s',[String(FWbemObject.JobStatus)]);// String
    Str := Str + sLineBreak + Format('Name              %s',[String(FWbemObject.Name)]);// String
    Str := Str + sLineBreak + Format('Notify            %s',[String(FWbemObject.Notify)]);// String
    Str := Str + sLineBreak + Format('Owner             %s',[String(FWbemObject.Owner)]);// String
    Str := Str + sLineBreak + Format('PagesPrinted      %d',[Integer(FWbemObject.PagesPrinted)]);// Uint32
    Str := Str + sLineBreak + Format('PrintProcessor    %s',[String(FWbemObject.PrintProcessor)]);// String
    Str := Str + sLineBreak + Format('Priority          %d',[Integer(FWbemObject.Priority)]);// Uint32
    Str := Str + sLineBreak + Format('Size              %d',[Integer(FWbemObject.Size)]);// Uint32
    Str := Str + sLineBreak + Format('Status            %s',[String(FWbemObject.Status)]);// String
    Str := Str + sLineBreak + Format('StatusMask        %d',[Integer(FWbemObject.StatusMask)]);// Uint32
    Str := Str + sLineBreak + Format('TimeSubmitted     %s',[String(FWbemObject.TimeSubmitted)]);// Datetime
    Str := Str + sLineBreak + Format('TotalPages        %d',[Integer(FWbemObject.TotalPages)]);// Uint32
    Str := Str + sLineBreak + '--------------------------------------------------------';

    MessageDlg(Str, mtInformation, [mbOK], 0);

    FWbemObject:=Unassigned;
  end;
end;


begin
 try
    CoInitialize(nil);
    try
      GetWin32_PrintJobInfo;
    finally
      CoUninitialize;
    end;
 except
    on E:EOleException do
        Writeln(Format('EOleException %s %x', [E.Message,E.ErrorCode])); 
    on E:Exception do
        Writeln(E.Classname, ':', E.Message);
 end;
 Writeln('Press Enter to exit');
 Readln;      
end.

...
Рейтинг: 0 / 0
07.02.2018, 19:05
    #39598496
Петр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мониторинг печати
ok, спасибо посмотрю.
Если у кого еще будут мысли, буду признателен.
...
Рейтинг: 0 / 0
08.02.2018, 07:09
    #39598670
Kast2K
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мониторинг печати
Петр,

Вместо самописного используем это
https://www.ysoft.com/ru/ru/print-management
...
Рейтинг: 0 / 0
08.02.2018, 08:50
    #39598701
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мониторинг печати
У меня что-то в голове вертится про печать через диспетчер и напрямую... Или такого выбора сейчас нет?
...
Рейтинг: 0 / 0
08.02.2018, 17:01
    #39599265
Петр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мониторинг печати
Kast2KПетр,

Вместо самописного используем это
https://www.ysoft.com/ru/ru/print-management

в моем случае нужен именно самописный вариан

wadmanУ меня что-то в голове вертится про печать через диспетчер и напрямую... Или такого выбора сейчас нет?

в сам процесс печать приложение не должно вмешиваться. Только контроль. Клиентская часть может быть установлена на все компьютеры.
...
Рейтинг: 0 / 0
08.02.2018, 21:09
    #39599410
makhaon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мониторинг печати
Петр,

пробуй предложенный wmi, если заработает, то и клиентов ставить не придётся, только что настроить, что бы wmi раздавался наружу.
...
Рейтинг: 0 / 0
09.02.2018, 08:41
    #39599482
xMailer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мониторинг печати
Петр, как тебе советовали - делай через wmi, у нас была разработана win служба для сбора статистики печати, работает не первый год. Текущее состояние, вплоть до статуса текущего состояния распечатывания, тоже wmi позволяет.
...
Рейтинг: 0 / 0
09.02.2018, 10:41
    #39599521
JayDi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мониторинг печати
xMailerПетр, как тебе советовали - делай через wmi, у нас была разработана win служба для сбора статистики печати, работает не первый год. Текущее состояние, вплоть до статуса текущего состояния распечатывания, тоже wmi позволяет.
Как у вас решается вопрос сетевых принтеров и автономных машин, на которых печать и ксерокопирование происходит без участия клиентских машин?
...
Рейтинг: 0 / 0
12.02.2018, 09:37
    #39600403
xMailer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мониторинг печати
JaDiКак у вас решается вопрос сетевых принтеров и автономных машин, на которых печать и ксерокопирование происходит без участия клиентских машин?
1. Печать на сетевые принтеры: в нашем случае печать идет через принт-сервер с win и проходит через журнал на сервере с eventID=307. И да, подтверждаю, на клиентской стороне только eventid=306,821, что не позволит отследить детали печати, которые есть в EvID=307. В Вашем случае, посмотрите на журнал событий компа к которому подключен принтер, т. е. пользователь "А" печатает на расшаренный принтер пользователя "Б", у "А" - в журнале ерунда, что у "Б"? я не могу проверить
2. Автономные машины: у нас служба льет данные не напрямую в основную базу, а через локальную fb базу, т.е. накопление происходит в локальной базе, при доступности сети сливает в основную. Вариантов осуществлять пересыл с локальной в основную базу достаточно много.
3. Ксерокопирование: тут все организовано по другому, через журналы это не отследить, но у нас принтеры/копиры - hp, и на каждом настроена средствами самого копира слив суточной статистики на спец. ящик почтовый. По cron проверяем ящик, парсим офигительно мудреный xml, заносим статистику в базу.

Как-то так
...
Рейтинг: 0 / 0
12.02.2018, 09:39
    #39600406
xMailer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мониторинг печати
вот так в win
...
Рейтинг: 0 / 0
13.02.2018, 12:07
    #39601037
Петр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мониторинг печати
xMailerПетр, как тебе советовали - делай через wmi, у нас была разработана win служба для сбора статистики печати, работает не первый год. Текущее состояние, вплоть до статуса текущего состояния распечатывания, тоже wmi позволяет.

через WMI я могу обратиться к Win32_PrintJob. Но как я понимаю надо обращаться во время печати?
Т.е. надо понимать, что пошла печать. Как это сделать? Отслеживать события, но какие и как?
...
Рейтинг: 0 / 0
13.02.2018, 13:35
    #39601115
xMailer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мониторинг печати
Петрчерез WMI я могу обратиться к Win32_PrintJob. Но как я понимаю надо обращаться во время печати?
Т.е. надо понимать, что пошла печать. Как это сделать? Отслеживать события, но какие и как?
я таких событий не нашел, только периодический (500ms) опрос Win32_PrintJob. В моем случае печать стартовала через контекстное меню проводника, это и было началом пуска таймера опроса. Если использовать данный метод для подсчета статистики, способ не надежен, если документ небольшой - можно пропустить, я ушел на опрос Win32_NTLogEvent с EventCode=307.

Если найдете win событие старта, то было бы интересно увидеть.
...
Рейтинг: 0 / 0
13.02.2018, 13:49
    #39601127
Петр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мониторинг печати
xMailer я ушел на опрос Win32_NTLogEvent с EventCode=307.


а опрашиваете как
...
Рейтинг: 0 / 0
14.02.2018, 03:05
    #39601522
Лись
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мониторинг печати
xMailerПетрчерез WMI я могу обратиться к Win32_PrintJob. Но как я понимаю надо обращаться во время печати?
Т.е. надо понимать, что пошла печать. Как это сделать? Отслеживать события, но какие и как?
я таких событий не нашел, только периодический (500ms) опрос Win32_PrintJob.

Микрософт же уже все придумал для вас FindFirstPrinterChangeNotification + WaitForSingleObject + FindNextPrinterChangeNotification, все данные приходтят по мере поступления.
...
Рейтинг: 0 / 0
14.02.2018, 09:09
    #39601586
xMailer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мониторинг печати
ЛисьМикрософт же уже все придумал для вас FindFirstPrinterChangeNotification + WaitForSingleObject + FindNextPrinterChangeNotification, все данные приходтят по мере поступления.
проверил, да, эта связка работает. Гуглите FindFirstPrinterChangeNotification
...
Рейтинг: 0 / 0
16.02.2018, 17:12
    #39603223
Петр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мониторинг печати
Столкнулся со следующей проблемой:
при использовании FindFirstPrinterChangeNotification, а именно при вызове функции OpenPrinter у пользователя с обычными правами Windows, получаю ERROR_ACCESS_DENIED.
Т.е. ему надо назначить права на принтер (как я понял PRINTER_ACCESS_USE).
Но никак не могу понять как это сделать
...
Рейтинг: 0 / 0
16.02.2018, 18:57
    #39603293
Петр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мониторинг печати
проблема оказалась при объявлении принтера
Код: pascal
1.
2.
3.
4.
    Defaults: TPrinterDefaults = (
      pDatatype : nil;
      pDevMode  : nil;
      DesiredAccess : PRINTER_ACCESS_USE or PRINTER_ACCESS_ADMINISTER);



Странно, но если убрать
Код: pascal
1.
 PRINTER_ACCESS_ADMINISTER

, то работает без ошибок у пользователей
...
Рейтинг: 0 / 0
19.02.2018, 13:01
    #39604116
Arioch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мониторинг печати
Петр,

так ты требуешь открыть управление принтера, административный функции

само собой, что не у всех пользователей есть права доменного админа
...
Рейтинг: 0 / 0
22.02.2018, 19:45
    #39606343
Петр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мониторинг печати
Возникла следующая проблема.
Как идентифицировать принтер?

Т.е. не просто по его имени в Windows, а что-то уникальное типа MAC-адреса.
Для чего нужно:
- имена принтеров в сети могут повторяться
- принтеры могут перемещаться с места на место.

Возможно ли это ? и если да то как?
...
Рейтинг: 0 / 0
26.02.2018, 11:15
    #39607202
Петр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мониторинг печати
up
...
Рейтинг: 0 / 0
26.02.2018, 23:18
    #39607558
ART-CODE
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мониторинг печати
Петр,
Если по каким-то причинам не удастя выведать это у WMI.
то можно и напрямую у принтера спросить:
Printer model information,
configuration, printer feature settings, and other printer
status information can be obtained using PJL
pjltkref.pdf
Берем в руки клиентский сокет, 1 шт. подключаемся им на порт 9100 и спрашиваем кто там сидит,
и что он о себе думает. Все это на языке PJL (если, конечно, принтер его понимает, что чаще всего так.)

А вообще, в свое время я писал прокси-принт сервер.
Все задания на печать от клиентов сначала летят на него, а он уже сам раздает их для настоящих принтеров.
Ну, и отслеживает успешность печати, заботится о сохранении очереди при сбоях,
логирует и сохраняет распечатанные документы в архив (для просмотра и повторной печати).
...
Рейтинг: 0 / 0
26.02.2018, 23:34
    #39607562
Softologic
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мониторинг печати
Топикстартеру: знаю лично автора данного ресурса (и софта, соответственно): http://printstore.ru. Человек на мониторинге печати стал сильным экспертом. ПО пишет на C#, но мало ли... Быть может будет нелишним проконсультироваться на форуме, может подскажет что: http://printstore.ru/forum/
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Мониторинг печати / 25 сообщений из 27, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]