Romeo » 07 авг 2008, 12:06
Здесь есть небольшая тонкость. Дело в том, что поле dmDeviceName объявлено в структуре DEVMODE как "unsigned char [32]" . К сожалению, это обозначает, что если имя принтера не влезет в этот буфер, то оно будет усечено, и ничего с этим не поделаешь.
Предлагаю небольшой хак. Дело в том, что есть такая Win32 API функция EnumPrinters. Она позволяет перечислить имена принтеров. В случае её использования, имена принтеров обрезаться не будут. Таким образом, получив урезанное имя выбранного в диалоге принтера, ты сможешь сопоставить его первые 31 символов поочередёно с каждым полным именем, полученным с помощью EnumPrinters. Первое совпадение даст тебе полное имя принтера.
Если не разберёшься с EnumPrinters, задавай вопросы - помогу.
Здесь есть небольшая тонкость. Дело в том, что поле [i]dmDeviceName[/i] объявлено в структуре [b]DEVMODE[/b] как "unsigned char [32]" . К сожалению, это обозначает, что если имя принтера не влезет в этот буфер, то оно будет усечено, и ничего с этим не поделаешь.
Предлагаю небольшой хак. Дело в том, что есть такая Win32 API функция [b]EnumPrinters[/b]. Она позволяет перечислить имена принтеров. В случае её использования, имена принтеров обрезаться не будут. Таким образом, получив урезанное имя выбранного в диалоге принтера, ты сможешь сопоставить его первые 31 символов поочередёно с каждым полным именем, полученным с помощью [b]EnumPrinters[/b]. Первое совпадение даст тебе полное имя принтера.
Если не разберёшься с [b]EnumPrinters[/b], задавай вопросы - помогу.