Registriert seit: 17. Jan 2007
1.169 Beiträge
Turbo Delphi für Win32
|
Re: Druckaufträge steuern
16. Jul 2007, 00:21
Zitat von delphis spassbremse:
Aber ich denke, dass sich es bei diesem Problem einfacher zu relasieren ist,
weil ich nur den Druckauftrag Starten / Anhalten / Löschen und die Seitenzahl auslesen möchte.
Hallo,
Delphi-Quellcode:
uses
WinSpool, Printers;
procedure SetPrinterJob;
type
PJobs = ^TJobs;
TJobs = array[0..0]of TJobInfo2;
var
Needed, JobCounter : DWORD;
i : Integer;
Device, Driver, Port : array[0..255] of char;
hPrinter, hDeviceMode : THandle;
Buffer : Pointer;
Job : PJobs;
const
NoJobs = 100;
begin
Printer.PrinterIndex := -1;
Printer.GetPrinter(Device, Driver, Port, hDeviceMode);
if WinSpool.OpenPrinter(@Device, hPrinter, nil) then
begin
EnumJobs(hPrinter, 0, NoJobs, 2, nil, 0, Needed, JobCounter);
GetMem(Buffer, Needed);
try
Job := Buffer;
if EnumJobs(hPrinter, 0, NoJobs, 2, Buffer, Needed, Needed, JobCounter) then
begin
//Form1.Caption := Caption+ ' Anzahl der Druckaufträge: ' + inttostr(JobCounter);
for i := 0 to JobCounter - 1 do
begin
if Job[i].pDocument <> nil then
if messagebox(0, PChar('Soll der Druckauftrag des Dokuments "' + Job[i].pDocument + '" mit ' + inttostr( Job[i].TotalPages)+ ' zu druckenden Seiten abgebrochen werden?')
,'Nachfrage', MB_YESNO or MB_ICONQUESTION) = idYES then
SetJob(hPrinter, Job[i].JobId, 0, nil, winspool.JOB_CONTROL_DELETE);//JOB_CONTROL_PAUSE
end;
end;
finally
FreeMem(Buffer, Needed);
end;
WinSpool.ClosePrinter(hPrinter);
end;
end;
Hier soll eine Nachfrage erscheinen ob der Druckauftrag mit der angezeigten Seitenzahl des Standarddruckers abgebrochen werden soll.
Wenn du auf eingehende Druckaufträge auch noch reagieren möchtest, dann könntest du dich ja mal mit FindFirstPrinterChangeNotification und FindNextPrinterChangeNotification beschäftigen
Gruß bitsetter
"Viele Wege führen nach Rom" Wolfgang Mocker (geb. 1954), dt. Satiriker und Aphoristiker
|
|
Zitat
|