настройки принтера по умолчанию

C++, Assembler, PHP и т.д. и т.п...

Модератор: Tiger

SERGant
Сообщения: 1003
Зарегистрирован: Вс 26 сен, 2004 22:04
Откуда: с планеты The Мля
Контактная информация:

настройки принтера по умолчанию

Сообщение SERGant » Чт 10 апр, 2008 2:14

Добрый день.
Уважаемые спецы, возник такой вопрос, мне нужно получить часть настроек принтера через спулер. Список необходимых параметров примерно как в структуре PAGESETUPDLG (Размер листа, отступы, ориентация бумаги). Все принтеры я получаю через EnumPrinters. Соответственно дескриптор на каждый принтер получить могу. Я полазил по инету и заглянул в msdn, таки нашёл некоторую функцию GetPrinterData... но ни как не могу понять как же она блин работает... ): Кстати сдается мне, что в структуре DevMode содержатся необходимая мне информация, но я не могу понять в каких полях она...

ПС к сожалению стандартный диалог я вызывать не могу для каждого принтера, чтоб инициализировать PAGESETUPDLG... ):

Буду благодарен любой помощи. В общем формулирую вопрос:
Как чер виндовый спулер получить настройки принтера по умолчанию, а именно ширина, высота страницы, отступы, ориентация бумаги и тп? %)

Аватара пользователя
vlnik
Сообщения: 309
Зарегистрирован: Вт 21 фев, 2006 15:03
Откуда: Штурвальная
Контактная информация:

Re: настройки принтера по умолчанию

Сообщение vlnik » Чт 10 апр, 2008 16:52

Структура devmode заполняется функцией GetPrinter (она входит в состав структуры PRINTER_INFO_2). В vb это выглядит примерно так:

Код: Выделить всё

Private Declare Function GetPrinter Lib "winspool.drv" Alias "GetPrinterA" (ByVal hPrinter As Long, ByVal Level As Long, pPrinter As Byte, ByVal cbBuf As Long, pcbNeeded As Long) As Long

Dim buffer() As Byte
ReDim Preserve buffer(0 To 65535) As Byte
q = GetPrinter(hPrinter, 2, buffer(0), 65535, bSize)

hPrinter - дескриптор принтера, 2 - указывает, что возвращаем PRINTER_INFO_2, buffer - собственно, массив с возвращёнными данными, 65535 - размер возвращаемого массива в байтах (чтобы узнать этот размер точно, можно вызвать GetPrinter с параметром 1 вместо 65535 и в параметре bSize получить точный размер возвращаемых данных).
Получается байтовый массив, в котором структура devmode начинается с 28-го эл-та (массив - байтовый, а не лонг или интеджер).
Как эту фигню разбирать - может, поможет такая ссылка: http://www.codenet.ru/progr/vbasic/printer.php
зы: чтобы посмотреть, что из себя представляет та или иная структура, помимо мсдна можно воспользоваться утилиткой api text viewer из состава ms visual studio 6.


Вернуться в «Программирование»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 3 гостя