Dzięki "Misiekd" rozwiązanie działa doskonale!
Przerobiłem trochę jako jedną procedurę: mam nadzieje ,ze komuś się przyda.
//Wymagane: Uses Winspool, printers;
//Procedura kasuje wszystkie dokumenty wprowadzone do bufora wydruku windows
//przez aktualnie ustawioną domyślną drukarkę
procedure KasujDaneBuforaWydrukuAktualnejDrukarki;
const
Defaults: TPrinterDefaults = (
pDatatype : nil;
pDevMode : nil;
DesiredAccess : PRINTER_ACCESS_USE or PRINTER_ACCESS_ADMINISTER );
var
Device, Driver, Port : array[0..255] of char;
hDeviceMode: THandle;
hPrinter: THandle;
begin
try
//Ustalamy aktualną domyślną drukarkę.
Printer.GetPrinter(Device, Driver, Port, hDeviceMode);
ShowMessage(Device);
if OpenPrinter(@Device, hPrinter, @Defaults) then
begin
try
if WinSpool.SetPrinter( hPrinter, 0, nil, PRINTER_CONTROL_PURGE ) then
Windows.Beep(200,200);
finally
ClosePrinter( hPrinter );
end;
end;
except
end;
end;
Oczywiście użytkownicy zaraz znaleźli nowy problem... gdy bufor wydruku zawiera dokumenty
wysyłane do różnych drukarek wykasowaniu ulegają tylko przeznaczone dla drukarki do jakiej mamy
pobrany hPrinter: THandle co w efekcie powoduje ,że bufor dalej jest zablokowany.Zupełnie nie wiem
jak to rozwiązać najlepiej gdyby była jakąś funkcja sprawdzająca czy bufor wydruku zawiera jakieś dane
jeśli tak to wykonujemy enumeracje po całej liście drukarek. Ciekawe czy to jest realne?