Работать с LPT и COM портом для Windows можно использовав функцию CreateFile. В Windows, как и в DOS остались имена файлов, которые давать нельзя типа: COM LPT CON AUX ...
Попытка создать файл с таким именем приводит к перенаправлению информации на соответствующий порт или устройство. Вот на этом не всегда удобном свойcтве и основанна работа с устройствами. Надо создать файл с таким именем и выводить в него информацию. Смотрите пример ниже: // CreateFile.cpp : Defines the entry point for the console application. //
#include "stdafx.h" #include "windows.h" #include "iostream.h"
void main() { HANDLE hLPT=CreateFile("LPT1",GENERIC_WRITE,0,NULL, OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL); if (hLPT!=INVALID_HANDLE_VALUE) { cout << " Ok Open LPT1" << endl; char buffer[25]; memset(buffer,0,sizeof(buffer)); strcpy(buffer,"Hello LPT "); DWORD dw; OVERLAPPED ov; for (int x=0;x < 3;x++) WriteFile(hLPT,buffer,sizeof(buffer),&dw,&ov); CloseHandle(hLPT); } else cout << "Error Open" << endl; }
Как видите, я создаю файл с именем LPT1 и вывожу туда информацию. Что я получу ?? Зависит от принтера. Я проверял на Epson Stylus 1000. Запускал программу, а потом печатал пустой лист из блокнота. В результате на принтер выводилась строка Hello LPT. Почему я печатал из блокнота пустой лист ?? Дело в том, что у принтера есть буфер и он не напечатает ничего пока этот буфер не переполнится или не поступит команда конец страницы !! Так как я ESC коды этого принтера не помню :-)))) я просто начал печатать из блокнота новый документ, а это подразумевает, что старый надо завершить печатать кстати. Вот он и напечатал. Таким образом зная протокол обмена между портами и устройствами можно создавать программы, которые будут работать без драйверов или сами драйвера создавать :-))) |