Odczyt bufora drukarki.

0

Witam
Czy jest jakiś niezbyt skomplikowany sposób na odczytanie statusu drukarki oraz zawartości bufora nazwy zadania czy coś w tym stylu?

Potrzebuję wykonać funkcje gdy w drukarce znajdzie się zadanie X...
Jakieś przykłady porady mile widziane... (freepascal lub lazarus)

Pozdrawiam

Edit:

Może ktoś podpowie jak skorzystać z winspool? wskazać drukarkę i pobrać jej zadania?
funkcja Printers.GetPrinter nie istnieje...

0

Bo jeśli chodzi o bezpośrednią komunikację z print spoolem to musisz używać tych funkcji https://msdn.microsoft.com/en-us/library/windows/desktop/dd162861%28v=vs.85%29.aspx Najpierw łączysz się do drukarki po jej nazwie za pomocą funkcji OpenPrinter z której dostajesz uchwyt na drukarkę i możesz dowolnie komunikować się z nią. A szukana przez Ciebie funkcja to EnumJobs.

0

Widziałem rozwiązanie gdzie w sieci znajdował się serwer który robił za centrum wydruków. Każda drukarka w firmie podpięta była do printserwera i przez LPR szedł wydruk do centralnego serwera. Tam odkładała się informacja co, kto, gdzie, ile itd., a następnie przekazywany był wydruk z serwera na wskazaną drukarkę. Takie rozwiązanie gwarantuje Ci, że funkcje które chcesz wykonać wykonają się np przed wydrukiem bo nawet z poziomu aplikacji jeśli się dostaniesz do drukarki to może się okazać, że wydruk poszedł, a Twoje funkcje jeszcze nie zdążyły się wykonać lub też w drugą stronę wykonasz funkcje, a problem z drukarką spowoduje, że zadanie zostanie odrzucone.

0
Mr.YaHooo napisał(a):

Bo jeśli chodzi o bezpośrednią komunikację z print spoolem to musisz używać tych funkcji https://msdn.microsoft.com/en-us/library/windows/desktop/dd162861%28v=vs.85%29.aspx Najpierw łączysz się do drukarki po jej nazwie za pomocą funkcji OpenPrinter z której dostajesz uchwyt na drukarkę i możesz dowolnie komunikować się z nią. A szukana przez Ciebie funkcja to EnumJobs.

Mogę prosić o kawałek działającego kodu pod lazarusa? bo funkcja OpenPrinter('Nazwa drukarki',PHandle,nil); wykrzacza mi program...

0

@woolfik tak, ale pytanie czy takie rozwiązanie to nie jest armata na muchy w przypadku małego programu który działa lokalnie na komputerze? No i te funkcje dadzą taki sam rezultat jak Windowsowy bufor wydruku.

@Mardok nie piszę w Delphi, ale program się wykrzacza ponieważ w funkcji OpenPrinter brakuje 3 parametru który powinien być przekazany. To jest odpowiednia struktura. Pod C jest to mniej więcej tak:

PRINTER_DEFAULTS pdPrinterSettings;
char szPrinterName[CCHDEVICENAME] = "HP LaserJet 1100";

// zerowanie ustawien
ZeroMemory(&pdPrinterSettings, sizeof(pdPrinterSettings));

// ustawiamy prawa dostępu (WinNT)
pdPrinterSettings.DesiredAccess = PRINTER_ACCESS_USE;

// otwieramy drukarke
OpenPrinter(szPrinterName,&hPrinter, &pdPrinterSettings);

1 użytkowników online, w tym zalogowanych: 0, gości: 1