Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Внимание! Есть замечания модератора по теме: Название "перехват печати"
Старый 13.03.2009, 13:06   #1
Bogood
Пользователь
 
Регистрация: 23.02.2008
Сообщений: 28
Стрелка Как узнать количество выданных на печать страниц

кто подскажет, как перехватывать задание на печать? из него нужно узнать только количество выданных на печать страниц. заранее всем спасибо
А я не парюсь, сразу винду сношу...
Bogood вне форума Ответить с цитированием
Старый 13.03.2009, 14:34   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Вот когда-то любопытствовал, может пригодиться:
Код:
unit Unit1;

interface

uses          winspool,   tlhelp32,
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Spin;

type
  TForm1 = class(TForm)
    ListBox1: TListBox;
    Edit1: TEdit;
    Label1: TLabel;
    GroupBox1: TGroupBox;
    Label2: TLabel;
    Edit2: TEdit;
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
  public     pages:integer;
    { Public declarations }
  end;


var hp:THandle; jobs:array[0..50] of JOB_INFO_2; a,b:Cardinal;i:integer;
      hPrinter:Thandle;  htr:Cardinal; eb:BOOL;  lst,ou:TStringList;
  Form1: TForm1;counter:integer;

implementation

{$R *.dfm}
procedure tr;
var c:Cardinal;pe:tagPROCESSENTRY32;k,e:integer; pha,ph,predhand,s:String;
begin
 while eb do begin
 hp:=FindFirstPrinterChangeNotification(hPrinter,PRINTER_CHANGE_ADD_JOB,
     0,0);
 WaitForSingleObject(hp,INFINITE);
 ZeroMemory(@jobs,sizeof(jobs));
 c:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
 EnumJobs(hPrinter,0,50,2,@jobs,sizeof(jobs),a,b);
 //********* FOR ******************
 for i:=0  to b-1 do
 begin
  with form1 do begin
    pages:=pages+jobs[i].PagesPrinted;
    ListBox1.Items.Add(padc(' №'+IntToStr(counter),' ',5)+' Стр.'+inttostr(jobs[i].TotalPages)+
    ' (всего:'+inttostr(pages)+')'+     padc(TimeToStr(time),' ',10)+jobs[i].pPrinterName+' '+jobs[i].pDocument);
    inc(counter);
//    ListBox1.Items.Add(' '+jobs[i].pMachineName+' '+jobs[i].pParameters);
       ou.Text:=GetHandlesFileFromPID(GetProcessNameFromWnd(GetForegroundWindow).PID);
     //********* FOR ******************
     for e:=0  to ou.Count-1  do
     begin
     if lst.IndexOf(ou[e])=-1 then begin
       ou[e]:=trim(ou[e]);
       s:=AnsiLowerCase(ExtractFileExt(ou[e]));
       if (pos(s,Edit1.Text)<>0)and(s<>'')and(ou[e]<>'') then begin
       if ou.IndexOf(ou[e])=e then
             ListBox1.Items.Add('     '+ou[e]);
        end;
      end;
     end;
     ListBox1.Items.Add('');
     //******* END FOR ****************{}
     lst.Text:=ou.Text;
     ou.Clear;//predhand:='';
     pha:='';
     ListBox1.Items.SaveToFile(ExtractFilePath(ParamStr(0))+Edit2.Text+'\'+
     StringReplace(DateToStr(date),':','_',[rfReplaceAll])+'.txt');
  end;
 end;
 //******* END FOR ****************{}
 FindClosePrinterChangeNotification(hp);
end;

end;

procedure TForm1.FormCreate(Sender: TObject);
begin
eb:=true;    counter:=1;
if ParamCount>0 then
 Edit2.Text:=ParamStr(1) else Edit2.Text:='PDFCreator';
if ParamCount>1 then
 Edit1.Text:=ParamStr(2) else Edit1.Text:='.pdf .doc .jpeg .tiff .tif .jpg .dwg .txt .xls .htm .html';

ForceDirectories(ExtractFilePath(ParamStr(0))+Edit2.Text);
ou:=TStringList.Create;  lst:=TStringList.Create;
if OpenPrinter(pchar(Edit2.text),hPrinter,0) then
 CreateThread(0,0,@tr,0,CREATE_NEW,htr)
else RaiseLastWin32Error;

end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
 eb:=False;
end;

end.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 13.03.2009, 14:34   #3
cvv
 
Регистрация: 17.01.2009
Сообщений: 6
По умолчанию

может поможет http://www.cpp.com.ua/?in=kpp_show_a...tring=&by_id=3
cvv вне форума Ответить с цитированием
Старый 13.03.2009, 17:29   #4
Bogood
Пользователь
 
Регистрация: 23.02.2008
Сообщений: 28
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Вот когда-то любопытствовал, может пригодиться
спасибо,пороюсь, мож чего полезного найду

17:30
Цитата:
Сообщение от cvv Посмотреть сообщение
сложновато,но интересно.спасибо.щас буду разбираться

У вас тоже проблемы со зрением? Для чего кнопка "Правка"?
Или правила не удосужились прочитать?
Со следующего раза за каждый флуд-пост - по горчичнику.
А я не парюсь, сразу винду сношу...

Последний раз редактировалось mihali4; 13.03.2009 в 18:01. Причина: Объединение постов
Bogood вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как узнать количество дисплеев и их разрешение crc83 Мультимедиа в Delphi 1 25.02.2009 01:11
Как узнать количество скачиваний файла с сайта? Dux PHP 34 02.02.2009 00:28
количество цифр и количество символов до первой гласной буквы 111111 Общие вопросы C/C++ 2 22.12.2008 12:15
Как подсчитать количество уникальных мест? Iskin Microsoft Office Excel 2 05.12.2008 11:44
как мне узнать количество принятых сообщений на мыле vitalik007 Работа с сетью в Delphi 1 14.01.2008 22:13