Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi USB Programmierung (https://www.delphipraxis.net/130112-usb-programmierung.html)

Moony 3. Mär 2009 16:33


USB Programmierung
 
Hallo zusammen,

ich habe einen USB Drucker. Für diesen Drucker habe ich ein Dokument über Befehle, die an den Drucker geschickt werden können. Mein Problem besteht in erster Linie darin, wie ich den richtigen USB Port anwähle und eine Verbindung LowLevel zu diesem Drucker aufbaue.

Ich habe noch nie über USB LowLevel programmiert und muss das jetzt tun, um gewisse Informationen vom Drucker zu erfragen.

Danke & Gruß, Moony

Moony 4. Mär 2009 12:33

Re: USB Programmierung
 
Kann denn keiner helfen einen Ansatz zu finden wie ich an den Drucker komme?

Ich habe ein wenig nachgeforscht und die Funktion DeviceIOControl scheint ein Anfang zu sein, aber dort wird immer ein Laufwerk angegeben. Dieses habe ich jedoch nicht bei einem Drucker. Kann da einer helfen???

Gruß, Moony

ULIK 4. Mär 2009 12:43

Re: USB Programmierung
 
Ist der Drucker als Windows-Drucker installiert? Wenn ja, kannst Du ihn denn nicht wie jeden anderen Drucker ansprechen und einfach nur die Steuerzeichen senden?

Moony 4. Mär 2009 13:23

Re: USB Programmierung
 
Mein Problem ist, der Drucker ist selbstverständlich als Windows-Drucker installiert wit Windows Treiber. Über diesen Treiber kann ich aber nicht gehen, da mir dieser nicht die Informationen liefert bzw. zur Verfügung stellt wie der Drucker selbst. Ich habe von dem Drucker eine Command Specification, somit weiß ich welche Befehle ich schicken muß, um meine Informationen zu erhalten. Ich weiß jetzt nur nicht wie ich diese Befehle schicken soll.

An den Drucker Treiber kann ich also nicht rantreten. Demnach muß ich das irgendwie LowLevel üer die USB Schnittstelle machen. Wenn anders geht würde ich das gerne tun. Das spart Zeit und Aufwand.

Wie würdest du denn sonst die Steuerzeichen senden?

Reinhard Kern 4. Mär 2009 15:09

Re: USB Programmierung
 
Zitat:

Zitat von Moony
Mein Problem ist, der Drucker ist selbstverständlich als Windows-Drucker installiert wit Windows Treiber. Über diesen Treiber kann ich aber nicht gehen, da mir dieser nicht die Informationen liefert bzw. zur Verfügung stellt wie der Drucker selbst. Ich habe von dem Drucker eine Command Specification, somit weiß ich welche Befehle ich schicken muß, um meine Informationen zu erhalten. Ich weiß jetzt nur nicht wie ich diese Befehle schicken soll.

An den Drucker Treiber kann ich also nicht rantreten. Demnach muß ich das irgendwie LowLevel üer die USB Schnittstelle machen. Wenn anders geht würde ich das gerne tun. Das spart Zeit und Aufwand.

Wie würdest du denn sonst die Steuerzeichen senden?

Hallo,

wenn der Drucker über den Windowstreiber angesprochen wird, lässt dich Windows an die USB-Schnittstelle garnicht ran: ein Gerät kann nur von einer Anwendung auf einmal geöffnet werden, es sei denn, du programmierst einen erweiterten Druckertreiber (und lässt ihn für Vista von Microsoft testen und signieren).

Man kann übrigens sehr wohl über den Windowstreiber Steuerzeichen senden, allerdings kann man wahrscheinlich keine Antwort empfangen.

Über USB selbst kann man das dagegen nicht: USB ist keine Schnittstelle, sondern ein Bus.

Gruss Reinhard

squetk 6. Mär 2009 19:21

Re: USB Programmierung
 
Hallo,

wir haben Barcode-Drucker im Einsatz, die per USB angeschlossen sind und mittels Text-Kommandos programmiert werden. Dazu nutze ich diese Funktion:
Delphi-Quellcode:
 
procedure WriteRawStringToPrinter(PrinterName, DocName, PrintString : String);
var Handle: THandle;
    N: DWORD;
    DocInfo1: TDocInfo1;
begin
  if not OpenPrinter(PChar(PrinterName), Handle, nil) then
    raise Exception.Create(IntToStr(GetLastError));
  with DocInfo1 do
  begin
    pDocName   := PChar(DocName);
    pOutputFile := nil;
    pDataType  := 'RAW';
  end;
  StartDocPrinter(Handle, 1, @DocInfo1);
  StartPagePrinter(Handle);
  WritePrinter(Handle, PChar(PrintString), Length(PrintString), N);
  EndPagePrinter(Handle);
  EndDocPrinter(Handle);
  ClosePrinter(Handle);
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:14 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