Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Программное обеспечение > Ищу ПО


Автор: mihanik 13.1.2011, 21:18
Описивыю, что должна делать программа:

Дано: папка в которой время от времени появляются PDF-файлы
Надо: как только файл появился в папке, его нужно распечатать на принтере, а потом удалить.

Есть такие программы, которые бы постоянно отслеживали состояние папки и делающие то, что я хочу?

Автор: bartram 13.1.2011, 22:06
Быстрее самому написать, задача не очень сложная.

Автор: mihanik 13.1.2011, 22:21
bartram, согласен.
Только лень...

Уже пишу  батник... smile

Автор: A5uKa 13.1.2011, 22:50
Покажешь потом как это выглядит в батнике ?

Автор: Akina 13.1.2011, 22:59
Цитата(mihanik @  13.1.2011,  22:18 Найти цитируемый пост)
как только файл появился в папке

Как только - это сколько? не более секунды? минуты? часа?

Автор: mihanik 14.1.2011, 01:25
Цитата(Akina @  13.1.2011,  22:59 Найти цитируемый пост)
Как только - это сколько? не более секунды? минуты? часа? 


+/- 15 секунд

Добавлено через 10 минут и 32 секунды
Цитата(A5uKa @  13.1.2011,  22:50 Найти цитируемый пост)
Покажешь потом как это выглядит в батнике ? 

Легко!!!

В автозагрузку кидаю батник со следующим содержанием
Код

@echo off

Set MyDisk=F:
SEt MyFolder=PDF-Print

:MyStart

%MyDisk%
cd %MyDisk%\%MyFolder%

for /f "tokens=*" %%a in ( 'dir /b *.pdf' ) Do start print.bat "%%~fa"

ping localhost -n 10

goto MyStart


Содержимое файла print.bat такое.
Код

@echo off
move %1 %tmp%\%~n1
set myc="C:\Program Files (x86)\Foxit Software\Foxit Reader\Foxit Reader.exe" -p %tmp%\%~n1
%myc%
del /S /Q %tmp%\%~n1
exit


Это черновик...
Улучшать завтра буду...

Автор: Akina 14.1.2011, 08:53
Цитата(mihanik @  14.1.2011,  02:25 Найти цитируемый пост)
Улучшать завтра буду...

Улучшить - не получится, всё равно 100% процессора съест.
Перепиши на VBS.

Добавлено через 2 минуты и 29 секунд
Цитата(mihanik @  14.1.2011,  02:25 Найти цитируемый пост)
+/- 15 секунд

Ну тогда WScript.Sleep 1000 вполне достаточно.

Автор: A5uKa 14.1.2011, 09:04
Лучше на C

Автор: Akina 14.1.2011, 09:07
Для написания скрипта на VBS и его запуска достаточно штатного блокнота. А на Сях - увы и ах...

Автор: mihanik 14.1.2011, 13:46
 smile 

Автор: ksili 14.1.2011, 13:55
Foxit Reader - глючная штука. У меня недавно было: выдавал ошибку и вылетал при попытке печати PDF, в котором есть поля ввода. Соответственно ничего не печаталось.

Автор: mihanik 14.1.2011, 14:02
ksili, у меня таких документов ТОЧНО не будет.

Автор: Akina 14.1.2011, 17:44
Цитата(ksili @  14.1.2011,  14:55 Найти цитируемый пост)
выдавал ошибку и вылетал при попытке печати PDF, в котором есть поля ввода.

Было несколько версий с кривым плагином работы с формами. Кроме проблем печати, была ещё одна - половина корректированных в Фоксите доков потом не открывались в Адобе ридере. Потом поправили.

Автор: bartram 14.1.2011, 19:49
Цитата(mihanik @  14.1.2011,  03:25 Найти цитируемый пост)
В автозагрузку кидаю батник со следующим содержанием

Ну вот, а ты ПО какое-то искал smile

Автор: mihanik 15.1.2011, 11:32
Цитата(bartram @  14.1.2011,  19:49 Найти цитируемый пост)
Ну вот, а ты ПО какое-то искал smile 


Ну... Дык... Это...
Я его и нашёл. У себя в голове. smile

Сейчас думаю версию на vbs накатать...

Лени-и-и-и-иво...
smile

Автор: mihanik 16.1.2011, 23:46
Цитата(Akina @  14.1.2011,  08:53 Найти цитируемый пост)
Перепиши на VBS.


Вот!!!

Код

Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\.\root\cimv2")

Set colMonitoredEvents = objWMIService.ExecNotificationQuery _
    ("SELECT * FROM __InstanceCreationEvent WITHIN 10 WHERE " _
        & "Targetinstance ISA 'CIM_DirectoryContainsFile' and " _
            & "TargetInstance.GroupComponent= " _
                & "'Win32_Directory.Name=""c:\\\\scripts""'")

Set objFSO = CreateObject("Scripting.FileSystemObject")

