Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2007.05.13;
Скачать: [xml.tar.bz2];

Вниз

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

 
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 вся ветка

Форум: "WinAPI";
Текущий архив: 2007.05.13;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.056 c
15-1176560356
Calibr
2007-04-14 18:19
2007.05.13
Текст из картинки


2-1177403471
artem.gor
2007-04-24 12:31
2007.05.13
Помогите написать процедуры


15-1176378858
Kolan
2007-04-12 15:54
2007.05.13
Ищу программу с ИИ.


2-1177006647
Sapan
2007-04-19 22:17
2007.05.13
Удалить символ из поля


15-1176624931
vasIZmax
2007-04-15 12:15
2007.05.13
Нормальный источник





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский