Конференция "WinAPI" » CCHDEVICENAME
 
  • dmk © (04.05.14 02:01) [20]
    В общем ошибка непонятно где.
    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, то не принимает.
  • dmk © (04.05.14 02:09) [21]
    Поэтому и возникла идея сохранять все структуры во время EnumPrinters :(
  • dmk © (04.05.14 02:10) [22]
    Поэтому и возникла идея сохранять все структуры во время EnumPrinters :(
  • junglecat (04.05.14 12:18) [23]
    а GetPrinter(8) то же самое вернет?
  • dmk © (04.05.14 14:03) [24]
    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
  • dmk © (04.05.14 14:17) [26]
    junglecat   (04.05.14 14:13) [25]
    Через WinApi то же самое. Правильно только через EnumPrinters.
  • dmk © (04.05.14 14:20) [27]
    junglecat   (04.05.14 14:13) [25]
    Извиняюсь! У меня идет через PRINTER_INFO_2. Там в составе есть DevMode.
  • junglecat (04.05.14 14:25) [28]
    а в PRINTER_INFO_8 это единственное поле
  • dmk © (04.05.14 15:12) [29]
    junglecat   (04.05.14 14:25) [28]

    Попробовал через PRINTER_INFO_8 - то же самое. Структура не нравится системе в случае длинного имени принтера. Если короткое, то все отлично.
    Оставляю пока структуру из EnumPrinters. Бред !(O.o)!
  • dmk © (06.05.14 17:33) [30]
    Разобрался. Ошибка в приведении типов была. PPrinterInfo2 и PPrinterInfo2W. Стек рушился, если приводил старый тип PPrinterInfo2. Сейчас все нормально.
 
Конференция "WinAPI" » CCHDEVICENAME
Есть новые Нет новых   [118608   +46][b:0][p:0]