20121016

Автоматическая печать всех файлов из папки по сети.

Так получилось, что у меня остался один древний принтер, который не поддерживается 64-битными операционными windows. У меня завалялся и древний ноут, который тянул форточки.

В результате на этом компьютере поставил FoxIt Reader для печати pdf, openoffice для печати .doc, .xsl.

Стандартные картинки я печатаю встроенными средствами. Я расшарил папку, кинул в неё нужность и печатаешь. Идти к старику - уже принт-серверу ломает. У меня появилось желание автоматизировать процесс печати.

Решение получилось - из софта стоит то, что надо для открытия файлов, плюс одна программка и плюс скрипт в автозагрузке. Полёт нормальный.

Программка ClassExec разрешает имитировать нажатие пункта печать в контекстном меню.

Скрипт ниже делает это нажатие для файлов в папке, к которой доступен по сети.




  1. 'print-loop.vbs
    'Автоматическая печать знакомых системе файлов, появляющихся в определенной папке
  2. Set gFSO = CreateObject("Scripting.FileSystemObject")
  3. Set gShell = CreateObject("WScript.Shell")
  4. 'Папка, в которой скрипт ждет файлы. К ней есть доступ по сети на запись
  5. gWatchFolder = "G:\PrintME\"
  6. 'Основной цикл
  7. While true
  8.  Set lFolder = gFSO.GetFolder(gWatchFolder)
  9.  Set lFiles = lFolder.Files
  10.  For Each lFile In lFiles
  11.   PrintFile(gWatchFolder & lFile.Name)
  12.  Next
  13.  WScript.Sleep(1000)
  14. WEnd
  15. 'Функция печати конкретного файла
  16. Sub PrintFile(pFileName)
  17.  'Ждем некоторе время (а вдруг файл большой, ещё не записался)
  18. WScript.Sleep(10000)
  19.  s = """c:\!bin\classExec.exe"" """ & pFileName & """ --action print"
  20.  Call gShell.Run(s,0,true)
  21.  'Некоторые файлы могут печататься долго, поэтому вылавливаем-с его освобождение тупым повтором удаления
  22. While gFSO.FileExists(pFileName)
  23.  WScript.Sleep(5000)
  24.  gFSO.DeleteFile(pFileName)
  25. WEnd
  26. End sub

Комментариев нет: