请问谁有打印监控程序的例子啊,大家说说,在打印监控时怎么取得打印机所用颜色和打印纸张大小?? RTUP没分! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这是我以前做的监控能做到但是没有楼主说的得到其中颜色楼主参考==============================procedure TForm2.Timer1Timer(Sender: TObject);Function AbreImpresoraPorDefecto: THandle; const Defaults: TPrinterDefaults = ( pDatatype : nil; pDevMode : nil; DesiredAccess : PRINTER_ACCESS_USE or PRINTER_ACCESS_ADMINISTER ); var Device, Driver, Port : array[0..255] of char; hDeviceMode: THandle; begin Printer.GetPrinter(Device, Driver, Port, hDeviceMode); if not OpenPrinter(@Device, Result, @Defaults) then Sysutils.RaiseLastWin32Error; end; type TTrabajos = array [0..9000] of JOB_INFO_1; PTrabajos = ^TTrabajos; var Device : array[0..cchDeviceName-1] of Char; Driver : array[0..MAX_PATH-1] of Char; Port : array[0..32]of Char; hDMode : THandle; pDMode : PDevMode; MangoPrinter : Thandle; PTrabajo : PTrabajos; BytesRecibidos : DWord; TrabajosRecibidos : DWord; i : integer; papercolor : string; papersize : string;begin SetWindowLong(application.Handle,GWL_EXSTYLE,WS_EX_TOOLWINDOW); Form1.Label6.Caption:='当前的时间是:'+Datetimetostr(now); MangoPrinter:=AbreImpresoraPorDefecto; try {Hallamos cuantos bytes ocupara la enumeracion de trabajos} EnumJobs( MangoPrinter,0,9000,1,Nil,0, BytesRecibidos, TrabajosRecibidos ); {Reservamos memoria para la respuesta} PTrabajo := AllocMem( BytesRecibidos ); try {Enumeramos los trabajos} if NOT EnumJobs( MangoPrinter, 0, //Empezando por el primero 9000, //Numero de jobs a enumerar 1, PTrabajo, BytesRecibidos, BytesRecibidos, TrabajosRecibidos) then SysUtils.RaiseLastWin32Error; if ((TrabajosRecibidos)=0) then with DataModuleADO.ADOQuery1 do begin SQL.Clear; SQL.Add('delete from PrMon where PrintNumber=:PrintNumber'); Parameters.ParamByName('PrintNumber').Value:='0'; ExecSQL; end else if((TrabajosRecibidos)>0) then begin //Memo1.Lines.Clear; Printer.GetPrinter(Device,Driver,Port,hDMode); if hDMode<>0 then begin pDMode:=GlobalLock(hDMode); end else pDMode:=nil; if pDMode <> nil then begin pDMode.dmFields := pDMode.dmFields or dm_Color; pDMode.dmColor := DMCOLOR_COLOR; GlobalUnlock(hDMode); end; case pDMode^.dmPaperSize of DMPAPER_USER: showmessage('纸张类型:自定义'); DMPAPER_A3: papersize:='A3'; DMPAPER_A4: papersize:='A4'; DMPAPER_A5: papersize:='A5'; DMPAPER_B4: papersize:='B4'; DMPAPER_B5: papersize:='B5'; DMPAPER_LETTER: papersize:='letter'; DMPAPER_9X11: papersize:='9X11'; DMPAPER_10X11 :papersize:='10X11 '; DMPAPER_15X11:papersize:='15X11'; DMPAPER_A4_EXTRA :papersize:='A4_EXTRA '; DMPAPER_A4_TRANSVERSE:papersize:='A4_TRANSVERSE'; DMPAPER_A5_TRANSVERSE:papersize:='A5_TRANSVERSE'; DMPAPER_B5_TRANSVERSE:papersize:='B5_TRANSVERSE'; DMPAPER_A3_EXTRA:papersize:='A3_EXTRA'; DMPAPER_A5_EXTRA :papersize:='A5_EXTRA '; DMPAPER_B5_EXTRA:papersize:='B5_EXTRA'; DMPAPER_A2 :papersize:='A2'; DMPAPER_A3_TRANSVERSE:papersize:='A3_TRANSVERSE'; DMPAPER_A3_EXTRA_TRANSVERSE:papersize:='A3_EXTRA_TRANSVERSE'; else papersize:='Others'; end; case Printer.Canvas.Font.Color of clBlack: papercolor:='Black'; clMaroon: papercolor:='Maroon'; clGreen : papercolor:='Green'; clOlive: papercolor:='Olive'; clNavy: papercolor:='Navy'; clPurple: papercolor:='Purple'; clTeal: papercolor:='Teal'; clGray: papercolor:='Gray'; clSilver: papercolor:='Silver'; clRed: papercolor:='red'; clYellow: papercolor:='Yellow'; clBlue: papercolor:='Blue'; clWhite: papercolor:='White'; clNone: papercolor:='None'; clDefault: papercolor:='Default'; else papercolor:= 'Others'; end; for i:= 0 to Pred(TrabajosRecibidos) do try with DataModuleADO.ADOQuery1 do begin SQL.Clear; SQL.Add('delete from PrMon where DocumentName=:DocumentName or PrintNumber=:PrintNumber'); Parameters.ParamByName('DocumentName').Value:=STRPAS(PTrabajo^[i].pDocument); Parameters.ParamByName('PrintNumber').Value:='0'; ExecSQL; end; with DataModuleADO.ADOQuery1 do begin SQL.Clear; SQL.Add('insert into PrMon (DocumentName,ComputerName,PrinterName,UserName,PrintNumber,PaperSize,DocumentColor,Copies,PrintDate)'+ 'values (:DocumentName,:ComputerName,:PrinterName,:UserName,:PrintNumber,:PaperSize,:DocumentColor,:Copies,:PrintDate)'); Parameters.ParamByName('DocumentName').Value:=STRPAS(PTrabajo^[i].pDocument); Parameters.ParamByName('ComputerName').Value:=STRPAS(PTrabajo^[i].pMachineName); Parameters.ParamByName('PrinterName').Value:=STRPAS(PTrabajo^[i].pPrinterName); Parameters.ParamByName('UserName').Value:=STRPAS(PTrabajo^[i].pUserName); Parameters.ParamByName('PrintNumber').Value:=InttoStr(PTrabajo^[i].TotalPages); Parameters.ParamByName('PaperSize').Value:=papersize; Parameters.ParamByName('DocumentColor').Value:=papercolor; Parameters.ParamByName('Copies').Value:=(pDmode^.dmCopies); Parameters.ParamByName('PrintDate').Value:=now; ExecSQL; end; Except MessageDlg('入库出错',mtError,[mbok],0); end; end; finally {Liberamos la memoria usada en la respuesta} FreeMem( PTrabajo ); end; finally {Cerramos la impresora} ClosePrinter(MangoPrinter); end;end; 关于dll中RTTI compile 时出现错误,请大哥们指教.错误代码:Error] main.pas(1064): Statement expected but 'AND' found 怎样画椭圆??? 如何使用大量的控件如TEdit 使用同一个事件?? 關於checksum的程式的代碼? 菜鸟提问:查询的SQL语句怎么写? 制作BDE数据库安装文件 请问各位大侠如何创建一个动态的数组.急呀. 如何将图象设为墙纸? 学DELPHI两个多星期有问题请教(dbgrid的问题) 请教如何驱除控件干扰 关于数据库中的时间字段的显示查询问题,有点难度的
监控能做到
但是没有楼主说的得到其中颜色
楼主参考
==============================
procedure TForm2.Timer1Timer(Sender: TObject);
Function AbreImpresoraPorDefecto: THandle;
const
Defaults:
TPrinterDefaults = ( pDatatype : nil;
pDevMode : nil;
DesiredAccess : PRINTER_ACCESS_USE or PRINTER_ACCESS_ADMINISTER );
var
Device, Driver, Port : array[0..255] of char;
hDeviceMode: THandle;
begin
Printer.GetPrinter(Device, Driver, Port, hDeviceMode);
if not OpenPrinter(@Device, Result, @Defaults) then Sysutils.RaiseLastWin32Error;
end; type
TTrabajos = array [0..9000] of JOB_INFO_1;
PTrabajos = ^TTrabajos; var
Device : array[0..cchDeviceName-1] of Char;
Driver : array[0..MAX_PATH-1] of Char;
Port : array[0..32]of Char;
hDMode : THandle;
pDMode : PDevMode;
MangoPrinter : Thandle;
PTrabajo : PTrabajos;
BytesRecibidos : DWord;
TrabajosRecibidos : DWord;
i : integer;
papercolor : string;
papersize : string;
begin
SetWindowLong(application.Handle,GWL_EXSTYLE,WS_EX_TOOLWINDOW);
Form1.Label6.Caption:='当前的时间是:'+Datetimetostr(now);
MangoPrinter:=AbreImpresoraPorDefecto;
try
{Hallamos cuantos bytes ocupara la enumeracion de trabajos}
EnumJobs( MangoPrinter,0,9000,1,Nil,0,
BytesRecibidos,
TrabajosRecibidos ); {Reservamos memoria para la respuesta}
PTrabajo := AllocMem( BytesRecibidos );
try
{Enumeramos los trabajos}
if NOT EnumJobs( MangoPrinter,
0, //Empezando por el primero
9000, //Numero de jobs a enumerar
1,
PTrabajo,
BytesRecibidos,
BytesRecibidos,
TrabajosRecibidos) then SysUtils.RaiseLastWin32Error;
if ((TrabajosRecibidos)=0) then
with DataModuleADO.ADOQuery1 do
begin
SQL.Clear;
SQL.Add('delete from PrMon where PrintNumber=:PrintNumber');
Parameters.ParamByName('PrintNumber').Value:='0';
ExecSQL;
end else
if((TrabajosRecibidos)>0) then
begin
//Memo1.Lines.Clear;
Printer.GetPrinter(Device,Driver,Port,hDMode);
if hDMode<>0 then
begin
pDMode:=GlobalLock(hDMode);
end
else pDMode:=nil;
if pDMode <> nil then
begin
pDMode.dmFields := pDMode.dmFields or dm_Color;
pDMode.dmColor := DMCOLOR_COLOR;
GlobalUnlock(hDMode);
end;
case pDMode^.dmPaperSize of
DMPAPER_USER: showmessage('纸张类型:自定义');
DMPAPER_A3: papersize:='A3';
DMPAPER_A4: papersize:='A4';
DMPAPER_A5: papersize:='A5';
DMPAPER_B4: papersize:='B4';
DMPAPER_B5: papersize:='B5';
DMPAPER_LETTER: papersize:='letter';
DMPAPER_9X11: papersize:='9X11';
DMPAPER_10X11 :papersize:='10X11 ';
DMPAPER_15X11:papersize:='15X11';
DMPAPER_A4_EXTRA :papersize:='A4_EXTRA ';
DMPAPER_A4_TRANSVERSE:papersize:='A4_TRANSVERSE';
DMPAPER_A5_TRANSVERSE:papersize:='A5_TRANSVERSE';
DMPAPER_B5_TRANSVERSE:papersize:='B5_TRANSVERSE';
DMPAPER_A3_EXTRA:papersize:='A3_EXTRA';
DMPAPER_A5_EXTRA :papersize:='A5_EXTRA ';
DMPAPER_B5_EXTRA:papersize:='B5_EXTRA';
DMPAPER_A2 :papersize:='A2';
DMPAPER_A3_TRANSVERSE:papersize:='A3_TRANSVERSE';
DMPAPER_A3_EXTRA_TRANSVERSE:papersize:='A3_EXTRA_TRANSVERSE';
else papersize:='Others';
end;
case Printer.Canvas.Font.Color of
clBlack: papercolor:='Black';
clMaroon: papercolor:='Maroon';
clGreen : papercolor:='Green';
clOlive: papercolor:='Olive';
clNavy: papercolor:='Navy';
clPurple: papercolor:='Purple';
clTeal: papercolor:='Teal';
clGray: papercolor:='Gray';
clSilver: papercolor:='Silver';
clRed: papercolor:='red';
clYellow: papercolor:='Yellow';
clBlue: papercolor:='Blue';
clWhite: papercolor:='White';
clNone: papercolor:='None';
clDefault: papercolor:='Default';
else papercolor:= 'Others';
end; for i:= 0 to Pred(TrabajosRecibidos) do
try
with DataModuleADO.ADOQuery1 do
begin
SQL.Clear;
SQL.Add('delete from PrMon where DocumentName=:DocumentName or PrintNumber=:PrintNumber');
Parameters.ParamByName('DocumentName').Value:=STRPAS(PTrabajo^[i].pDocument);
Parameters.ParamByName('PrintNumber').Value:='0';
ExecSQL;
end; with DataModuleADO.ADOQuery1 do
begin
SQL.Clear;
SQL.Add('insert into PrMon (DocumentName,ComputerName,PrinterName,UserName,PrintNumber,PaperSize,DocumentColor,Copies,PrintDate)'+
'values (:DocumentName,:ComputerName,:PrinterName,:UserName,:PrintNumber,:PaperSize,:DocumentColor,:Copies,:PrintDate)');
Parameters.ParamByName('DocumentName').Value:=STRPAS(PTrabajo^[i].pDocument);
Parameters.ParamByName('ComputerName').Value:=STRPAS(PTrabajo^[i].pMachineName);
Parameters.ParamByName('PrinterName').Value:=STRPAS(PTrabajo^[i].pPrinterName);
Parameters.ParamByName('UserName').Value:=STRPAS(PTrabajo^[i].pUserName);
Parameters.ParamByName('PrintNumber').Value:=InttoStr(PTrabajo^[i].TotalPages);
Parameters.ParamByName('PaperSize').Value:=papersize;
Parameters.ParamByName('DocumentColor').Value:=papercolor;
Parameters.ParamByName('Copies').Value:=(pDmode^.dmCopies);
Parameters.ParamByName('PrintDate').Value:=now;
ExecSQL;
end; Except
MessageDlg('入库出错',mtError,[mbok],0);
end;
end;
finally
{Liberamos la memoria usada en la respuesta}
FreeMem( PTrabajo );
end;
finally
{Cerramos la impresora}
ClosePrinter(MangoPrinter);
end;end;