Do
    Set objLatestEvent = colMonitoredEvents.NextEvent
        MyFile = objLatestEvent.TargetInstance.PartComponent
    Set objLatestEvent = Nothing
    
    MyFile = UCase (MyFile)
    MyFile = Replace(MyFile, "\\", "\")
    MyFile = Mid (MyFile,InStr(MyFile,"""")+1, Len(MyFile)-InStr(MyFile,"""")-1)
    
    If (InStr ( MyFile, ".PDF")) = (Len (MyFile)-3) Then     
        Set WSHShell = WScript.CreateObject("WScript.Shell") 
                WshShell.Run """C:\Program Files\Foxit Software\Foxit Reader\Foxit Reader.exe"" -p " & """" & MyFile & """", 1, True
        Set WSHShell = Nothing    
    End If
    
    Set objFSO = CreateObject("Scripting.FileSystemObject")
        objFSO.DeleteFile(MyFile)
    Set objFSO = Nothing
    
Loop



Автор: Akella 17.1.2011, 23:41
Молодец, а теперь отправь этот скрипт в специальную тему с описанием smile

Автор: A5uKa 18.1.2011, 09:14
mihanik 

А можешь подсказать как посчитать кол-во PDF файлов ?

Мне просто как раз нужен подобный скрипт, что бы контроллировать кол-во pdf файлов в папке.

Автор: mihanik 18.1.2011, 11:39
Цитата(Akella @  17.1.2011,  23:41 Найти цитируемый пост)
Молодец, а теперь отправь этот скрипт в специальную тему с описанием smile 


http://forum.vingrad.ru/forum/topic-320367.html

Добавлено через 46 секунд
Цитата(A5uKa @  18.1.2011,  09:14 Найти цитируемый пост)
А можешь подсказать как посчитать кол-во PDF файлов ?

Могу, но только вечером, сейчас некогда... smile

Автор: A5uKa 19.1.2011, 12:32
Цитата(mihanik @ 18.1.2011,  11:39)
Могу, но только вечером, сейчас некогда... smile

У меня получилось .

Код

DateFormat = Month(Date) & "/" & Day(Date) & "/" & Year(Date)
'wscript.echo DateFormat
'wscript.echo Time

Const LOCAL_TIME = True
Set dtmTargetDateLow = CreateObject("WbemScripting.SWbemDateTime")
Set dtmTargetDateHigh = CreateObject("WbemScripting.SWbemDateTime")
dtmTargetDateLow.SetVarDate DateFormat + " 00:00:00", LOCAL_TIME
dtmTargetDateHigh.SetVarDate DateFormat + " 23:59:59", LOCAL_TIME

strComputer = "nCdy"

strDrive = "d:"

strPath = "TestFolder"

strPathAlt = Replace(strPath, "\\", "\")

strName = strDrive & "\" & strPathAlt

Set objWMIService = GetObject("winmgmts:\\" & strComputer)

DO
    Set colFiles = objWMIService.ExecQuery _
        ("SELECT * FROM CIM_DataFile WHERE Drive = '" & strDrive & "' AND Path = '\\" & strPath & "\\' ")

    'and LastModified >= '" + dtmTargetDateLow + "' and LastModified <= '" + dtmTargetDateHigh + "'

    Counter = 0
    IF colFiles.Count > 3 THEN

        For Each objFile In colFiles
    
        Counter = Counter + 1
        '   wscript.echo objFile.Name
        '   wscript.echo objFile.LastModified

            IF Counter > 3 THEN
                Set objFSO = CreateObject("Scripting.FileSystemObject")
                    objFSO.DeleteFile(objFile.Name)
                Set objFSO = Nothing
            END IF

        Next
    
    END IF

LOOP


Добавлено через 1 минуту и 4 секунды
Ну там немного мусора в коде , но пусть будет.

Автор: mihanik 19.1.2011, 13:04
Молодец!!!

Вот ещё посмотри...

Код

' List All the Files in a Folder

' Windows Server 2003 : Yes
' Windows XP : Yes
' Windows 2000 : Yes
' Windows NT 4.0 : Yes
' Windows 98 : Yes

strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set colFiles = objWMIService. _
    ExecQuery("Select * from CIM_DataFile where Path = '\\Scripts\\'")

For Each objFile in colFiles
    Wscript.Echo objFile.Name 
Next

Автор: Akella 19.1.2011, 17:49
Цитата(mihanik @  18.1.2011,  11:39 Найти цитируемый пост)
Молодец, а теперь отправь этот скрипт в специальную тему с описанием smile 


http://forum.vingrad.ru/forum/topic-320367.html


я почему-то подумал, что твой скрипт из этой области: http://forum.vingrad.ru/forum/topic-154708.html

Автор: mihanik 19.1.2011, 21:27
Цитата(Akella @  19.1.2011,  17:49 Найти цитируемый пост)
я почему-то подумал, что твой скрипт из этой области: http://forum.vingrad.ru/forum/topic-154708.html 


Сам в шоке.
 smile 

Автор: Akina 19.1.2011, 21:39
A5uKa, а нафига ты создаёшь новый инстанс objFSO на каждом обороте цикла, и тут же его дропаешь?

Автор: A5uKa 20.1.2011, 09:38
Цитата(Akina @ 19.1.2011,  21:39)
A5uKa, а нафига ты создаёшь новый инстанс objFSO на каждом обороте цикла, и тут же его дропаешь?

ну могу вынести за цикл )

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)