Win32 API'sini kullanarak ham verileri yazıcıya gönderme

Bu makalede, Win32 API'sini kullanarak bir yazıcıya ham veri gönderme hakkında bilgi verilmektedir.

Orijinal ürün sürümü: Windows API
Özgün KB numarası: 138594

Özet

Bazen yazıcıya özgü verilerin sürücüyü atlayarak doğrudan bir yazıcıya gönderilmesi gerekir. Win32 API'sinde yerel ve ağa bağlı yazıcılarda çalışan bir işlem sağlanır. Bu yöntem, Windows API'sinin PASSTHROUGH önceki sürümlerinde kullanılan kaçış ve SpoolFile() yöntemleri değiştirmek için kullanılabilir.

Kod örneği

Ham verileri doğrudan Windows NT veya Windows 95'teki bir yazıcıya göndermek için aşağıdaki kodu kullanabilirsiniz.

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

Aşağıdaki dosya Microsoft İndirme Merkezi'nden indirilebilir:

RAWPRN.EXE

Microsoft Desteği dosyalarını indirme hakkında daha fazla bilgi için bkz. microsoft destek dosyalarını çevrimiçi hizmetler edinme.

Microsoft bu dosyayı virüsler için taradı. Microsoft, dosyanın yayımlandığı tarihte kullanılabilen en güncel virüs algılama yazılımını kullandı. Dosya, dosyada yapılan yetkisiz değişiklikleri önlemeye yardımcı olan, güvenliği iyileştirilmiş sunucularda depolanır.