Страница 1 из 1

Автоматическая печать при открытии документа

Добавлено: Ср ноя 09, 2011 09:17
arch31
Доброго времени суток!
Необходимо на рабочем компьютере с помощью настройки внутренних ассоциаций файлов в Total Commander выставить открытие файлов RTF так, чтобы они сразу выводились на печать в 2-х экземплярах, одновременно сохранив их нормальное открытие из Проводника. Из Тотала это сделать не получилось. Пришлось менять по умолчанию контекстное меню Проводника (Свойства папки - Типы файлов, Windows XP). Вот как реализуется функция печати через DDE в Проводнике с учетом моих доделок:

Код: Выделить всё

Сообщение DDE:
[REM _DDE_Minimize][FileOpen("%1")][t=IsDocumentDirty()][FilePrint 0][FilePrint 0][SetDocumentDirty t][DocClose]
Приложение:
WinWord
Незапущенное приложение DDE:
[FileOpen("%1")][FilePrint 0][FilePrint 0][FileExit 2]
Раздел:
System
Беда в том, что в этом случае и в проводнике и в тотале идет автоматическая печать. У меня на работе стоит версия тотала 7.50a перевод Sam. В справке к нему говорится, что можно назначить DDE в диалоге настройки внутренних ассоциаций, но там я такой функции в упор не вижу. Может она появляется только в определенных случаях? Ведь WinWord ее поддерживает.
Существует ли способ использовать DDE в Total Commander при открытии файла? Может Wincmd.ini править надо?

Добавлено: Ср ноя 09, 2011 09:43
Batya
А зачем вообще печать при открытии?
Может лучше сделать просто кнопку\команду печати 2-х экземляров rtf-документа?

Добавлено: Ср ноя 09, 2011 15:26
arch31
Дело в том, что нам документы в формате rtf в папку по сети из другого города складывают, и их надо сразу распечатывать в 2 экземплярах (сетевой принтер постоянно почему-то вылетает, поэтому договорились поступать таким образом). В день приходит по многу документов, работа загружена и чтобы каждый раз не выполнять одни и те же действия, решил автоматизировать. Да, я такой ленивый :) Обычно я работаю с тоталом, а любой другой не знающий работник из проводника (откуда же еще?) может попытаться "открыть" документ и получит сюрприз :)
Можно, конечно, и кнопкой обойтись, но лучше бы все-таки печатать сразу при открытии с автоматическим закрытием документа. Так удобнее.

Добавлено спустя 49 минут:

Вот что пишется в справке:
Диалоговое окно: Изменение действия

Здесь вы можете определить или изменить действие, связанное с выбранным типом файла.

Действие Название действия, например, "open" или "print".

Описание Текст, показываемый в контекстном меню для этого действия. На локализованных системах (например, русских) здесь находится переведённое название действия. Для "open" и "print" соответственно было бы "Открыть" и "Печать".

Команда Команда, выполняющаяся при выборе указанного действия в контекстном меню. Чтобы передать ассоциированный файл запущенной программе, необходимо использовать параметр командной строки (%1 или "%1"), либо использовать динамический обмен данными (Dynamic Data Exchange, DDE).

Применять DDE Windows должна использовать динамический обмен данными, чтобы передать имя файла запущенной программе. Это позволяет одной программе (например, WinWord) открывать несколько файлов. При включении данной опции становятся доступными следующие настройки, касающиеся DDE:
Сообщение DDE Команда DDE, посылаемая программе для открытия файла. Обычно команда передаётся в квадратных скобках. Пример: [FileOpen("%1")]
DDE-приложение Имя приложения, используемого для подключения при динамическом обмене данными, например, WinWord.
Сообщение DDE, если приложение не запущено Некоторые приложения используют разные сообщения, когда программа запущена и когда не запущена.
Пример: Если вы выбираете "Печать" для файлов Excel, команда для незапущенного приложения будет [open("%1")][print()][quit()], в результате чего Excel закроется после печати.
Если Excel уже запущен, командой будет строка [open("%1")][print()][close()], которая закроет только распечатанный документ, оставляя Excel открытым.
DDE-раздел Раздел динамического обмена данными для DDE-подключения. Для большинства приложений здесь установлено значение "System".

