|
1301 / 403 / 22
Регистрация: 21.10.2011
Сообщений: 1,285
|
||||||
Печать с использованием функции Shell24.08.2012, 21:23. Показов 23722. Ответов 23
Метки нет (Все метки)
Интересует, чтобы код переходил к следующей строке кода, только после того, как документ отправлен на принтер. Ещё интересует, как указать конкретный принтер.
0
|
||||||
| 24.08.2012, 21:23 | |
|
Ответы с готовыми решениями:
23
Разработать приложение для вывода содержимого компонента класса TMemo на печать с использованием функции Canvas Разработать приложение для вывода содержимого компонента класса TMemo на печать с использованием функции Canvas Вопрос по функции Shell (Dim RetVal RetVal = Shell('rar a tmp*.*', vbHide) ) |
|
|
|
| 24.08.2012, 22:57 | |
|
Есть, сделал перевод справки.
Acrobat and Acrobat Reader Command Line Reference (перевод)
Как использовать коммандную строку Windows в программах Acrobat и Acrobat Reader? Вы можете открыть и распечатать PDF-файл с помощью командной строки Acrobat и Acrobat Reader. Эти команды официально не поддерживаются, но могут быть использованы некоторыми разработчиками. Нет никакой другой документации по этим командам, кроме приведенной ниже. Примечание: все примеры, приведенные для Adobe Reader, также применимы к Acrobat. Если Вы используете Acrobat, подставьте в командной строке Acrobat.exe вместо AcroRd32.exe. AcroRd32.exe pathname — запускает Adobe Reader и отображает файл. Должен быть указан полный путь к файлу. Существуют такие ключи: /n запускает отдельный экземпляр Acrobat или Adobe Reader, даже если он уже запущен. /s не показывать всплывающее окно /o не показывать диалоговое окно открытия файла /h запускает Acrobat или Adobe Reader в минимизированном окне. AcroRd32.exe /p pathname — Запускает Adobe Reader и показывает диалоговое окно печати. AcroRd32.exe /t path "printername" "drivername" "portname" Запускает Adobe Reader и печатает файл, после чего диалоговое окно печати будет закрыто. Путь должен быть указан полностью. 4-й параметр ключа /t принимает путь (path), имя принтера (printername), имя драйвера (drivername) и имя порта (portname) (все строки обязательны). drivername — имя драйвера (указано в свойствах Вашего принтера). portname — Имя порта принтера. Оно не должно содержать символ "/". Иначе вывод будет переадресован на порт по-умолчанию для принтера, который на нем установлен.
3
|
|
|
1301 / 403 / 22
Регистрация: 21.10.2011
Сообщений: 1,285
|
||
| 24.08.2012, 23:14 [ТС] | ||
|
Dragokas, а порядок записи какой? Вот у меня в коде (сообщение #1) сначала идёт название программы, затем два ключа затем имя файла.
Использование объектов альтернатива? Так получается. Т.е. для решения этой задачи, по нормальному, нужно использовать объекты Acrobat и Reader? Хотя и по библиотеке для Reader нельзя найти никакой информации в интернете. Не известно, что делать, одним словом.
0
|
||
|
|
||||||
| 25.08.2012, 00:16 | ||||||
|
Как уже писалось в Информация о pdf файле теме работа с объектами Ридера возможна только, если продукт куплен (платная версия). В бесплатную API и пр. не входят. А значит вся прелесть сходит на нет. Ваша программа на Vb будет скорей только для домашнего использования или для организаций, где такой продукт действительно используют.
Shell - умеет только вызывать программу с параметрами в окне с определенным пользователем фокусом и возвращать ID приложения, через который можно делать простые вещи, например, активировать или закрывать экземпляр. Но это выходит за рамки этой темы. Для Вашей конкретной задачи рекомендую попробовать объект FileSystemObject. И его метод Run.
Немного поэкспериментировав удостоверился, некоторые ключи делают не совсем то, о чем написано в справке. Кстати другой и нет - это я нашел в официальной для разработчиков: http://livedocs.adobe.com/acro... 22.31.html Так вот, ключ /h - он сворачивает приложение, но только после завершения печати. Но самая главная его задача автоматически распечатывать документ без подтверждения. Без него Вы просто увидите диалоговое окно "Печать" Adobe Reader-a. Кроме того, как Вы видите второй строкой у меня печать на принтере LBP-2900 - этот принтер установлен у меня по-умолчанию. Но после того как я указал в ком. строке - печатать через драйвер "doPDF", как бы я не пытался не указывать параметров (например, ключ /p), у меня все равно печатает на виртуальном принтере. Поэтому мне пришлось указывать ВСЕ параметры моего принтера по-умолчанию. Вот такие особенности. Добавлено через 11 минут P.S. doPDF кто не знает - это бесплатная программа, которая преобразовывает любой документ в формат PDF (нечто вроде печати в файл). Здесь я ее установил для экспериментов, якобы у меня в системе несколько принтеров.
1
|
||||||
|
1301 / 403 / 22
Регистрация: 21.10.2011
Сообщений: 1,285
|
|||
| 25.08.2012, 11:56 [ТС] | |||
|
библиотека: Windows Script Host Object Model, объект: WshShell. Вывод по теме: для каждой программы существует свой синтаксис командной строки. Т.е. например, для программы Foxit Reader (это программа для работы с PDF-файлами) командная строка будет другой, чем для Adobe Reader. Таким образом, запрос в Гугл для поиска синтаксиса командной строки для программы Adobe Reader может быть таким:
Примечание Названия принтеров, драйверов и портов берётся отсюда:
0
|
|||
|
|
||
| 25.08.2012, 18:39 | ||
|
Все это добавляет программист при разработке своего приложения. К примеру, в VB переданные аргументы отображает функция Command, в С++ - argv[]. ... Или ключевые слова в таком виде: "adobe reader command line call switch syntax" WshShell, да, потому что методу Run можно задать - дожидаться завершения процесса (печати в данном случае).
0
|
||
|
1301 / 403 / 22
Регистрация: 21.10.2011
Сообщений: 1,285
|
|
| 25.08.2012, 18:42 [ТС] | |
|
Dragokas, сообщение #4. В какой строке этого кода происходит ожидание отправки документа на печать?
0
|
|
|
|
|
| 25.08.2012, 20:09 | |
|
За это отвечает 3-й параметр метода Run.
Он не универсален и очень зависит от поведения дочернего (вызванного) приложения. Но в данном случае свое отрабатывает на ура. Описание:
3.4. Run Синтаксис: Run(<Command>,<WindowStyle>,<WaitOnRetur n>) Назначение: создаёт новый независимый процесс, который запускает заданное приложение. Параметры: <Command> - строка, командная строка запуска приложения. <WindowStyle> - необязательный, число. Определяет вид окна запускаемого приложения. Некоторые возможные значения: 0 - Не отображает окно. 1 - Активизирует и отображает окно. 2 - Активизирует окно и отображает его в свёрнутом виде. 3 - Активизирует окно и отображает его в максимизированном виде. <WaitOnReturn> - необязательный, булево (число). True - сценарий возобновит работу только после завершения вызванного процесса. False (по умолчанию) - управление передаётся сразу обратно в сценарий. Описание: если параметр "WaitOnReturn" установлен в True, метод возвращает код выхода вызванного приложения. Иначе метод всегда возвращает ноль.
0
|
|
|
|
||||||
| 27.08.2012, 00:20 | ||||||
|
Не по теме: Перед тем, как грохнулась база данных, Busine2012, Вы спрашивали, чтобы документы печатались подряд. Отвечаю: конвейерная печать файлов действительно не проходит, поскольку после ее завершения Adobe не закрывает свое приложение, а через командную строку такого ключа нет. Поэтому пришлось копать в сторону отслеживания очереди печати. API для этого весьма сложно. И тут я случайно нашел в системной папке любопытный скриптик с цифровой подписью: c:\Windows\System32\Printing_Admin_Scrip ts\ru-RU\prnjobs.vbs Подпилив его я получил такое:
1
|
||||||
|
1301 / 403 / 22
Регистрация: 21.10.2011
Сообщений: 1,285
|
||
| 27.08.2012, 08:47 [ТС] | ||
|
0
|
||
|
1301 / 403 / 22
Регистрация: 21.10.2011
Сообщений: 1,285
|
|||||||||||
| 27.08.2012, 12:00 [ТС] | |||||||||||
Сообщение было отмечено как решение
Решение
Dragokas, порядок вывода на печать зависит от программы, с помощью которой сначала открывается файл, а затем этот файл запускается на печать. В моём случае такой программой является Adobe Reader. Поэтому, я предполагаю, что нет смысла ориентироваться в этом случае на очередь печати.
Я буду использовать отслеживание открытие и закрытие PDF-файла в программе Adobe Reader с помощью одной функции API:
Примечание: не известно, успеет ли функция FindWindowA определить, что PDF-документ открылся: вдруг PDF-документ очень быстро откроется и закроется.
0
|
|||||||||||
|
|
||||
| 27.08.2012, 12:55 | ||||
|
У меня в очередь печати никогда не отправляется более 1 документа. Сначала цикл запускает на печать первый. Затем беспрерывно отслеживает момент, когда документ появится в задании печати. Далее с паузой в 1 секунду отслеживает момент, когда печать задания завершиться и очередь печати очистится. После этого убивает процесс Adobe Reader. Цикл начинается заново. Держи + за идею. Добавлено через 11 минут P.S. Возникли вопросы: 1. Как у Вас ведет себя Adobe Reader - он меняет заголовок окна после того, как все страницы 1-го документа будут распечатаны или сразу после постановки документа в очередь печати? 2. Сколько страниц Вы отправляли на печать? 3. У Вас разве приложение Adobe Reader само закрывается после завершения печати?
1
|
||||
|
1301 / 403 / 22
Регистрация: 21.10.2011
Сообщений: 1,285
|
||||
| 27.08.2012, 13:39 [ТС] | ||||
|
0
|
||||
|
|
|
| 27.08.2012, 14:09 | |
|
А будет ли отрабатывать правильно эта API при большем кол-ве листов, или отправит все документы в очередь габузом.
Это можно увидеть, если открыть окно очереди печати принтера и запустить Ваш макрос, отправив на печать документы в описанном Вами порядке: 1) с 2 страницами 2) с 1 страницей. Просто у меня сейчас нет возможности проверить.
0
|
|
|
1301 / 403 / 22
Регистрация: 21.10.2011
Сообщений: 1,285
|
|
| 27.08.2012, 14:50 [ТС] | |
|
Dragokas, в сообщении #12 в коде PDF-документ открыт только до тех пор, пока в диалоговом окне очереди печати есть текст Постановка в очередь. Когда в диалоговом окне с очередью печати появляется состояние Идет печать, то PDF-документ закрывается, но продолжает печататься и открывается следующий PDF-документ для печати. Т.е. при моём коде будет заполняться очередь печати.
0
|
|
|
1301 / 403 / 22
Регистрация: 21.10.2011
Сообщений: 1,285
|
|
| 27.08.2012, 16:22 [ТС] | |
|
Dragokas, я бы посмотрел ваше сообщение #9, то это опять надо кучи информации смотреть в интернете и на английском языке по библиотекам WScript.Shell и WbemScripting.SWbemLocator. Хотелось бы осознанно коды писать, а чтобы разобраться с вашим кодом, нужно смотреть много информации.
Меня в моём коде сейчас не устраивает только одно: вдруг функция FindWindowA пропустит открытие файла. Сейчас думаю такой вариант: открывать PDF-файл, затем что-то делать, чтобы документ отправлялся на печать, получить сигнал, что документ отправлен на печать, закрыть документ. Но думаю, что это сложно и уже не буду, наверное, разбирать. В моём коде, если функция FindWindowA пропустит открытие файла, то код встанет, поэтому пользователь будет знать, что что-то не так пошло. В принципе вот такая защита от ошибки.
0
|
|
|
0 / 0 / 0
Регистрация: 29.08.2012
Сообщений: 12
|
|
| 29.08.2012, 09:14 | |
|
И что печатает?
0
|
|
|
|
||
| 29.08.2012, 13:18 | ||
|
Busine2012, поставь в первом цикле дополнительным условием выхода тайм-аут, скажем, в 10 секунд. Между завершением постановки на печать и открытием диалога печати в новом документе врядли может пройти большее время, если документ не гигантских размеров.
1
|
||
| 29.08.2012, 13:18 | |
|
Помогаю со студенческими работами здесь
20
Shell-процедура для ввода слов и вывода на печать. Remote Shell и Local Shell для Windows Печать StringGrid с использованием PrintDialog Составьте программу на языке Shell, использующую функции Написать программу с использованием функции и с использованием макроса Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/
O1rJuneU_ls
https:/ / vkvideo. ru/ video-115721503_456239114
|
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ВВЕДЕНИЕ
Введу сокращения:
аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
|
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi
ветка по-частям.
коммит Create переделка под биомассу. txt
вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
|
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ *
Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях.
Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её.
Последовательность действий:. . .
|
|
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
|
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение.
И на уровне агентов добавится между грибами или бактериями взаимодействий.
До того я пробовал подход через многомерные массивы,. . .
|
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Налог на собак: https:/ / **********/ gallery/ V06K53e
Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf
Пост отсюда. . .
|
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop?
Ниже её машинный перевод.
После долгих разбирательств я наконец-то вернула себе. . .
|