![]() |
AW: Druckaufträge überwachen und Programm starten
Hier hätten wir noch ein Stück simplen kurzen Code:
Delphi-Quellcode:
Getestet unter Win7_64 mit D2009 .. funzt
TMyThread = class(TThread)
protected FPrinter : THandle; procedure Execute; override; public constructor Create(APrinter : THandle); reintroduce; end; //... constructor TMyThread.Create(APrinter : THandle); begin FPrinter := APrinter; inherited Create(false); end; procedure TMyThread.Execute; var change : THandle; changed : Cardinal; info : Pointer; s : String; begin change := FindFirstPrinterChangeNotification(FPrinter, PRINTER_CHANGE_JOB, 0, nil); while not Terminated do begin if WaitForSingleObject(change, 500) <> WAIT_TIMEOUT then begin if FindNextPrinterChangeNotification(change, changed, nil, info) then begin case changed of PRINTER_CHANGE_ADD_JOB: s := 'add job'; PRINTER_CHANGE_SET_JOB: s := 'set job'; PRINTER_CHANGE_DELETE_JOB: s := 'delete job'; PRINTER_CHANGE_WRITE_JOB: s := 'write job'; end; Synchronize(procedure begin ShowMessage(s) end); FreePrinterNotifyInfo(info); end; end; end; FindClosePrinterChangeNotification(change); end; |
AW: Druckaufträge überwachen und Programm starten
Zitat:
Gruß Olli Danke für eure Hilfe |
AW: Druckaufträge überwachen und Programm starten
Zitat:
|
AW: Druckaufträge überwachen und Programm starten
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:
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!!!
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; Das ist meine alte funktion:
Delphi-Quellcode:
Gruß Olli
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; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:54 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz