如何对打印机进行动态监控?(100分)

C

crzay

Unregistered / Unconfirmed
GUEST, unregistred user!
各位大虾:
本人负责对机房打印机的管理.如何对打印机进行动态监控?使打印者在打
印时自动记录下打印文件名,打印页数,打印时间等打印参数,并要求打印者输
入操作代码或姓名,否则不予打印.
 
Some body finish it, please!
 
Some body finish it, please!
 
1. 如果是NT,是不是审核功能能够实现?把打印机共享的情况记录到事件日之中,
审核有没有这项功能,我不记得了,找照看吧!
2. 在NT中,打印机共享可以设定可以打印的用户及其权限.(这一点可以肯定)
 
我知道可用程序监测打印机的工作状态如:缺纸等,但若要打印机实现你说那些要
求则有点强人所难,即不可能从打印机得到任何东西!
但你的要求却可以用程序来实现,而不是打印机。
 
摘自<微电脑世界>99年21期81页
可以在应用程序中通过对系统日志的读取,来获得打印事件的原始数据并进行处理,从而实现WindowsNT网络共享打印的计账管理功能。
一、WindowsNT的共享打印管理机制
在WindowsNT网络系统中,共享打印的访问控制是基于域用户进行管理的。为了实现共享打印,系统管理员应创建用于共享的打印设备(包括绘图仪)并对其命名(这个名字称为共享名),然后对用户或用户组授予访问权。对于打印客户来说,要求具有合法的权限,即需要用户名和口令、打印服务器名和共享名。使用客户机上的打印机设置功能进行相应的设置即可实现共享打印。
如图1所示,打印服务器名为PrnServ,打印机共享名为LP,授权用户名为User1,在客户机CLT上设置打印机为//PrnServ/LP。由于User1是被授权的合法用户,当在客户机CLT上以User1的身份向PrnServ发出打印请求时,可在//PrnServ/LP上实现打印。
二、打印计账管理软件的开发
1.基本数据的获取
基本数据的获取是实现打印计账管理的关键。WindowsNT的系统日志较详细地记录了系统服务的各类事件,其中对打印事件记录了客户机器名、用户名、打印时间、文档字节数、打印页数、文档名等信息。应用程序不能直接读取而必须通过调用API函数才能获得这些信息。下面的程序段访问打印服务器名为PrnServ的系统日志,并过滤出有关打印的信息。
HANDLEhdle;
EVENTLOGRECORD*ptr;
BYTEbuff[4096];
DWORDread_len,next_len;
ptr=(EVENTLOGRECORD*)&amp;buff;
hdle=OpenEventLog("PrnServ","Print");
//打开PrnServ上有关打印(Print)的系统日志
if(hdle==NULL){
//打开日志失败}
else
{
//打开日志成功}
while(ReadEventLog(hdle,
//读取系统日志
EVENTLOG_FORWARDS_READ|
EVENTLOG_SEQUENTIAL_READ,
1,
ptr,
sizeof(buff),
&amp;read_len,
&amp;next_len)){
//信息处理程序段}
CloseEventLog(hdle);
//关闭系统日志
----读取的信息以结构EVENTLOGRECORD中所定义的格式存储在buff中,通过指针ptr可以获得这些信息。在信息处理程序段,将获得的信息以记录形式存入数据库,以便进行统计查询。
----这里需要指出的是,应用程序不仅可以读取本机上的系统日志,而且还可以读取其他服务器的系统日志,条件是必须具有Administrator的权限,这就意味着一个应用程序可以对多台打印服务器进行计账管理。
----2.软件的查询统计功能
----对共享打印信息的查询统计,实际上是用前端开发工具开发的应用程序对后台数据库的操作。基本功能如图2所示。
图2软件功能
----其中,查询管理可以分别按机器名、打印机名、用户名、文档名等查询,并且可选年、月、日及任意时间段进行统计,得到打印页数、字节量等结果并显示或打印;数据管理主要包括对历史数据的整理、归档等;系统设置包括对打印服务器名、打印机名及ODBC或BDE系统数据源的配置信息的管理。
----在数据库应用程序的开发中,对于前端工具和后台数据库有多种选择。前端工具如VB、Delphi、PB、C++Builder等都有很好的开发环境,考虑设计用户界面和调用API函数的方便性,本软件的开发使用了C++Builder。对于后台数据库,本软件适用于任何ODBC或BDE支持的数据库,只要在系统设置功能中进行设置即可。
 
问者是:对打印机进行动态监控...。而不是你说的任务管理程序,所答非所问!
 
通过NT的系统日志获得打印文件和打印者,
要管理用户的打印(输入口令才给打)就得有一个在打印服务器上的打印管理程序,是否跟打印记费相似,好象哪个软件有,想想...
 
对不起,各位:
我的意思是在打印前加一道关卡!只有在程序在记录下上述信息后才能打印!
这个程序将部分代替windows的打印管理器的功能!我使用win98,打印机为
epson 1520(彩色喷墨,A2 MAX)
 
Let me think!
 
我也比较感兴趣!
 
谁懂告诉我一声我
 
我曾经做了一个程序,利用Windows API 读取打印队列种的任务列表和打印作业的基本属性(标题,打印时间,打印者...),并能够暂停,
恢复及取消打印.
你的要求,可这样实现,利用我的程序监测打印队列,如发现打印作业,则先停止打印
并询问口令,记录打印作业的基本情况,然后再打印,不过前提是我的程序一直运行,
才能实时监测.
 
Charles: 能不能把你的程序给我义愤? cakk2000@163.net
 
charles: 能否也给我一份 guo_liu@hotmail.com
thanks a lot
 
cAkk,guo_qpeter:
程序已经寄出(cakk2000@163.net,guo_liu@hotmail.com.)
该程序是通过Windows API 实现,编得比较早,比较匆忙.当时是因为我们单位的
计算机联网后为控制对系统包括打印机的设置,所以通过 策略编辑器(Poledit.exe)
限制控制面板.(策略编辑器是通过修改注册表实现的,限制很有限,只对外行有用.我自己也曾编了一个,增加了口令等功能.)
这样造成打印队列有作业时,任务栏上的托盘中打印机小图表不出现,以至无法暂停,取消打印,很不方便,于是研究了一下Windows API ,基本实现了Windows自己的打印任务管理器的功能.
 
to charles:
能不能给我一份,多谢!
 
Hi charles:
我也想要,能不能给也给我一份,ln_562000@163.net 多谢!
 
请寄我一份?sam@ma.com.cn
 

Similar threads

I
回复
0
查看
903
import
I
D
回复
0
查看
2K
DelphiTeacher的专栏
D
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
2K
import
I
顶部