Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Statusinformation über ein Drucker (https://www.delphipraxis.net/13763-statusinformation-ueber-ein-drucker.html)

ustra 26. Dez 2003 12:14


Statusinformation über ein Drucker
 
Hallo,

ich möchte gerne über den Standarddrucker folgende Informationen erfahren:
  • Aus
  • Bereit
  • Druckt
  • Nicht genügend Papier vorhanden
  • Patrone leer
All diese Druckerinformationen sollte man über die PRINTER_INFO_2 Struktur und mit GetPrinter auslesen können. Den Code habe ich auch entsprechend geschrieben. Syntaktisch und logisch war auch alles richtig.

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

Assarbad 14. Feb 2004 19:21

Re: Statusinformation über ein Drucker
 
Schau mal hier: http://assarbad.net/stuff/prtmon3vivi.zip

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).

MaOfDe 18. Feb 2004 21:09

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:
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;
Nun zu den einzelnen Bits und ihrer Bedeutung:
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!');
:

CalganX 18. Feb 2004 21:18

Re: Statusinformation über ein Drucker
 
Hi,
Bei Google suchenSmallport Delphi ist eine Delphi-Komponente, die ich selber für ein Projekt verwende. Findest du vermutlich auch bei Torry. Da ist eine Demo bei, wo die verschiedenen Staten (plural von Status?) auch erklärt werden.

Chris

Assarbad 18. Feb 2004 23:40

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]

MaOfDe 19. Feb 2004 16:50

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) .

Assarbad 19. Feb 2004 19:34

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

MaOfDe 19. Feb 2004 21:16

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: : Programmiersprachen auf Französisch
Kam leider niemand uff die Idee(bis uff 2 o. 3) selber sone Codes zu posten :( .

Nochmal dazu:
Zitat:

Programmieren wir mit Delphi oder mit Turbo-Pascal? Du scheinbar noch mit Turbo-Pascal.
Ick programmier eigentlich mit Delphi, wollt mir aber bisschen Assembler zu genüge tun(Kann ja nicht schaden). Men PC war lange von Viren befallen, bin'n also noch etwas eingerostet. Hatte schon richtige Entzugserscheinungen *bibber* *schluchz* :pale:

Treiber schreiben??? Kennste empfehlenswerte Tuts, würde mich interessieren...

kiar 19. Feb 2004 21:24

Re: Statusinformation über ein Drucker
 
schau hier: :cry:
raik

ustra 27. Feb 2004 16:48

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 06:38 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz