监控打印机打印内容.难哦.高手请进来指导,菜鸟进来听大大指导.(200分)

  • 主题发起人 主题发起人 007vivi
  • 开始时间 开始时间
0

007vivi

Unregistered / Unconfirmed
GUEST, unregistred user!
公司为了节约纸张,想监控打印机打印内容.数量,文档名,纸张大小,用户,等信息,打印机为网络打印机,最困难的是监控打印的内容.请问这个怎么做到?我看过一家公司的软件,苏州的,可以做到,就是价格太贵了,他是截取成Tiff图片保存到数据库.请各位大大给指导指导.
 
怎么没人呀?大家顶啊.....
 
觉得分少 ,我可以再加 .大家帮帮我拉.请各位大大看看.拜托拉!
 
拜托,大家幫幫忙拉11!!!
 
人呢?自己頂一下。
 
人呢?大家幫幫忙拉,在綫等待。。。。
 
感觉 hook 是条路子 ...
 
顶,我也想知道这个怎么做
 
madhook的DEMO就是关于打印监控的,而且大富翁里面有代码,你不妨查查离线.这样的公司你还呆个什么劲,是不是洗手监的手纸也要专人记数呀,的确是信息化的表帅.
 
感謝
LSUPER
tp26021340
活化石 的參與!
to 活化石:
madhook的DEMO是0幾年的離縣包?
公司没有辦法,跟著黨,要走信息化。[8D]
 
madCollection.exe这是一个控件,请到网上找.大富翁离线包中有这方面代码.这是两码事.
 
找到了,www.madhook.net。只有個Dll。。。。。[?]
 
怎麽都没有人想要分呀?
 
鬱悶,人呢?都没了~~~~~我暈了,自己想想吧。。。
 
這個控件 我裝上去了。没看到源代碼,只有調用dll
to:mjp123
where?please help me!thanks!
 
我看了盒子上的,不能實現監控打印内容。超鬱悶中。。。傳説中的高手呢?以前的帖子我也翻了好幾遍了,就是沒有找到,極度鬱悶中,這個問題早在2002年就有人問過,後來也是不了了之,我今天提出來,希望大家能夠一起努力,解決這個問題。thanks!
 
盒子上面的東西,大家借鑑借鑑:
unit UTrdGetJobs;

interface

uses
Classes,winspool,Windows,SysUtils;

type
TCallBack=Procedure(JobRecord:String) of Object;

TGetJobs = class(TThread)
private

protected
FPrinterName:String;
FCallBack:TCallBack;
Function GetJob():String;Virtual;Abstract;
procedure Execute; override;
Public
constructor Create(PrinterName:String;ACallBack:TCallBack);
end;

TGetJobs9X=Class(TGetJobs)
Protected
Function GetJob():String;Override;
end;

TGetJobsNT=Class(TGetJobs)
Protected
Function GetJob():String;Override;
end;

implementation

{ Important: Methods and properties of objects in VCL or CLX can only be used in a method called using Synchronize, for example, Synchronize(UpdateCaption); and UpdateCaption could look like,
procedure TrdGetJobs.UpdateCaption;
begin
Form1.Caption := 'Updated in a thread';
end; }

{ TrdGetJobs }

constructor TGetJobs.Create(PrinterName: String; ACallBack: TCallBack);
begin
FPrinterName:=PrinterName;
FCallBack:=ACallBack;

FreeOnTerminate := True;
inherited Create(False);
end;

procedure TGetJobs.Execute;
begin
while not Terminated do
begin
FCallBack(GetJob);
end;
end;

{ TGetJobsNT }

function TGetJobsNT.GetJob: String;
Const
InfoLevel = 1;
FirstJob = 0;
LastJob = 19;
Var
Jobs: Array[FirstJob..LastJob] Of TJobInfo1;
BytesNeeded,NumJobs: Dword;
hPrinter:THandle;
JobsRecord:String;
begin
JobsRecord:=';
if OpenPrinter(Pchar(FPrinterName),hPrinter,nil) then
begin
WaitForPrinterChange(hPrinter,PRINTER_CHANGE_ADD_JOB);
If EnumJobs(hPrinter,FirstJob,LastJob+1,InfoLevel,@Jobs,SizeOf(Jobs),BytesNeeded,NumJobs) Then
begin
if NumJobs<>0 then
begin
With Jobs[NumJobs-1] Do
begin
JobsRecord:=JobsRecord+StrPas(pDocument)+#9;
JobsRecord:=JobsRecord+StrPas(pPrinterName)+#9;
JobsRecord:=JobsRecord+StrPas(pMachineName)+#9;
JobsRecord:=JobsRecord+StrPas(pUserName)+#9;
JobsRecord:=JobsRecord+IntToStr(TotalPages)+#9;
JobsRecord:=JobsRecord+DateTimeToStr(SystemTimeToDateTime(Submitted)+8/24)+#9;
end;
end;
end;
ClosePrinter(hPrinter);
end;
Result:=JobsRecord;
end;

{ TGetJobs9X }

function TGetJobs9X.GetJob: String;
begin
//
end;

end.
 
建议换个思路,直接监控C:/WINDOWS/system32/spool/PRINTERS内的*.spl文件,那就是打印的内容,纯文本格式的。只要解决了如何打开它并记录下来就行。
 
togxw:
谢谢您的思路,我试看看,可是这样的话只能监控一台PC,我考虑的是整个网络上的(局域)打印机,所以,这个思路好象>.....还是看看
to all:
请大家帮忙拉!没有解决问题,我绝不罢休!
 
后退
顶部