![]() |
Statusinformation über ein Drucker
Hallo,
ich möchte gerne über den Standarddrucker folgende Informationen erfahren:
Das Problem ist nur, dass mir die Windows API Funktion entweder den Wert 0 für nichts oder den Status Angehalten zurück gibt. Die anderen Statuse zeigt er mir nicht an, weil es nicht geht anscheinend. Hat jemand von Euch einen Lösungsansatz, wie ich an diese Informationen ran komme? Beste Grüße, Dank und noch einen schönen Festtag Ulrich |
Re: Statusinformation über ein Drucker
Schau mal hier:
![]() Zugegeben etwas antiquiert und funzt auch nur auf NT-Systemen, aber das sollte ja nicht das Problem sein. Ansonsten gibt es im PSDK noch ein Codebeispiel aber mit Polling (für Win9x). |
Re: Statusinformation über ein Drucker
Um Infos über den Druckerstatus zu erfahren, steht einem das Interrupt 17h und das Druckerstatus-Byte zur Verfügung.
Delphi-Quellcode:
Nun zu den einzelnen Bits und ihrer Bedeutung:
function LeseStatusByte: Byte;
asm MOV AH, 02h XOR DX, DX //setzt DX-Register auf null INT 17h //löst Software-Interrupt für den Drucker aus(Funktion 02h-->Status-Byte des Druckers auslesen) MOV Result, AH //Status-Byte wird aus dem Register gesogen und einer Variablen übergeben end; Bit 0: Time-Out/Reserviert Bit 1+2: Reserviert Bit 3: 1 = Ein-/Ausgabefehler Bit 4: 1 = Drucker ist online Bit 5: 1 = Kein Papier Bit 6: 1 = Empfangsbestätigung Bit 7: 1 = Drucker ist bereit
Delphi-Quellcode:
const
PM_EA_ERROR = $08; PM_ONLINE = $10; PM_NOPAPER = $20; PM_ACKNOWLEDGEMENT =$40; PM_READY = $80; : if(LeseStatusByte and PM_NOPAPER=PM_NOPAPER)then ShowMessage('Sorry Atze, keen Papier mehr!'); : |
Re: Statusinformation über ein Drucker
Hi,
![]() Chris |
Re: Statusinformation über ein Drucker
@MaOfDe: Faszinierende Idee! Programmieren wir mit Delphi oder mit Turbo-Pascal? Du scheinbar noch mit Turbo-Pascal. Das was du vorschlägst funktioniert wunderbar unter Windows 9x und DOS. Unter Windows NT/2000/XP/2003/Longhorn/Everest und wie die designierten Nachfolger alle heißen, hast du damit herzliche Probleme. Abgesehen davon, ist es Sache des OS ob der Interrupt umgebogen wird oder nicht! Also auch unter Win9x kann man damit böse auf die Nase fallen (theoretisch!). Weiterhin gibt es nicht nur die guten alten (LPT-)Drucker die auch unter DOS oder beliebigen OS laufen, sondern auch USB-Drucker (was zu verschmerzen sein mag - ich kenne das Interrupt-Mapping dort nicht) UND (viel wichtiger!) sog. GDI-Drucker, die direkt die Windows-Ressourcen und die darunterliegenden APIs benutzen. Die werden vermutlich nicht auf solche Versuche reagieren, da sie nichtmal mit einem simplen Standarddruckertreiber klar kommen. Gute Beispiele für solche Drucker sind Lexmark-Drucker - sog. "Windows-Drucker".
In diesem Sinne: Hinsetzen, Hausaufgaben nochmal machen :mrgreen: Nachtrag: Das soll jetzt keinesfalls meine Lösung "promoten", da diese sowieso nur auf NT-basierten Systemen läuft. Aber selbst verglichen mit dem recht altmodischen Polling unter Win9x ist deine Methode wie eine Steinaxt mit der man auf das System eindrischt. [edit]Assarbad: falsch gesetzte Satzzeichen korrigiert.[/edit] |
Re: Statusinformation über ein Drucker
@Assarbad: Autsch! Danke für die Belehrung! Hab leider nur Windows 98 auf menen Rechner(allet andre traut sich nich rauf). Hab ich zum Glück noch in kenem Programm eingebaut. Habn nützliches Buch in 'ner Bibliothek gefunden... steht alles mögliche drin, wie Windows/DOS/BIOS arbeiten... is aber mehr ne Referenz als n Lehrbuch. Stehn auch wirklich ALLE Interrupts drin, doch leider, oh graus, es is' von 1992.
Für menen Rechner reichts aba allemal 8) . |
Re: Statusinformation über ein Drucker
Verständlich. Von '92, dann ist es klar ;) ... eigentlich war Windows 98 schon 1998 nicht mehr auf dem aktuellen Stand der Technik. Also, wenn du sowas mit direktem Hardwarezugriff machst, solltest du normalerweise gleich einen Treiber schreiben, denn die sind für sowas zuständig. Daß Win9x sowas erlaubt ist vielmehr eine Schwäche dieser Systeme.
Icke faschteh och gornich watte sachst, wail du so bahlinast :mrgreen: Oliver |
Re: Statusinformation über ein Drucker
Net schlescht, halt misch aba trotzdem noch zurück mit mener 'Heematsprache', sonst kriecht det jeman' no' falsch in'n Kopp rinn unn det führt wah'scheenlisch zu unhervorsehban Komplikationen :mrgreen: !!
Wo wir grad bei Berlin sinn, hier is ens mener Topics :lol: : ![]() Kam leider niemand uff die Idee(bis uff 2 o. 3) selber sone Codes zu posten :( . Nochmal dazu: Zitat:
Treiber schreiben??? Kennste empfehlenswerte Tuts, würde mich interessieren... |
Re: Statusinformation über ein Drucker
schau hier: :cry:
raik |
Re: Statusinformation über ein Drucker
Ich habe mich damit begnügt, dass so was nur schwer möglich ist und ich überwache jetzt immer die Druckerwarteschlange. Hoffen wir auf Longhorn, dass es damit vielelicht besser wird.
Ulrich PS: Danke für die Antworten. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:44 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