Registriert seit: 17. Jan 2007
1.169 Beiträge
Turbo Delphi für Win32
|
Re: Druckerdokumentenlisteneintrag markieren
9. Feb 2007, 02:31
Hallo,
hier habe ich ein kleines Beispiel, um bestimmte Druckaufträge zu pausieren. Ich hoffe mal, dass ist das was du wolltest.
Delphi-Quellcode:
uses
WinSpool, Printers;
procedure TForm1.Button1Click(Sender: TObject);
const
MaxJobs = 1024;
type TJobs= array of TJobInfo2;
var
NoJobs: Integer;
Needed, JobCounter: DWORD;
i : Integer;
Device, Driver, Port : array[0..255] of char;
hPrinter, hDeviceMode : THandle;
Buffer : Pointer;
begin
Printer.PrinterIndex := -1;
Printer.GetPrinter(Device, Driver, Port, hDeviceMode);
if not WinSpool.OpenPrinter(@Device, hPrinter, nil) then
Exit;
GetPrinter(hPrinter, 2, nil, 0, @Needed);
GetMem(Buffer, Needed);
if GetPrinter(hPrinter, 2, Buffer, Needed, @Needed) then
if TPrinterInfo2A(Buffer^).pPrinterName <> nil then
Caption:= 'Druckername: '+TPrinterInfo2A(Buffer^).pPrinterName;
NoJobs:= 100;
EnumJobs(hPrinter, 0, NoJobs, 2, nil, 0, Needed, JobCounter);
GetMem(Buffer, Needed);
if EnumJobs(hPrinter, 0, NoJobs, 2, Buffer, Needed, Needed, JobCounter) then
begin
Caption:= Caption+ ' Anzahl der Druckaufträge: '+ inttostr(JobCounter);
for i:= 0 to JobCounter- 1 do
begin
if TJobInfo2(ptr(cardinal(Buffer)+ i* SizeOf(TJobInfo2))^).pDocument<> nil then
if messagebox(0, PChar('Soll der Druckauftrag der Datei "'+ TJobInfo2(ptr(cardinal(Buffer)+i* SizeOf(TJobInfo2))^).pDocument+ '" pausieren?')
,'Nachfrage', MB_YESNO or MB_ICONQUESTION)=idYES then
SetJob(hPrinter, TJobInfo2(ptr(cardinal(Buffer)+ i* SizeOf(TJobInfo2))^).JobId, 0, nil, JOB_CONTROL_PAUSE);//winspool.JOB_CONTROL_RESUME
end;
end;
FreeMem(Buffer, Needed);
WinSpool.ClosePrinter(hPrinter);
end;
Gruß bitsetter
"Viele Wege führen nach Rom" Wolfgang Mocker (geb. 1954), dt. Satiriker und Aphoristiker
|