Freigeben über


Vorgehensweise: Direktes Senden von Daten an einen GDI-Drucker

Das Codebeispiel weiter unten in diesem Thema zeigt, wie Sie Druckersteuerungsdaten direkt an Drucker senden, die GDI-basierte Druckertreiber verwenden.

In den folgenden Schritten wird beschrieben, wie Daten direkt an einen Drucker gesendet werden. Diese Schritte werden auch im folgenden Codebeispiel veranschaulicht.

  1. Rufen Sie OpenPrinter auf, um ein Handle für den Drucker zu erhalten.
  2. Initialisieren Sie eine DOCINFO-Struktur mit den Druckerdaten.
  3. Rufen Sie StartDocPrinter auf, um anzugeben, dass die Anwendung Dokumentdaten an den Drucker sendet.
  4. Rufen Sie StartPagePrinter auf, um anzugeben, dass die Anwendung eine neue Seite an den Drucker sendet.
  5. Rufen Sie WritePrinter auf, um die Daten zu senden.
  6. Rufen Sie EndPagePrinter auf, um anzugeben, dass alle Daten für die aktuelle Seite gesendet wurden.
  7. Rufen Sie EndDocPrinter auf, um anzugeben, dass alle Daten für dieses Dokument gesendet wurden.
  8. Rufen Sie ClosePrinter auf, um die Ressourcen freizugeben.

Senden sie Druckersteuerungsdaten direkt an Drucker, die GDI-basierte Druckertreiber verwenden.

// 
// RawDataToPrinter - sends binary data directly to a printer 
//  
// 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(LPTSTR szPrinterName, LPBYTE lpData, DWORD dwCount)
{
    BOOL     bStatus = FALSE;
    HANDLE     hPrinter = NULL;
    DOC_INFO_1 DocInfo;
    DWORD      dwJob = 0L;
    DWORD      dwBytesWritten = 0L;

    // Open a handle to the printer. 
    bStatus = OpenPrinter( szPrinterName, &hPrinter, NULL );
    if (bStatus) {
        // Fill in the structure with info about this "document." 
        DocInfo.pDocName = (LPTSTR)_T("My Document");
        DocInfo.pOutputFile = NULL;
        DocInfo.pDatatype = (LPTSTR)_T("RAW");

        // Inform the spooler the document is beginning. 
        dwJob = StartDocPrinter( hPrinter, 1, (LPBYTE)&DocInfo );
        if (dwJob > 0) {
            // Start a page. 
            bStatus = StartPagePrinter( hPrinter );
            if (bStatus) {
                // Send the data to the printer. 
                bStatus = WritePrinter( hPrinter, lpData, dwCount, &dwBytesWritten);
                EndPagePrinter (hPrinter);
            }
            // Inform the spooler that the document is ending. 
            EndDocPrinter( hPrinter );
        }
        // Close the printer handle. 
        ClosePrinter( hPrinter );
    }
    // Check to see if correct number of bytes were written. 
    if (!bStatus || (dwBytesWritten != dwCount)) {
        bStatus = FALSE;
    } else {
        bStatus = TRUE;
    }
    return bStatus;
}

ClosePrinter

EndDocPrinter

EndPagePrinter

OpenPrinter

StartDocPrinter

StartPagePrinter

WritePrinter