Как выбрать макет при использовании средства просмотра изображений и факсов Windows (shimgvw.dll) для печати jpgs из командной строки? - PullRequest
6 голосов
/ 12 февраля 2010

Я автоматизирую печать файлов jpg, используя пакетный файл Windows и интерфейс командной строки для Windows Picture and Fax Viewer. Команда, которую я использую в моем .bat:

rundll32.exe C:\Windows\System32\shimgvw.dll,ImageView_PrintTo /pt "%fullpath_to_jpg%" "%printer_name%"

Мой фотопринтер печатает 4х6. Если размер файла jpg составляет 4x6, то все работает нормально, и я получаю полный 4x6 отпечаток. Если нет, я получаю белую рамку, которую я НЕ хочу. В проводнике Windows я могу щелкнуть правой кнопкой мыши на формате jpg, отличном от 4x6, и выбрать печать, чтобы вызвать мастер печати фотографий, выбрать «Печать фотографий на всю страницу», и он обрезается, чтобы получить мне полный отпечаток 4x6, который мне нужен.

Как указать в командной строке выбор макета «Печать страницы на всю страницу», чтобы shimgvw.dll сказал «обрезать и повернуть, чтобы соответствовать», а не «центрировать и повернуть, чтобы соответствовать»? Есть ли параметр реестра, чтобы выбрать его в качестве макета по умолчанию вместо «Полностраничная факс-печать? Должен ли я использовать photowiz.dll вместо shimgvw.dll?

Я не могу найти ссылку на параметры командной строки или параметры реестра для этих библиотек.

1 Ответ

3 голосов
/ 01 марта 2013

Плохая новость: сделать это невозможно, даже с VBS. Я извлек все строки и провел значительный поиск в Интернете для всех средств управления этим .dll, и существуют только два основных:

rundll32 shimgvw.dll,ImageView_Fullscreen c:\temp\grub.jpg

выведет на экран grub.jpg

rundll32 shimgvw.dll,ImageView_PrintToW /pt c:\temp\grub.jpg "Microsoft XPS Document Writer"

будет печатать grub.jpg на принтере MS Office XPS, хотя для этого и PDF-принтеров потребуется выбрать имя файла, поэтому автоматизация этого способа невозможна

Единственный способ возможно автоматизировать печать с использованием встроенных в XP методов - это использовать SendKeys, но это ужасное решение, учитывая, что любые случайные нажатия клавиш, введенные пользователем, будут выводить результат, отличный от того, что вы хочу. Конечно, вы всегда можете запустить процесс, скрытый в VBS, но это не идеальное решение.

...