Статьи из блога
Запрет на распечатку документов с чужого компьютера
Один из читателей сайта задал вопрос:
Скажите пожалуйста, как мне можно поставить в Worde запрет на распечатку через чужой принтер? Возможно вообще такое?
Свое решение этого вопроса представил Леонид Бродский, автор программы LeoBilingua. Он написал:
Я думаю, надо запретить не распечатку через чужой принтер, а распечатку с чужого компьютера. Я предлагаю простой, хоть и не очень надёжный способ определить "свой" компьютер - по имени пользователя, заданному в Word.
Приведённый ниже VB код хоть и можно обнаружить в редакторе Visual Basic, но в списке макросов он не виден, так как все процедуры объявлены как Private.
Делаем следующее. Защищаемый документ должен быть открыт в Word. Открываем редактор Visual Basic («Alt»+«F11»). В окне проектов щёлкаем правой кнопкой мышки по проекту, относящемуся к данному документу (в прилагаемом файле примера это проект CancelPrinting). Выбираем меню Insert -> Class Module. В окне свойств меняем имя класса, например на PrintController. В окне кода классового модуля PrintController набираем следующий код:
Option Explicit Private WithEvents app As Word.Application Public Property Set ApplicationObject(value As Word.Application) 'установить ссылку на объект приложения Set app = value End Property Private Sub app_DocumentBeforePrint(ByVal Doc As Document, Cancel As Boolean) 'проверить имя пользователя If app.UserName <> "Антон Кокин" Then 'отменить печать Cancel = True Call MsgBox("Распечатка запрещена. Извините!", _ vbExclamation + vbOKOnly, "Test") End If End Sub
Заменяем текст "Антон Кокин" на своё имя, как оно задано в настройках Word.
Тепрерь в окне проектов дважды щёлкаем левой кнопкой мышки по модулю ThisDocument, находящемуся под проектом данного документа (в прилагаемом файле примера это CancelPrinting). Открывается окно кода этого модуля. Там набираем следующий код:
Option Explicit Private controller As PrintController Private Sub Document_New() 'эта процедура работает при создании нового документа, 'используя данный как шаблон SetPrintController MsgBox "Новый документ" End Sub Private Sub Document_Open() 'эта процедура работает при каждом открытии документа SetPrintController MsgBox "Открыть" End Sub Private Sub SetPrintController() 'установить ссылку на новый экземпляр класса Set controller = New PrintController 'передать экземпляру класса ссылку на объект приложения Set controller.ApplicationObject = Word.Application End Sub
Сохраняем документ.
Чтобы код начал работать, надо закрыть и опять открыть документ. Если же нужна большая безопасность, предлагаю заменить проверку имени на проверку предварительно созданного уникального ключа в регистре с помощью System.ProfileString. Надо будет также как-то защитить VB модули с помощью пароля.
Метки: макросы | печать
Просмотров: 22623
Подписаться на комментарии по RSS
Версия для печати
Еще записи по вопросам использования Microsoft Word:
- 10 вопросов и ответов по редактору Word (1 часть)
- 3 способа очистки списка недавно открытых документов
- Word 2007: добавляем свою вкладку и свои команды
- Word 2007: полотно, рисунки, линии
- Word 2007: смена формата сохранения файла
- Word 97 - решение проблемы с отображением символов на линейке
- Абзац с цветным фоном
- Автоматизация текстового набора в Word
- Автоматическая запись макроса
- Автоматическая нумерация билетов
- Автоматическая расстановка переносов
- Автоматическое обновление полей при открытии документа
- Автоматическое сохранение документа при его закрытии
- Автотекст с последовательной нумерацией
- Белый текст на синем фоне в Word 2007
- Быстрая смена ориентации страниц документа
- Быстрое перемещение между открытыми документами Word
- Быстрое создание нового документа на основе шаблона
- Быстрый ввод текста с помощью команды =rand()
- Ввод повторяющихся фрагментов текста в Word 2007
- Ввод часто повторяющихся фрагментов текста
- Вертикальное выравнивание текста
- Возможно ли запретить копирование текста из документа Word?
- Вопрос о работе с графиками (диаграммами) в Word
- Вопросы и ответы о гиперссылках в редакторе Word
Комментариев: 27
Антон, спасибо за работу которую ты ведешь над своим блогом. Если откровенно, то я даже немного поменял свое снобское отношение к этому редактору Просто наверное таких задач не попадалось интересных, как например в этом посте про защиту от печати.
Вообщем в знак благодарности добавил твой блог в список 100 самых интересных блогов. Удачи!
Спасибо большое. Слава богу, мне помогают хорошие люди.
В 2000 Word-е не работает :-(
На каких редакторах это работает?
Кому не скидывал документ, все распечатали =(((
Open Office тоже его печатает, думаю все остальные текстовые редакторы поддерживающие документы Word (типа Атлантиса и т.д.) тоже распечатают.
Самое смешное)))) не распечатывается (если ничего не править) только у меня))))
не работает вышеуказанный способ, больше не существует никаких решений?
Спасибо большое, очень полезная опция, особенно для бухгалтерских документов, правда сама не разобралась, брат помог.
Что-то у меня не получилось. Не могу понять, где ошибку допустил...
Ложка дегтя... Хорошая задача для освоения VBA. Но практичность этого совета? Даже если работает, как задумано, ничего, кроме раздражения у пользователя сообщение "Распечатка запрещена, Изивните!" не вызовет. Ctrl+a, Ctrl+C, Ctrl+n, Ctrl+v, Ctrl+p, Enter. Все, документ пошел на печать...
совершенно согласна с ak.
надо еще запретить копирование текста, тогда запрет печати на другом компьютере будет актуален.
Задача была решена так, как она была поставлена. Хотите запрет на копирование - добавьте эту процедуру в классовый модуль PrintController:
Чтобы код работал, нужно добавить в проект ссылку на Microsoft Forms 2.0 Object Library (C:\Windows\System32\FM20.dll). Проще всего это сделать, добавив в проект форму (правый щелчок на "Project (CancelPrinting)" - Insert - UserForm), а затем её удалить. Ссылка будет добавлена автоматически.
Кстати, строки
MsgBox "Новый документ"
и
MsgBox "Открыть"
нужны были только для отладки, и в опубликованный код попали по ошибке. Извините! Лучше их удалить.
Здравствуйте. Хотела поставить на свою дипломную работу защиту от копирования, но что-то не получается по предложенному Леонидом Бродским варианту это сделать, если можно подробнее объясните как это сделать. Спасибо.
Rina,
Объясните, пожалуйста, поподробнее, что именно не получается.
Мне надо, чтобы НЕ СМОГЛИ выделить часть текста или весь текст с окна редактора Word скопировать его в буфер обмена и вставить в другой документ.
Rina,
В моём посте от 19 февраля 2008 в 11:28 есть решение вашего последнего вопроса. Выделить текст и скопировать его в буфер обмена пользователь другого компьютера сможет, но вставить его в другой документ - нет, так как текст будет удалён из буфера, как только ваш документ станет неактивным.
Несмотря на то, что я решил эту задачу, мне всё же непонятно, в каких ситуациях может понадобиться запрещать копирование своего текста.
в каких ситуациях может понадобиться запрещать копирование своего текста..
Для исключения быстрого плагиата.
Пальчиками все перебить можно.
НА самом деле от этого никак не защититься )
Да, Ольга права, пусть хоть немножко поработают руками.
Да, похоже, Word для этих трюков не подходит. Достаточно запретить макрокоманды, и - печатай и копируй сколько угодно. Пока я так и не придумал, как сделать, чтобы без макрокоманд текст вообще нельзя было бы прочитать. В таких целях лучше всё-таки пользоваться Adobe Acrobat.
А как сделать чтоб это трюк работал для любого вновь созданного еще не сохраненного файла.
Если этот файл кинешь в стартуп как шаблон, то все равно при запуске ворда в новом документе не работает! пока не кликнешь создать новый документ!
Я не знаю, для чего нужна папка Word Startup, но похоже, что новый документ, который появляется в только что открытом Ворде, создаётся из Normal.dot. Зато в хелпе в разделе Control what happens when you start Word написано: "(Startup switches) /ttemplatename
Start Word with a new document based on a template other than the Normal template. Example: /tMyfax.dot " То есть это то, что надо добавить в ярлык Ворда.
Здравствуйте.
Скажите, а возможно ли сделать так, чтобы документ, созданный на другой машине/другим пользователем (т.е. конкретный автор документа) нельзя было открыть/распечатать на моем компьютере.
Машина всегда включена (запаролить вход нельзя - кроме меня работают еще 2 человека), и хотелось бы ограничить доступ посторонних именно к распечатке их документов.
Мне кажется, что Word изначально не расчитан на такие штуки, как управление правами. Для этого лучше подходят средства Windows. Вы пишете, что на компьютере работают ещё 2 человека. Почему бы не создать для каждого свой профиль с запароленным входом и выходить из профиля, как только отходишь от компьютера? Можно попробовать поискать программы, ставящие пароль на использование принтера и т.п.
Различные запреты, судя по презентации, имеющейся на официальном сайте Windows (презентации можно скачать в виде видеофайлов - порядка 180 Мб), имеются в новом офисе. Возможности нового MS Word 2010 вроде бы позволяют управлять правами и доступом к файлу. Хотя, там пример приведён при использовании MS SharePoint. Надо ждать.
Попробуйте просто поставить пароль на открытие документа Все другие решения, основанные на макросах, достаточно легко обойти.
Отдельное спасибо Леониду Бродскому за полезные советы, вот только нельзя ли создать такой файл примера, чтобы там одновременно и запрет распечатки, и запрет копирования был, а то у самой не получилось.