OK Сохраняет текущие настройки выбранного действия в системном реестре и закрывает диалог.

Отмена Закрывает диалог без сохранения сделанных вами изменений.
В диалоговом окне изменения действия в упор параметров DDE не вижу:
Изображение

Добавлено: Ср ноя 09, 2011 15:27
Batya
arch31 писал(а):Можно, конечно, и кнопкой обойтись, но лучше бы все-таки печатать сразу при открытии с автоматическим закрытием документа. Так удобнее.
Честно говоря, я не понял, чем "лучше" открывать документ, чтобы потом его закрыть? Разве не удобнее сделать кнопку для печати всех выделенных документов или, например, для печати всех документов в определённой папке? Какое функциональное значение несёт в себе именно открытие?

Добавлено: Ср ноя 09, 2011 16:18
MVV
arch31 писал(а):В диалоговом окне изменения действия в упор параметров DDE не вижу:
А внутренние ассоциации и не поддерживают DDE.

Насчёт открытия для печати - абсолютно согласен с Batya, что проще печатать документ, не открывая его, чем добавлять такое нелогичное действие как печать при открытии.

Добавлено: Ср ноя 09, 2011 16:37
Avada
arch31
Полное цитирование раздела справки, во-первых, нарушает правила форума (в подобных случаях достаточно было бы ссылки), во-вторых, бессмысленно, ибо выполняется по старой (до 7.5x), а не современной редакции справки, где, между прочим, перед DDE сказано следующее:
Справка TC писал(а):Нижеследующие команды доступны только для системных ассоциаций, но не для внутренних

Добавлено: Ср ноя 09, 2011 20:09
arch31
Batya писал(а):Честно говоря, я не понял, чем "лучше" открывать документ, чтобы потом его закрыть? Разве не удобнее сделать кнопку для печати всех выделенных документов или, например, для печати всех документов в определённой папке? Какое функциональное значение несёт в себе именно открытие?
Такое действие целиком содрано из меню Проводника, куда сам Офис его при инсталляции прописывает. К тому же необходимо при печати сохранять форматирование. В том-то и проблема, что все документы одновременно печатать не надо, они печатаются по мере их поступления, затем напечатанные сдаются. И так снова и снова.
Avada писал(а):Полное цитирование раздела справки, во-первых, нарушает правила форума (в подобных случаях достаточно было бы ссылки)
Прошу прощения, про свежую интернет-версию справки не знал.
MVV писал(а):А внутренние ассоциации и не поддерживают DDE.
Тогда все понятно.

Добавлено: Чт ноя 10, 2011 11:14
Batya
arch31 писал(а):Такое действие целиком содрано из меню Проводника, куда сам Офис его при инсталляции прописывает. К тому же необходимо при печати сохранять форматирование. В том-то и проблема, что все документы одновременно печатать не надо, они печатаются по мере их поступления, затем напечатанные сдаются. И так снова и снова.
Меня абсолютно не волнует, как работает Проводник.
И я так и не понял, чем не устраивает предложенный мной выше вариант:
Batya писал(а):сделать кнопку для печати всех выделенных документов
... при условии, что форматирование будет сохранено.

Ещё раз - забудьте про Проводник!
Как и какой хотелось бы получить результат при работе в Total Commander? Если результат - это напечатанные документы, то зачем нужно действие "открыть"?

Добавлено: Чт ноя 10, 2011 19:39
Flasher
Batya писал(а):И я так и не понял, чем не устраивает предложенный мной выше вариант:
Видимо, нужна отложенная очередь:
arch31 писал(а):все документы одновременно печатать не надо, они печатаются по мере их поступления

