2011-04-01 3 views
0

파일에서 읽고 프린터로 보내 인쇄 할 프로그램을 작성하고 있습니다.LPT1에서 포트 핸들을 가져올 수 없습니다.

기본 프린터로 "HP Laser Jet 4"를 설정하고 "HP Laser Jet 4"의 프린터 속성에서 "LPT1"을 선택했습니다. 인쇄 스풀러도 실행 중입니다 (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; 
} 

답변

3

왜 LPT 포트를 열어보십시오. 이것은 당신에게 정말로 필요한 것입니까? 하면 프린터 (예 : HP 레이저 제트 4 또는 기타) (예를 들어, 파일에서) 직접 데이터를 쓸 수있는 프린터 드라이버를 사용하지 않고 쓸하려는 OS에 설치를 넣고 켰을 때 :

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

이 코드에는 약간의 오류가있을 수 있습니다. 나는 그것을 시험하지 않는다. 나는 단순히 내 오래된 프로젝트에서 그것을 잘라 버렸어.

마찬가지로 프린터/포트에 파일 (예 : HP PCL5/PCL6 프린터의 경우 PCL/PJL이 포함 된 파일)을 보낼 수 있습니다.

+0

"filename.prn"파일의 형식은 무엇입니까? 그냥 ASCII 문자열이나 특정 형식입니까? – Felix

+0

@Fei이 코드는 모든 포트 유형 (LPT, COM, USB, 네트워크 ...)에 연결된 프린터로 파일 (텍스트, 바이너리)을 보내는 데 사용할 수 있습니다. . 다른 크기, 그래픽) PCL, ESC/P 명령을 제공해야합니다. 즉, 프린터 드라이버의 작업을 수행해야합니다. –

0

문제는 hPort가 항상 INVALID_HANDLE_VALUE을 반환한다는 것입니다.

저는 실제 프린터가 없습니다. 이게 문제가 되나요?

실제 LPT1 (LPT2 ...) 포트는 없지만 프린터 장치 나 프린터 드라이버는 설치하지 않은 경우이 문제가 발생합니다.

LPT1 포트가 실제로 있으면 장치 관리자 또는 PC 하드웨어를 체크인하십시오. LPT1 정말 코드 (GetLastError()) 2 (ERROR_FILE_NOT_FOUND)을 반환해야 당신이 PC에 표시하지 않는 경우

정말되게 LPT1 포트의 경우, 코드 "성공"

을 반환해야합니다.

관련 문제