Вы можете заменить принтер с помощью этой команды на net use
, см. Здесь на MSDN kb
NET USE LPT1 \\server_name\printer_name
Существует превосходная глава о печати в DOS с использованием BIOS, да, это немного устарело, но интересно читать только ради ностальгии.
По вашей проблеме вам, возможно, придется использовать CreateFile
, чтобы открыть порт LPT1, см. здесь , например, здесь я продублировал его, для вашего удобства.
HANDLE hFile;
hFile = CreateFile("LPT1", GENERIC_WRITE, 0,NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL);
if (hFile == INVALID_HANDLE_VALUE)
{
// handle error
}
OVERLAPPED ov = {};
ov.hEvent = CreateEvent(0, false, false, 0);
char szData[] = "1234567890";
DWORD p;
if (!WriteFile(hFile,szData, 10, &p, &ov))
{
if (GetLastError() != ERROR_IO_PENDING)
{
// handle error
}
}
// Wait for write op to complete (maximum 3 second)
DWORD dwWait = WaitForSingleObject(ov.hEvent, 3000);
if (dwWait == WAIT_TIMEOUT)
{
// it took more than 3 seconds
} else if (dwWait == WAIT_OBJECT_0)
{
// the write op completed,
// call GetOverlappedResult(...)
}
CloseHandle(ov.hEvent);
CloseHandle(hFile);
Но если вы настаиваете на открытии порта LPT1 напрямую, проверка ошибок не производится ...
FILE *prn = fopen("lpt1", "w");
fprintf(prn, "Hello World\n\f");
fclose(prn);
Надеюсь, это поможет,
С наилучшими пожеланиями,
Том.