Конференция "WinAPI" » вопрос по OpenPrinter [D7]
 
  • Jacksotnik (28.01.15 19:04) [0]
    Привет всем. Вот кусок кода
    if not OpenPrinter(PChar(vPrinterName), hPrinter, nil) then begin
     log('Can''t connect to printer');
    end else begin
     ...
    end;

    Так вот в Windows 7. Отрабатывает без каких либо проблем и с локальными и с сетевыми принтерами.

    Есть одна система с Windows XP Embedded POSReady на ней не работает, возвращает false и хоть убей.

    Читал про OpenPrinter2 что там мол флаг чтоб не использовать локальный кеш, с ней та же история на 7ке работает, на этой POSReady дает ошибку "External exception C06D007F"

    Кто сталкивался помогите.
  • Rouse_ © (28.01.15 21:48) [1]
    Код ошибки достаточно известный, если на пальцах, то ошибка при подгрузке библиотеки заявленной в секции отложенного импорта. от этого и пляши
  • Rouse_ © (28.01.15 21:56) [2]
    Да, нюанс, это не означает что именно в твоем приложении ошибка, она может быть в какой-то сторонней библиотеке, которая грузится к твоему процессу
  • Jacksotnik (29.01.15 12:59) [3]
    Спасибо. Буду смотреть. На Win8 проверил, тоже все отлично работает
  • Jacksotnik (29.01.15 17:49) [4]
    Разобрался с OpenPrinter отработала так:
    Printer.GetPrinter(vDevice, vDriver, vPort, hDeviceMode);
    if not OpenPrinter(@vDevice, hPrinter, @vDefaults) then begin
     log('Can''t connect to printer: '+ vPrinterName +' driver', 'PrinterState');
    end;



    Только вот теперь незадача, походу читает оно с кеша информацию, как часто он обновляется, и можно-ли его обновить принудительно?
  • Jacksotnik (29.01.15 18:39) [5]
    Также выяснил что Windows XP Embedded POSReady не поддерживает ф-цию OpenPrinter2))))))

    Подскажите какие API функции использовались в WinXP для корректного чтения очереди сетевого принтера?
  • junglecat © (30.01.15 13:38) [6]
    EnumJobs?
  • Jacksotnik (30.01.15 17:56) [7]
    Ну дык. Она и используется. Проблема в том что с сетевым принтером работает не коректно
  • Jacksotnik (30.01.15 18:04) [8]
    Сначала вызываю OpenPrinter2(с флагом PRINTER_OPTION_NO_CACHE) после этого полученный хендл использую в EnumJobs. Так работает с любыми принтерами но только в системах > Vista

    В купе с OpenPrinter работает без ошибок но возвращает некорректное количество заданий в очереди. Т.е. очередь уже пуста а я по прежнему получаю к примеру 3 задания.
  • Rouse_ © (30.01.15 18:13) [9]
    Вот это глянь, этот пример я писал когда еще небыло Vista и прочего: http://forum.sources.ru/index.php?showtopic=99950
  • Jacksotnik (30.01.15 18:57) [10]
    И с сетевыми корректно работало?
  • Rouse_ © (30.01.15 19:03) [11]
    Угу
 
Конференция "WinAPI" » вопрос по OpenPrinter [D7]
Есть новые Нет новых   [118231   +22][b:0][p:0.001]