Добавлено: Пт ноя 11, 2011 09:47
Batya
Flasher
Вторая цитата не моя, а arch31.
Flasher писал(а):Видимо, нужна отложенная очередь
Как ты себе это представляешь в ракурсе "автоматической печати при открытии документа"?
Я же как раз и предлагал - выделяй нужные документы (читай - только что поступившие), нажимай кнопку и забирай требумое из принтера. Проще вариант, только если скрипт будет сам отслеживать "документы ... по мере их поступления", но, как я понимаю, судя по текущему обсуждению, выбить из автора топика алгоритм определения свежих документов вообще нереально.

Добавлено: Пт ноя 11, 2011 10:23
Flasher
Batya писал(а):Как ты себе это представляешь в ракурсе "автоматической печати при открытии документа"?
Я сам пока не разобрался в противоречивых мыслях автора темы. Полагаю, что нужно тупо добавлять документы в очередь, а не ставить вперёд. Зачем их ещё и открывать, чтобы потом сразу закрыть, мне, так же как и тебе, неясно, раз форматирование от этого не страдает.

Добавлено: Пн ноя 14, 2011 12:20
arch31
Прошу прощения, я хотел узнать, есть ли возможность прописать dde или нет, но коль скоро тема продолжается:

В общем ситуация такая: медицинский кабинет диагностики, очередь из пациентов, после исследования на руки пациенту выдаются снимки и их описание. Доктор описывает удаленно и присылает rtf файл. Необходимо после присылки мед. описания его распечатывать в 2 экз. Ждать до конца рабочего дня (пока будут описаны и присланы все) нет возможности, пациенты весь день ждать не смогут. Кнопкой осуществить в принципе можно было бы, правда мед. сестра вряд ли будет искать кнопку на панели и будет делать по старинке.
Batya писал(а):Проще вариант, только если скрипт будет сам отслеживать "документы ... по мере их поступления", ...
Это был бы самый оптимальный вариант. В принципе действительно было удобно, когда документы сразу удаленно отсылались на принтер, только теперь почему-то эта функция не работает. Видимо, что-то с программой удаленного доступа. Но это не важно.
...но, как я понимаю, судя по текущему обсуждению, выбить из автора топика алгоритм определения свежих документов вообще нереально
Если б я сам знал... Подозреваю, что надо определять по количеству файлов в папке и времени последнего изменения. Правда, можно ли это осуществить скриптом на практике, не знаю. Не силен я в скриптописании.
Flasher писал(а):Зачем их ещё и открывать, чтобы потом сразу закрыть
Да в принципе незачем, если так можно. Я же пишу, что подсмотрел, как в Проводнике это делается. Если можно по-другому, буду только рад.

Добавлено: Пн ноя 14, 2011 14:22
Batya
arch31 писал(а):Если б я сам знал... Подозреваю, что надо определять по количеству файлов в папке и времени последнего изменения.
Самое простое - переносить распечатанные документы в отдельную папку, например, "Распечатанные" или "Printed". Или сначала помещать документы в некую папку "Для печати", а потом скрипт печатает и переносит документы дальше - в обычную папку с документами.
Возможен ещё вариант - в отдельном файле (например, txt или xls) вести список документов с указанием признака "распечатан\не распечатан".
Ещё вариант - хранить где-нибудь (например, в реестре) дату-время последнего распечатанного документа. Соответственно, нужно печатать те документы, дата которых больше хранимой, а потом менять это значение в реестре.
Какой вариант тебе больше нравится? (Подчеркну, что всю работу будет выполять скрипт. Только нужно определиться, по какому алгоритму он будет работать.)

Добавлено: Пн ноя 14, 2011 15:03
arch31
С отд. папкой это идея! :idea: Как-то не подумал сначала. Первый вариант, думаю, будет то что надо. В общем, документы скидываются в папку d:\Заключения\, готовые можно во вложенную Printed перемещать (хоть правда сейчас в конце дня вручную кидаю в папку с названием текущего месяца (для архива), но это, думаю, уже будет высший пилотаж, для тех, кому делать нечего)