Onbewerkte gegevens naar een printer verzenden met behulp van de Win32-API

In dit artikel wordt uitgelegd hoe u onbewerkte gegevens naar een printer verzendt met behulp van de Win32-API.

Oorspronkelijke productversie: Windows-API
Origineel KB-nummer: 138594

Samenvatting

Soms is het nodig om printerspecifieke gegevens rechtstreeks naar een printer te verzenden, waarbij het stuurprogramma wordt overgeslagen. De Win32-API biedt een do it die werkt op lokale en netwerkprinters. Deze methode kan worden gebruikt ter vervanging van de PASSTHROUGH escape- en SpoolFile() methoden die in eerdere versies van de Windows-API worden gebruikt.

Codevoorbeeld

U kunt de volgende code gebruiken om onbewerkte gegevens rechtstreeks naar een printer in Windows NT of Windows 95 te verzenden.

// 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;
}

Het volgende bestand kan worden gedownload in het Microsoft Downloadcentrum:

RAWPRN.EXE

Zie Microsoft-ondersteuningsbestanden verkrijgen van onlineservices voor meer informatie over het downloaden van Microsoft Ondersteuning-bestanden.

Microsoft heeft dit bestand gescand op virussen. Microsoft heeft de meest recente virusdetectiesoftware gebruikt die beschikbaar was op de datum waarop het bestand werd gepost. Het bestand wordt opgeslagen op servers met verbeterde beveiliging die helpen bij het voorkomen van onbevoegde wijzigingen in het bestand.