-
В общем ошибка непонятно где.
GetPrinter() возвращает одну информацию, а EnumPrinters другую.
Если брать указатели возвращенные функцией EnumPrinters, то структура Devmode воспринимается системой, а если взять Devmode полученной от GetPrinter, а потом изменить ее и подсунуть обратно системе, то системе не нравится такая структура. Вот и прикол.
Правильное название возвращенное EnumPrinters:
http://i55.fastpic.ru/big/2014/0504/11/d1e8eb36ab44477a2f0285d2ea58f211.jpg
НЕ правильное название возвращенное GetPrinter:
http://i55.fastpic.ru/big/2014/0504/93/39116696f3388ba7718d6bab4bd73393.jpg
Если Devmode от Enumprinters сохранить, то система берет измененную структуру, а если подсунуть от GetPrinter, то не принимает. -
Поэтому и возникла идея сохранять все структуры во время EnumPrinters :(
-
Поэтому и возникла идея сохранять все структуры во время EnumPrinters :(
-
junglecat (04.05.14 12:18) [23]а GetPrinter(8) то же самое вернет?
-
junglecat (04.05.14 12:18) [23]
Если через VCL.TPrinter.GetPrinter, то да, вернет не полное имя.
Или в дровах HP ошибка или microsoft.
В общем решил оставить подготовку массивов при EnumPriners. Кода много, зато работает без проблем. -
junglecat (04.05.14 14:13) [25]> [24] dmk © (04.05.14 14:03)
нет, я имел в виду винапишную GetPrinter, через структуру PRINTER_INFO_8 -
junglecat (04.05.14 14:13) [25]
Через WinApi то же самое. Правильно только через EnumPrinters. -
junglecat (04.05.14 14:13) [25]
Извиняюсь! У меня идет через PRINTER_INFO_2. Там в составе есть DevMode. -
junglecat (04.05.14 14:25) [28]а в PRINTER_INFO_8 это единственное поле
-
junglecat (04.05.14 14:25) [28]
Попробовал через PRINTER_INFO_8 - то же самое. Структура не нравится системе в случае длинного имени принтера. Если короткое, то все отлично.
Оставляю пока структуру из EnumPrinters. Бред !(O.o)! -
Разобрался. Ошибка в приведении типов была. PPrinterInfo2 и PPrinterInfo2W. Стек рушился, если приводил старый тип PPrinterInfo2. Сейчас все нормально.