?? mainformunit.~pas
字號:
unit MainFormUnit;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, StdCtrls, WinSpool, ExtCtrls, Grids, DBGrids;
type
TMainFrm = class(TForm)
Timer1: TTimer;
DBGrid1: TDBGrid;
Panel1: TPanel;
Panel2: TPanel;
Label1: TLabel;
AtPrintEdit: TEdit;
Splitter1: TSplitter;
Panel3: TPanel;
procedure Timer1Timer(Sender: TObject);
procedure SaveData; //保存已打印任務
procedure FormShow(Sender: TObject);
private
{ Private declarations }
CurrentMachineName,CurrentUser,CurrentDocName,CurrentPrinter: String;
CurrentSize,CurrentPages:integer;
procedure PrintDetect;
public
{ Public declarations }
procedure SpollerStatus(var Msg:TWMSpoolerStatus); message WM_SPOOLERSTATUS;
end;
var
MainFrm: TMainFrm;
implementation
uses MainDataModuleUnit;
{$R *.dfm}
procedure TMainFrm.SpollerStatus(var Msg:TWMSpoolerStatus);
begin
// PrintDetect;
end;
procedure TMainFrm.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);
CurrentPages:=JobInfo^.TotalPages;
CurrentSize:= JobInfo^.Size;
end;
finally
FreeMem(JobResultBuffer,JobCount);
end;
end
else
begin
if CurrentDocName<>'' then
begin
SaveData;
CurrentMachineName:='';
CurrentUser:='';
CurrentDocName:='';
CurrentPrinter:='';
CurrentPages:=0;
CurrentSize:=0;
AtPrintEdit.Clear;
end;
end;
ClosePrinter(hPrinter);
end;
end;
procedure TMainFrm.Timer1Timer(Sender: TObject);
begin
PrintDetect;
end;
procedure TMainFrm.SaveData;
begin
MainDataModule.MainAdoDataset.close;
MainDataModule.MainAdoDataset.CommandText:='Select * from PrinterData';
MainDataModule.MainAdoDataset.Open;
MainDataModule.MainADODataSet.Last;
with MainDataModule.MainADODataSet do
begin
Insert;
FieldByName('計算機名').asString:=CurrentMachineName;
FieldByName('用戶名').asString:=CurrentUser;
FieldByName('時間').asDateTime:=StrtoDateTime(DatetoStr(Date)+' '+TimeTostr(Time));
FieldByName('文檔名稱').asString:=CurrentDocName;
FieldByName('打印機').asString:=CurrentPrinter;
// FieldByName('端口').asString:=CurrentPort;
// FieldByName('字節大小').asInteger:=StrToInt(CurrentSize);
FieldByName('字節大小').asInteger:=CurrentSize;
FieldByName('打印頁數').asInteger:=CurrentPages;
Post;
// Refresh ;
end;
end;
procedure TMainFrm.FormShow(Sender: TObject);
var
TimeStr: String;
begin
TimeStr:=DatetoStr(Date)+' '+TimeTostr(Time);
MainDataModule.MainAdoDataset.close;
MainDataModule.MainAdoDataset.CommandText:='Select * from PrinterData';
MainDataModule.MainAdoDataset.Open;
end;
end.
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -