So das ist ja jetzt Super das das alles geklärt ist! So nun möchte ich aber das ein Index zurück gegeben wird wenn der einen Print job findet und danach wenn dieser fertig ist! Welcher Drucker das ist!
Die installierten Drucker lese ich so aus:
Delphi-Quellcode:
procedure TForm1.Btn_lese_alle_DruckerClick(Sender: TObject);
var
i : integer;
begin
Combobox1.Clear;
for i := 0 to Printers.Printer.Printers.Count-1 do
begin
combobox1.Items.Add(Printers.Printer.Printers.Strings[i]);
end;
end;
Somit habe ich den Index der Drucker gleich mit, übernehme den Index von der Combobox, da dieser gleich ist wie der von den Windows Druckern!!!
Das ist meine alte funktion:
Delphi-Quellcode:
function print_jobs(printer_index: integer) : integer;
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
//TEIL1
Printer.PrinterIndex := printer_index;
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);
// Buffer := AllocMem(Needed);
try
Job := Buffer;
if EnumJobs(hPrinter, 0, NoJobs, 2, Buffer, Needed, Needed, JobCounter) then
begin
Form1.LabeledEdit2.Text := IntToStr(JobCounter);
if JobCounter > 0 then
begin
result := 1;
end;
for i := 0 to JobCounter - 1 do
begin
if Job[i].pDocument <> nil then
Form1.LabeledEdit3.Text := IntToStr(Job[i].TotalPages);
end;
end;
finally
FreeMem(Buffer, Needed);
end;
WinSpool.ClosePrinter(hPrinter);
end;
sleep(10);
end;
Gruß Olli