C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Как узнать настройки принтера, В частности размер бумаги
boriskaZ
Отправлено: 28.07.2004, 15:40


Не зарегистрирован







К машине подключено несколько принтеров, в том числе подкладные (типа EPSON TM-U295).
Нужно узнать програмно — данный принтер обычный(А4) или подкладной.

bool A4Printer(AnsiString PrinterName)
{
HANDLE phPrinter;
OpenPrinter(PrinterName.c_str(), &phPrinter, NULL);
// память под DEVMODE
LONG bytes = DocumentProperties(NULL, phPrinter, PrinterName.c_str(), NULL, NULL, 0);
DEVMODE *dvMode;
dvMode = (DEVMODE *)malloc(bytes);
// получаем настройки
DocumentProperties(NULL, phPrinter, PrinterName.c_str(), dvMode, NULL, DM_OUT_BUFFER);
bool ret = dvMode->dmPaperSize == DMPAPER_A4;
ClosePrinter(phPrinter);
free(dvMode);
return ret;
}

Выдает true для всех принтеров (размер бумаги А4).
Насколько я понимаю, дело в том, что при вызове OpenPrinter — последним параметром передаем NULL — инициализируем настройками по умолчанию.
В то же время, при просмотре свойсв принтера из папки принтеры, в закладке "общие" — пишется размер бумаги А4 у обычных принтеров и ничего у подкладных.

boriskaZ
Отправлено: 29.07.2004, 14:34


Не зарегистрирован







Уже разобрался нужно было использовать DeviceCapabilities

Вернуться в Вопросы программирования в C++Builder