Не могу получить дескриптор порта от LPT1 - PullRequest
0 голосов
/ 01 апреля 2011

Я пишу программу, которая читает из файла и отправляет на принтер для печати. ​​

Я установил «HP Laser Jet 4» в качестве принтера по умолчанию и установил флажок «LPT1» в свойствах принтера «HP Laser Jet 4». Диспетчер очереди печати также работает (Windows 7).

Проблема в том, что hPort всегда возвращает INVALID_HANDLE_VALUE.

У меня нет настоящего принтера. Это проблема?

#include "stdafx.h"
#include <windows.h>

int main()
{
    HANDLE hPort = CreateFile(_T("LPT1:"), GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
    if(hPort != INVALID_HANDLE_VALUE) {
        printf("success");
    } else {
        printf("%i", GetLastError());
    }    
    return 0;
}

Ответы [ 2 ]

3 голосов
/ 01 апреля 2011

Почему вы пытаетесь открыть порт LPT.Это действительно нужно для вас?Если принтер (например, HP Laser Jet 4 или любой другой) установлен в ОС, и вы хотите писать в него напрямую, не используя драйвер принтера, вы можете записать данные (например, из файла), как показано ниже:

TCHAR *pPrinterName = TEXT("HP Laser Jet 4");
TCHAR *pFileName = TEXT("c:\filename.prn");
HANDLE hPrinter = NULL;
DOC_INFO_1 docinfo;
FILE *pfile = NULL;
DWORD dwBytesWritten = 0L;
BYTE data[1024];
DWORD dwCount = 0L;

if (OpenPrinter(pPrinterName, &hPrinter, NULL))
{
  docinfo.pDocName = TEXT("RAW Output Document Name");
  docinfo.pOutputFile = NULL;
  docinfo.pDatatype = TEXT("RAW");

  DWORD dwPrtJob = StartDocPrinter(hPrinter, 1, (LPBYTE)&docinfo);

  if (dwPrtJob > 0)
  {
    if (0 == _tfopen_s(&pfile, pFileName, TEXT("rb")))
    {
      while (!feof(pfile))
      {
        dwCount = (DWORD)fread(&data, 1, 1024, pfile);
        WritePrinter(hPrinter, &data, dwCount, &dwBytesWritten);
      }
      fclose(pfile);
    }
  }
  EndDocPrinter(hPrinter);
  ClosePrinter(hPrinter);
}

Может быть, в этом коде есть ошибки.Я не проверяю это.Я просто вырезал его из одного моего старого проекта.

Таким же образом вы можете отправить файл (содержащий команды принтера - например, PCL / PJL для принтеров HP PCL5 / PCL6) на любой принтер / порт.

0 голосов
/ 01 апреля 2011

Проблема в том, что hPort всегда возвращает INVALID_HANDLE_VALUE.

У меня нет настоящего принтера. Это проблема?

Это проблема, если у вас нет реальных портов LPT1 (LPT2 ...), но не установлено устройство принтера или драйвер принтера.

Проверьте в диспетчере устройств или оборудовании ПК, действительно ли присутствует порт LPT1.

Для действительно представленного порта LPT1 ваш код должен возвращать "success"

Если LPT1 действительно не представлен на вашем ПК, ваш код (GetLastError ()) должен вернуть 2 (ERROR_FILE_NOT_FOUND).

...