C++ C++ C# C# ASP.NET Security ASP.NET Security ASM ASM Скачать Скачать Поиск Поиск Хостинг Хостинг  
  Программа для работы с LPT портом...
Язык: .NET — ©Alexey...
  "ASP.NET Atlas" – AJAX в исполнении Micro...
Язык: .NET — ©legigor@mail.ru...
  "Невытесняющая" Многопоточность...
Язык: C/C++ — ©...
  01.05.2010 — Update World C++: Сборник GPL QT исходников
  15.12.2007 — Весь сайт целиком можно загрузить по ссылкам из раздела Скачать
Хостинг:
Windows 2003, ASP.NET 2.0
бесплатный и от 80 руб./мес


   Отправить письмо
Кулабухов Артем, Беларусь




 Как отправить данные на принтер напрямую / Печать / Visual C++

Как отправить данные на принтер напрямую.

Иногда, необходимо в обход драйвера посылать данные на принтер напрямую. Следующий пример показывает, как сделать это как для локального принтера, так и для сетевого. Этот способ может служить заменой последовательности PASSTHROUGH, а так же метода SpoolFile.

 // Функция RawDataToPrinter - посылает бинарные данные прямо на принтер
 // 
 // szPrinterName: строка с именем принтера (завершается нулём)
 // lpData:        Указатель на raw-данные
 // dwCount        Длина lpData в байтах
 // 
 // Возвращает: TRUE в случае удачи, FALSE в случае ошибки.
 // 
BOOL RawDataToPrinter(LPSTR szPrinterName, LPBYTE lpData, DWORD dwCount)
   {
     HANDLE     hPrinter;
     DOC_INFO_1 DocInfo;
     DWORD      dwJob;
     DWORD      dwBytesWritten;

     // Необходим дескриптор принтера.
     if( ! OpenPrinter( szPrinterName, &hPrinter, NULL ) )
       return FALSE;

     // Заполняем структуру данными о документе
     DocInfo.pDocName = "My Document";
     DocInfo.pOutputFile = NULL;
     DocInfo.pDatatype = "RAW";
     // Информируем спулер о том, что печать документа начата.
     if( (dwJob = StartDocPrinter( hPrinter, 1, (LPSTR)&DocInfo )) == 0)
     {
       ClosePrinter( hPrinter );
       return FALSE;
     }
     // Начало страницы.
     if( ! StartPagePrinter( hPrinter ) )
     {
       EndDocPrinter( hPrinter );
       ClosePrinter( hPrinter );
       return FALSE;
     }
     // Посылаем данные на принтер.
     if( !WritePrinter( hPrinter, lpData, dwCount, &dwBytesWritten ) )
     {
       EndPagePrinter( hPrinter );
       EndDocPrinter( hPrinter );
       ClosePrinter( hPrinter );
       return FALSE;
     }
     // Конец страницы.
     if( ! EndPagePrinter( hPrinter ) )
     {
       EndDocPrinter( hPrinter );
       ClosePrinter( hPrinter );
       return FALSE;
     }
     // Информируем спулер о конце документа.
     if( ! EndDocPrinter( hPrinter ) )
      {
        ClosePrinter( hPrinter );
        return FALSE;
      }
      // Закрываем дескриптор принтера.
      ClosePrinter( hPrinter );
      // Проверяем правильность количества записанных байт.
      if( dwBytesWritten != dwCount )
        return FALSE;
      return TRUE;
    }