Senden von Rohdaten an einen Drucker mithilfe der Win32-API

In diesem Artikel wird beschrieben, wie Rohdaten mithilfe der Win32-API an einen Drucker gesendet werden.

Ursprüngliche Produktversion: Windows-API
Ursprüngliche KB-Nummer: 138594

Zusammenfassung

Manchmal ist es erforderlich, druckerspezifische Daten direkt an einen Drucker zu senden und dabei den Treiber zu umgehen. Die Win32-API stellt eine Do it bereit, die auf lokalen und vernetzten Druckern funktioniert. Diese Methode kann verwendet werden, um die PASSTHROUGH Escape- und SpoolFile() Methoden zu ersetzen, die in früheren Versionen der Windows-API verwendet wurden.

Codebeispiel

Sie können den folgenden Code verwenden, um Rohdaten direkt an einen Drucker in Windows NT oder Windows 95 zu senden.

// RawDataToPrinter - sends binary data directly to a printer
// Params:
//   szPrinterName - NULL terminated string specifying printer name
//   lpData        - Pointer to raw data bytes
//   dwCount       - Length of lpData in bytes
// Returns: TRUE for success, FALSE for failure.
BOOL RawDataToPrinter(LPSTR szPrinterName, LPBYTE lpData, DWORD dwCount)
{
    HANDLE     hPrinter;
    DOC_INFO_1 DocInfo;
    DWORD      dwJob;
    DWORD      dwBytesWritten;

    // Need a handle to the printer.
    if(!OpenPrinter( szPrinterName, &hPrinter, NULL))
    return FALSE;

    // Fill in the structure with info about this "document."
    DocInfo.pDocName = "My Document";
    DocInfo.pOutputFile = NULL;
    DocInfo.pDatatype = "RAW";
    // Inform the spooler the document is beginning.
    if((dwJob = StartDocPrinter(hPrinter, 1, (LPSTR)&DocInfo)) == 0)
    {
      ClosePrinter(hPrinter);
      return FALSE;
    }
    // Start a page.
    if(!StartPagePrinter(hPrinter))
    {
      EndDocPrinter(hPrinter);
      ClosePrinter(hPrinter);
      return FALSE;
    }
    // Send the data to the printer.
    if(!WritePrinter(hPrinter, lpData, dwCount, &dwBytesWritten))
    {
      EndPagePrinter(hPrinter);
      EndDocPrinter(hPrinter);
      ClosePrinter(hPrinter);
      return FALSE;
    }
    // End the page.
    if(!EndPagePrinter(hPrinter))
    {
      EndDocPrinter(hPrinter);
      ClosePrinter(hPrinter);
      return FALSE;
    }
    // Inform the spooler that the document is ending.
    if(!EndDocPrinter(hPrinter))
    {
      ClosePrinter(hPrinter);
      return FALSE;
    }
    // Tidy up the printer handle.
    ClosePrinter(hPrinter);
    // Check to see if correct number of bytes were written.
    if(dwBytesWritten != dwCount)
      return FALSE;
      return TRUE;
}

Die folgende Datei steht im Microsoft Download Center zum Download zur Verfügung:

RAWPRN.EXE

Weitere Informationen zum Herunterladen Microsoft-Support Dateien finden Sie unter Abrufen von Microsoft-Supportdateien von Onlinedienste.

Microsoft hat diese Datei auf Viren überprüft. Microsoft verwendete die aktuellste Virenerkennungssoftware, die zum Zeitpunkt der Veröffentlichung der Datei verfügbar war. Die Datei wird auf Servern mit verbesserter Sicherheit gespeichert, die dazu beitragen, nicht autorisierte Änderungen an der Datei zu verhindern.