AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Statusinformation über ein Drucker
Thema durchsuchen
Ansicht
Themen-Optionen

Statusinformation über ein Drucker

Ein Thema von ustra · begonnen am 26. Dez 2003 · letzter Beitrag vom 2. Jul 2005
Antwort Antwort
Seite 1 von 2  1 2      
ustra

Registriert seit: 12. Mär 2003
Ort: Geesthacht
138 Beiträge
 
Delphi 5 Professional
 
#1

Statusinformation über ein Drucker

  Alt 26. Dez 2003, 13:14
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
Ulrich Strauer
  Mit Zitat antworten Zitat
Assarbad
(Gast)

n/a Beiträge
 
#2

Re: Statusinformation über ein Drucker

  Alt 14. Feb 2004, 20:21
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).
  Mit Zitat antworten Zitat
MaOfDe

Registriert seit: 3. Jan 2004
Ort: Berlin
73 Beiträge
 
Delphi 6 Personal
 
#3

Re: Statusinformation über ein Drucker

  Alt 18. Feb 2004, 22:09
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!');
:
  Mit Zitat antworten Zitat
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Statusinformation über ein Drucker

  Alt 18. Feb 2004, 22:18
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
  Mit Zitat antworten Zitat
Assarbad
(Gast)

n/a Beiträge
 
#5

Re: Statusinformation über ein Drucker

  Alt 19. Feb 2004, 00:40
@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

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]
  Mit Zitat antworten Zitat
MaOfDe

Registriert seit: 3. Jan 2004
Ort: Berlin
73 Beiträge
 
Delphi 6 Personal
 
#6

Re: Statusinformation über ein Drucker

  Alt 19. Feb 2004, 17:50
@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) .
  Mit Zitat antworten Zitat
Assarbad
(Gast)

n/a Beiträge
 
#7

Re: Statusinformation über ein Drucker

  Alt 19. Feb 2004, 20:34
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

Oliver
  Mit Zitat antworten Zitat
MaOfDe

Registriert seit: 3. Jan 2004
Ort: Berlin
73 Beiträge
 
Delphi 6 Personal
 
#8

Re: Statusinformation über ein Drucker

  Alt 19. Feb 2004, 22:16
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 !!

Wo wir grad bei Berlin sinn, hier is ens mener Topics : 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*

Treiber schreiben??? Kennste empfehlenswerte Tuts, würde mich interessieren...
  Mit Zitat antworten Zitat
Benutzerbild von kiar
kiar

Registriert seit: 2. Aug 2003
Ort: Aschersleben
1.362 Beiträge
 
Delphi 5 Professional
 
#9

Re: Statusinformation über ein Drucker

  Alt 19. Feb 2004, 22:24
schau hier:
raik
verhältnisse die einem nicht passen,
muss man verändern oder verlassen
  Mit Zitat antworten Zitat
ustra

Registriert seit: 12. Mär 2003
Ort: Geesthacht
138 Beiträge
 
Delphi 5 Professional
 
#10

Re: Statusinformation über ein Drucker

  Alt 27. Feb 2004, 17:48
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.
Ulrich Strauer
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:35 Uhr.
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