![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Работа с принтером (не только локальным, но и сетевым)
Igor_thief © (2005-06-28 00:35:00)Насколько сложно получить такую инфу программно:
1. кол. напечатаных страниц
2. имя машины, с которой прислали задание на печать
3. имя напечтаного документа
4. дата/время когда он был напечатан
5. имя принтера, на котором производилась печать
6. ид задания
Vlad Oshin (2005-06-29 08:53:00) [1]не сложно
Способ 1. !!!!!
Правильно настроить аудит
2. набросок
function GetEnumeratedPrinterPorts: String;
label 1;
var
Buffer, PrinterInfo: PChar;
Flags, Count, NumInfo: DWORD;
I,j: Integer;
PrinterHandle:tHandle;
ZadachiPrintera : array [0..20] of TJobInfo2;
ByteRez,StructCount : DWORD;
Stroka : String;
procedure PriemZadanie;
var
f:textfile;
begin
form1.CZad:=SystemTimeToDateTime(ZadachiPrintera[j].Submitted);
stroka:='';
Stroka:=Stroka+' Mashine: '+ZadachiPrintera[j].pMachineName;
Stroka:=Stroka+' User: ' +ZadachiPrintera[j].pUserName;
Stroka:=Stroka+' Driver: ' +ZadachiPrintera[j].pDriverName;
Stroka:=Stroka+' Total pages: ' +IntToStr(ZadachiPrintera[j].TotalPages+ZadachiPrintera[j].PagesPrinted);
Stroka:=Stroka+' Document: ' +ZadachiPrintera[j].pDocument;
Stroka:=Stroka+' God: ' +IntToStr(ZadachiPrintera[j].Submitted.wYear);
Stroka:=Stroka+' Mesyac: ' +IntToStr(ZadachiPrintera[j].Submitted.wMonth);
Stroka:=Stroka+' Day: ' +IntToStr(ZadachiPrintera[j].Submitted.wDay);
Stroka:=Stroka+' Hour: ' +IntToStr(ZadachiPrintera[j].Submitted.wHour);
Stroka:=Stroka+' Minute: ' +IntToStr(ZadachiPrintera[j].Submitted.wMinute);
Stroka:=Stroka+' Second: ' +IntToStr(ZadachiPrintera[j].Submitted.wSecond);
Stroka:=Stroka+' Milliseconds: ' +IntToStr(ZadachiPrintera[j].Submitted.wMilliseconds);
assignfile(f,'prnlog.txt');
//reset(f);
append(f);
writeln(f,stroka);
closefile(f);
end;
begin
Result := '';
Flags := PRINTER_ENUM_LOCAL;
Count := 0;
EnumPrinters(Flags, nil, 2, nil, 0, Count, NumInfo);
if Count = 0 then Exit;
GetMem(Buffer, Count);
try
if not EnumPrinters(Flags, nil, 2, PByte(Buffer), Count, Count, NumInfo) then
Exit;
PrinterInfo := Buffer;
stroka:='';
try
for I := 0 to NumInfo - 1 do
with PPrinterInfo2(PrinterInfo)^ do
begin
OpenPrinter(pPrinterName,PrinterHandle,nil);
if EnumJobs(PrinterHandle,
0,
cJobs,
2,
@ZadachiPrintera,
SizeOf(ZadachiPrintera),
ByteRez,
StructCount)
then if StructCount>0
then for j := 0 to StructCount-1 do begin
//???????????????????
if (SystemTimeToDateTime(ZadachiPrintera[j].Submitted)>form1.CZad)
then PriemZadanie;
end;
Inc(PrinterInfo, sizeof(TPrinterInfo2));
end;
Result := Stroka;
finally
//!!!!!!!!
end;
finally
FreeMem(Buffer, Count);
end;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
timer1.Enabled:=false;
Application.PROCESSMessages;
GetEnumeratedPrinterPorts;
timer1.Enabled:=true;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
CZad:=0;
end;
end.
{
procedure Delay(ms : longint);
var
TheTime : LongInt;
begin
TheTime := GetTickCount + ms;
while GetTickCount < TheTime do begin
SleepEX(10);
Applica