Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 8 мая!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

ПРОГРАММИРОВАНИЕ НА C и С++



Слушай, дружище, зачем так мучиться с этим языком С++, ты ведь не Билл Гейтс. Возьми тот же Python и программируй, он кроссплатформенный, под Windows тоже работает. Я сам давно заметил: то что на Си пишешь в страницу кода, на питоне решается в одну-две строки. При том, питон намного проще, я его сам недавно изучил по видеокурсу вот этому. Кстати, автор отлично там объясняет. Буквально день-два и уже будешь писать на нём, чего не скажешь про сложный С++.

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

Иногда, необходимо в обход драйвера посылать данные на принтер напрямую. Следующий пример показывает, как сделать это как для локального принтера, так и для сетевого. Этот способ может служить заменой последовательности 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;
     }

 

 





<< ВЕРНУТЬСЯ В ПОДРАЗДЕЛ

<< ВЕРНУТЬСЯ В ОГЛАВЛЕНИЕ




Материалы находятся на сайте https://exelab.ru/pro/



Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU Проект ReactOS