0 / 0 / 1
Регистрация: 19.10.2015
Сообщений: 23
1

Перехват очереди печати

22.10.2015, 10:11. Показов 5406. Ответов 22
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
код моей проги:
Кликните здесь для просмотра всего текста
Delphi
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
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, WinSpool, Grids, ExtCtrls, StdCtrls, ShellApi, Printers, ComCtrls;
 
type
  TForm3 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    Label1: TLabel;
    Timer1: TTimer;
    Label2: TLabel;
    ListBox1: TListBox;
    StringGrid1: TStringGrid;
    Memo2: TMemo;
    procedure Timer1Timer(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form3: TForm3;
 
implementation
 
{$R *.dfm}
 
 function GetCurrentPrinterHandle: THandle;
var
  Device, Driver, Port: array[0..255] of Char;
  hDeviceMode: THandle;
begin
  Printer.getPrinter(Device, Driver, Port, hDeviceMode);
  if not OpenPrinter(@Device, Result, nil) then
    RaiseLastWin32Error;
end;
 
function SavePChar(p: PChar): PChar;
const
  error: PChar = 'Nil';
begin
  if not Assigned(p) then
    Result := error
  else  
    Result := p;
end;
 
 
procedure TForm3.Timer1Timer(Sender: TObject);
type
  TJobs  = array [0..1000] of JOB_INFO_1;
  PJobs = ^TJobs;
 
var
  hPrinter: THandle;
  bytesNeeded, numJobs: Cardinal;
  i: integer;
  pJ: PJobs;
begin
  hPrinter :=GetCurrentPrinterHandle;
  try
    EnumJobs(hPrinter, 0, 1000, 1, nil, 0, bytesNeeded,
      numJobs);
    pJ := AllocMem(bytesNeeded);
    if not EnumJobs(hPrinter, 0, 1000, 1, pJ, bytesNeeded,
      bytesNeeded, numJobs) then
      RaiseLastWin32Error;
   // memo1.Clear;
    if numJobs <> 0 then
    //  memo1.Lines.Add('No jobs in queue')
    //else
     begin
     Label1.Caption:=SavePChar(pJ^[0].pPrinterName);
      if  pJ^[0].pPrinterName='Samsung SCX-3200 Series' //определяем принтер
      then label2.Caption:='принтер найден';
      for i := 0 to pred(numJobs) do
        memo1.Lines.Add('страниц: '+IntToStr(pJ^[i].TotalPages)+'|'+
          Format(' файл: %s, статус (%d): %s',
          [SavePChar(pJ^[i].pDocument),
          pJ^[i].Status, SavePChar(pJ^[i].pStatus)]));
          //StringGrid1.Cells[1,1]:=IntToStr(pJ^[i].TotalPages);
    for i := 0 to Pred(numJobs) do
    StringGrid1.Cells[1,1]:=IntToStr(pJ^[i].TotalPages);
    end;
 
  finally
    ClosePrinter(hPrinter);
  end;

выдает то, что показано на картинке (не обращайте внимания на лишние компоненты, экспериментировал по-разному). То есть кучу значений страниц, отправленных на печать от 0 до 14, далее от 14 до 0. Как получить именно "пиковое значение"?
Миниатюры
Перехват очереди печати  
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.10.2015, 10:11
Ответы с готовыми решениями:

В первой очереди найти максимальный элемент и за ним вставить элементы второй очереди
задание:Создать две очереди из случайных целых чисел. В первой найти максимальный элемент и за ним...

Заменить по очереди три слова test по очереди тремя строками из переменной Arr.Text
Есть 3 строки в переменной Arr.Text (переменная типа TStringList) Есть 3 слова test в Memo1.Text ...

Перехват события печати
Всем привет. Подскажите каким образом можно на удаленном узле, расположенном в лок. сети,...

Перехват событий печати
Доброго времени суток! Собственно мне нужно перехватить количество страниц документа, который был...

22
0 / 0 / 1
Регистрация: 19.10.2015
Сообщений: 23
22.10.2015, 12:41  [ТС] 21
Author24 — интернет-сервис помощи студентам
вот
Вложения
Тип файла: rar принтеры.rar (215.5 Кб, 14 просмотров)
0
5393 / 4321 / 1060
Регистрация: 29.08.2013
Сообщений: 27,128
Записей в блоге: 3
22.10.2015, 14:01 22
блин, получается то о чем я вам писал - сетевой принтер виден, но заданий 0
локально подключить принтер я не могу

попробую вечером из дома
1
0 / 0 / 1
Регистрация: 19.10.2015
Сообщений: 23
22.10.2015, 14:59  [ТС] 23
Цитата Сообщение от qwertehok Посмотреть сообщение
попробую вечером из дома
ок, жду

Добавлено через 13 минут
может стоит не на таймер ставить, а на какое-либо другое событие, при этом отлавливать когда спулер открыт и него загрузились все страницы?
0
22.10.2015, 14:59
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.10.2015, 14:59
Помогаю со студенческими работами здесь

Перехват печати vba word
можно ли как то перехватить событие печати? на подобии примера, только с печатью. Private Sub...

Зависают очереди печати
Привет всем! Никак не могу нагуглить решение проблемы. Дано: 1. Компьютер с Windows-7-x64. В...

Очистка очереди печати
Ноутбук и принтер HP LaserJet Pro MFP M127-M128 PCLmS соединены локальной сетью. Все связанное с...

Отваливается служба очереди печати
Проблема такая. Печатаешь и тут бах, служба очереди печати отваливается, пробуешь запустить,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
23
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru