• 一个简单的打印监控示例


    {
    
    关于打印监控,下面是一个简单的示例,可以监控到打印的任务信息。
    
    }
    
    unit FfrmMain;
    
    interface
    
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ExtCtrls, ComCtrls, StdCtrls, Buttons,WinSpool;
    
    type
      TfrmMain = class(TForm)
        ListView1: TListView;
        Panel1: TPanel;
        BitBtn2: TBitBtn;
        Timer1: TTimer;
        procedure Timer1Timer(Sender: TObject);
      private
        CurrentMachineName,CurrentUser,CurrentDocName,CurrentPrinter,CurrentPages: String;
        procedure PrintDetect;
        procedure SaveData;
        { Private declarations }
      public
        { Public declarations }
      end;
    
    var
      frmMain: TfrmMain;
    
    implementation
    
    {$R *.dfm}
    
    procedure TfrmMain.PrintDetect;
    var
      tbt:Byte;
      PrinterNeeded,PrinterReturned,JobNeeded,JobReturned:DWORD;
      PrinterResultBuffer,JobResultBuffer:Pointer;
      PrinterCount,JobCount:Integer;
      PrinterInfo:PPrinterInfo1;         //打印机队列
      JobInfo:PJobInfo2;                 //打印任务队列
      hPrinter:THandle;
    begin
      PrinterNeeded:=0;
      PrinterReturned:=0;
      EnumPrinters(PRINTER_ENUM_lOCAL,'',1,@tbt,0,PrinterNeeded,PrinterReturned);
      if PrinterNeeded<>0 then
      begin
        PrinterCount:=PrinterNeeded;
        GetMem(PrinterResultBuffer,PrinterCount);
        EnumPrinters(PRINTER_ENUM_lOCAL,'',1,PrinterResultBuffer,PrinterNeeded,PrinterNeeded,PrinterReturned);
        PrinterInfo:=PrinterResultBuffer;
        //当前打印机
        JobNeeded:=0;
        OpenPrinter(PrinterInfo^.pName,hPrinter,nil);
        EnumJobs(hPrinter,0,1,2,@tbt,0,JobNeeded,JobReturned);
        if JobNeeded<>0 then
        begin
          JobCount:=JobNeeded;
          GetMem(JobResultBuffer,JobCount);
          try
            //列举当前正在打印的任务
            EnumJobs(hPrinter,0,1,2,JobResultBuffer,JobNeeded,JobNeeded,JobReturned);
            JobInfo:=JobResultBuffer;
            {
            AtPrintEdit.Text:='计算机名:'+(JobInfo^.pMachineName)+
              ' 用户名:'+String(JobInfo^.pUserName)+
              ' 文档名:'+String(JobInfo^.pDocument);
            }
            if CurrentDocName<>JobInfo^.pDocument then
            begin
              if CurrentDocName<>'' then
                SaveData;
              CurrentMachineName:=JobInfo^.pMachineName;
              CurrentUser:=JobInfo^.pUserName;
              CurrentDocName:=JobInfo^.pDocument;
              CurrentPrinter:=JobInfo^.pPrinterName;
              CurrentPages:=InttoStr(JobInfo^.TotalPages);
            end;
          finally
            FreeMem(JobResultBuffer,JobCount);
          end;
        end
        else
        begin
          if CurrentDocName<>'' then
          begin
            SaveData;
            CurrentMachineName:='';
            CurrentUser:='';
            CurrentDocName:='';
            CurrentPrinter:='';
            CurrentPages:='';
          end;
        end;
        ClosePrinter(hPrinter);
      end;
    end;
    
    procedure TfrmMain.SaveData;
    var
      ListItem:TListItem;
    begin
      ListItem:=ListView1.Items.Add;
      ListItem.Caption:=CurrentMachineName;
      ListItem.SubItems.Add(CurrentUser);
      ListItem.SubItems.Add(DatetoStr(Date)+' '+TimeTostr(Time));
      ListItem.SubItems.Add(CurrentDocName);
      ListItem.SubItems.Add(CurrentPrinter);
      ListItem.SubItems.Add(CurrentPages);
    end;
    
    procedure TfrmMain.Timer1Timer(Sender: TObject);
    begin
      PrintDetect;
    end;
    
    end.
  • 相关阅读:
    DS博客作业06--图
    DS博客作业05--树
    DS博客作业03--栈和队列
    DS博客作业02--线性表
    DS博客作业01--日期抽象数据类型设计与实现
    C语言博客作业06--结构体&文件
    c语言博客作业05--指针
    C语言博客作业03--函数
    DS博客作业--课程总结
    DS博客作业07--查找
  • 原文地址:https://www.cnblogs.com/china1/p/3400028.html
Copyright © 2020-2023  润新知