AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi DeviceCapabilities(DC_BINNAMES) liefert -1
Thema durchsuchen
Ansicht
Themen-Optionen

DeviceCapabilities(DC_BINNAMES) liefert -1

Ein Thema von uligerhardt · begonnen am 5. Mär 2014 · letzter Beitrag vom 18. Mai 2021
Antwort Antwort
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.749 Beiträge
 
Delphi 2007 Professional
 
#1

DeviceCapabilities(DC_BINNAMES) liefert -1

  Alt 5. Mär 2014, 15:42
Hallo zusammen!

In unserer Anwendung lesen wir Schächte des aktuellen Druckers aus. Das funktioniert (mittlerweile ) auch gut. Zur Feststellung der Anzahl rufen wir Count := DeviceCapabilities(PChar(SomeDevice), PChar(SomePort), DC_BINNAMES, nil, nil); auf. Das liefert nun bei einem unserer Kunden auf einem HP Deskjet 5400 Count = -1 zurück. Ich meine, der Doku zu entnehmen, dass das ein Fehlercode ist. Leider steht finde ich in der Doku nichts, ob ich z.B. GetLastError aufrufen kann/darf/soll. Testhalber hab ich ein
Delphi-Quellcode:
if Count < 0 then
  RaiseLastOSError;
eingebaut und kriege "Systemfehler. Code: 1722. Der RPC-Server ist nicht verfügbar."

Meine Fragen:
  1. Ist es überhaupt richtig, hier GetLastError/RaiseLastOSError aufzurufen?
  2. Könnt ihr mit der Fehlermeldung was anfangen? Google liefert Lösungen a la "Solange Treiber neu installieren, bis es geht.". Vielleicht wisst ihr was Konkreteres.
Uli Gerhardt
  Mit Zitat antworten Zitat
rwalper

Registriert seit: 6. Sep 2006
48 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: DeviceCapabilities(DC_BINNAMES) liefert -1

  Alt 5. Mär 2014, 16:02
Hi,

setze ersteinmal unmittelbar vor dem Aufruf LastError zurück:

SetLastError( NO_ERROR ); //NO_ERROR ist in Winapi.Windows.pas definiert

Erst dann weißt Du, ob sich der Fehler überhaupt auf Deinen Aufruf bezieht.
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.749 Beiträge
 
Delphi 2007 Professional
 
#3

AW: DeviceCapabilities(DC_BINNAMES) liefert -1

  Alt 5. Mär 2014, 17:18
setze ersteinmal unmittelbar vor dem Aufruf LastError zurück:
Gute Idee. Danke!
Uli Gerhardt
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.339 Beiträge
 
Delphi 12 Athens
 
#4

AW: DeviceCapabilities(DC_BINNAMES) liefert -1

  Alt 5. Mär 2014, 19:07
Für diese Funktion ist GetLastError eigentlich falsch. (einer der darin aufgrufenden APIs könnte eventuell einen Fehlercode setzen, aber selbst wenn eine API das macht, heißt es noch lange nicht, daß die eigentliche Funktion nicht funktionierte)

-1 ist ein Fehlercode und besagt hier, daß keine Schächste unterstützt werden.
Es gibt also nur einen Schacht und keine Funktion zu dessen Auswahl.

Alternativ könnte das aber auch heißen, daß der Drucker nicht gefunden wurde, oder Treiber/Drucker defekt sind,
was aber auch nur wieder bedeudet, daß die Stelle, welche man grade frage, die Funktion "Gibt mir deine Schächte!" nicht unterstützt.


Vermutlich kannst'e das ganz einfach so machen:
Count := Max(DeviceCapabilities(PChar(SomeDevice), PChar(SomePort), DC_BINNAMES, nil, nil), 1);
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu ( 5. Mär 2014 um 19:11 Uhr)
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.739 Beiträge
 
Delphi 6 Enterprise
 
#5

AW: DeviceCapabilities(DC_BINNAMES) liefert -1

  Alt 6. Mär 2014, 07:48
Vielleicht kann man auch erstmal eine andere Capability nachfragen, um zu sehen, ob da was kommt. Dann würde es ja ggf. nicht am Treiber oder so liegen und Himi's Vermutung mit den Schächten stützen.
Ralph
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.487 Beiträge
 
Delphi 12 Athens
 
#6

AW: DeviceCapabilities(DC_BINNAMES) liefert -1

  Alt 14. Mai 2021, 17:48
Bin ich per Remote Desktop mit dem PC verbunde, liefert der Abruf DeviceCapabilities mit DC_BINNAMES für jeden Drucker -1 zurück.
Lokal angemeldet, selbst in einer virtuellen Maschine funktioniert das einwandfrei.

Gibt es eine Alternative um die Papiernamen zu ermitteln?
  Mit Zitat antworten Zitat
Antwort Antwort


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 08:05 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