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

Вниз

Перехват запроса отправки на печать   Найти похожие ветки 

 
Viper_Omsk   (2006-12-05 16:12) [0]

Всем привет!
Такая проблема: при отправки какого-либо документа на печать необходимо зафиксировать дата и время этого события, получить имя пользователя и информацию от этом файле (тип, размер и т.д.). Помоги кто чем может! :-)


 
tesseract ©   (2006-12-05 16:22) [1]

В winXP/Win2003 можно настроить, чтобы всё это отражалось  в журнале событий и читать оттуда.


 
Сергей И   (2006-12-05 17:00) [2]

С ходи сюда. Есть примеры как читать очередь печати www.delphirus.com.ru


 
Viper_Omsk   (2006-12-09 19:11) [3]

Огромное спасибо!! Подскажите неопытному ещё такой момент: что нужно добавить в нижеприведённый исходник чтобы получить путь к файлу, который отправлен на печать?

uses WinSpool;

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 := 1000;

 bResult := OpenPrinter(PChar(sPrinterName), hPrinter, nil);
 if not bResult then
 begin
   ShowMessage("Error opening the printer");
   exit;
 end;

 bResult := EnumJobs(hPrinter, 0, Length(aJobs), 1, @aJobs, cbBuf, pcbNeeded,
   pcReturned);
 if not bResult then
 begin
   ShowMessage("Error Getting Jobs information");
   exit;
 end;

 ClosePrinter(hPrinter);

 for i := 0 to pcReturned - 1 do
 begin
   if aJobs[i].pDocument <> nil then
   begin
     SetLength(Result, Length(Result) + 1);
     Result[Length(Result) - 1] := aJobs[i];
   end;
 end;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var
 i, ii: Integer;
 aJobs: JOB_INFO_1_ARRAY;
begin
 for i := 0 to StringGrid1.ColCount - 1 do
   for ii := 0 to StringGrid1.RowCount - 1 do
     StringGrid1.Cells[i, ii] := "";

 aJobs := GetSpoolerJobs("HP LaserJet 6L PCL");

 for i := 0 to Length(aJobs) - 1 do
 begin
   StringGrid1.Cells[i, 0] := aJobs[i].pPrinterName;
   StringGrid1.Cells[i, 1] := aJobs[i].pMachineName;
   StringGrid1.Cells[i, 2] := aJobs[i].pUserName;
   StringGrid1.Cells[i, 3] := aJobs[i].pDocument;
   StringGrid1.Cells[i, 4] := aJobs[i].pDatatype;
   StringGrid1.Cells[i, 5] := aJobs[i].pStatus;
   StringGrid1.Cells[i, 6] := IntToStr(aJobs[i].Status);

   case aJobs[i].Status of
     JOB_STATUS_PAUSED: StringGrid1.Cells[i, 6] := "JOB_STATUS_PAUSED";
     JOB_STATUS_ERROR: StringGrid1.Cells[i, 6] := "JOB_STATUS_ERROR";
     JOB_STATUS_DELETING: StringGrid1.Cells[i, 6] := "JOB_STATUS_DELETING";
     JOB_STATUS_SPOOLING: StringGrid1.Cells[i, 6] := "JOB_STATUS_SPOOLING";
     JOB_STATUS_PRINTING: StringGrid1.Cells[i, 6] := "JOB_STATUS_PRINTING";
     JOB_STATUS_OFFLINE: StringGrid1.Cells[i, 6] := "JOB_STATUS_OFFLINE";
     JOB_STATUS_PAPEROUT: StringGrid1.Cells[i, 6] := "JOB_STATUS_PAPEROUT";
     JOB_STATUS_PRINTED: StringGrid1.Cells[i, 6] := "JOB_STATUS_PRINTED";
     JOB_STATUS_DELETED: StringGrid1.Cells[i, 6] := "JOB_STATUS_DELETED";
     JOB_STATUS_BLOCKED_DEVQ: StringGrid1.Cells[i, 6] :=
       "JOB_STATUS_BLOCKED_DEVQ";
     JOB_STATUS_USER_INTERVENTION: StringGrid1.Cells[i, 6] :=
       "JOB_STATUS_USER_INTERVENTION";
     JOB_STATUS_RESTART: StringGrid1.Cells[i, 6] := "JOB_STATUS_RESTART";
     JOB_POSITION_UNSPECIFIED: StringGrid1.Cells[i, 6] :=
       "JOB_POSITION_UNSPECIFIED";

   else
     StringGrid1.Cells[i, 6] := "Unknown status...";
   end;
 end;

 StringGrid1.Refresh;
end;


 
Германн ©   (2006-12-10 00:52) [4]


> Подскажите неопытному ещё такой момент: что нужно добавить
> в нижеприведённый исходник чтобы получить путь к файлу,
> который отправлен на печать?

Файлы уже давно никто не отправляет на печать. На печать отправляют документы! А они не обязательно связаны с каким-либо файлом. Имхо.


 
Viper_Omsk   (2006-12-14 15:33) [5]

Ещё один вопросик по теме: как можно получить информацию о количестве копий для каждого документа, отправленного на печать? В библиотеке Printers есть функция GetNumCopies, но компилятор постоянно ругается на неё.



Страницы: 1 вся ветка

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

Наверх




Память: 0.48 MB
Время: 0.04 c
8-1145581117
dmitrlast
2006-04-21 04:58
2007.05.13
Почему мерцает Image?


1-1174133083
Alvin
2007-03-17 15:04
2007.05.13
Вырезать ресурсы из файла


2-1177066000
Хаммер
2007-04-20 14:46
2007.05.13
Операторы


15-1176447880
Александра
2007-04-13 11:04
2007.05.13
Помогите разобраться с Ораклом


2-1177306193
_Anton_
2007-04-23 09:29
2007.05.13
поднять окно в MDI