Форум программистов, компьютерный форум, киберфорум
VBScript/JScript/WSH/WMI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
0 / 0 / 2
Регистрация: 29.04.2013
Сообщений: 52
VBS

Печать с параметрами и перемещение

26.10.2017, 13:16. Показов 2171. Ответов 37
Метки нет (Все метки)

Здравствуйте.

Суть задачи: следить за определённой папкой, найдя файл *.jpg отправить его на печать с именем файла (чтобы имя файла было напечатано тоже) после переместить файл в другую папку.

Я не знаю как (и можно ли вообще) пустить картинку на печать и добавить к ней имя файла, с остальным я справлюсь

Есть идеи ?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
26.10.2017, 13:16
Ответы с готовыми решениями:

Печать фотографий и Word-документов в большом количестве с параметрами
Добрый день. На работе появилась такая проблема. Я ищу программу (готовую или сырую для доработки), которая позволила бы печатать...

Розница 2.2. Печать чека и перемещение товаров между магазинами(складами)
Всем здравствуйте. не давно начал работать с 1с и имеется очень важный вопрос. 1с 8.3, Редакция Розница 2.2 ЧПМ Mercury G58 Как...

Вывод страницы на печать с заданными параметрами страницы
Подскажите, каким образом можно произвести вывод страницы на печать с заданными параметрами страницы. И если можно, вывод на экран сразу в...

37
7001 / 2885 / 1110
Регистрация: 06.06.2017
Сообщений: 9,804
01.11.2017, 09:50
Цитата Сообщение от Dmitrii
К тому же, как было сказано, с обработкой текстовых файлов проблем не возникало.
Точно, не подумал.
Цитата Сообщение от Dmitrii
Однако в сравнительном отношении мне он представляется более надёжным.
Преимущество в возможности точно диагностировать данную ситуацию.
Вы про проверку в начале кода? Есть куда более быстрый способ:
Visual Basic
1
2
3
4
5
On Error Resume Next
Verb = CreateObject("WScript.Shell").RegRead("HKCR\htmlfile\shell\Print\")
If Err Then MsgBox "Системе требуется привязка HTML-файлов к отправке на печать!", 4144 : WSH.Quit
On Error GoTo 0
' MsgBox Verb
А вообще сам я печатаю в скрытом для окон приложений режиме, т.е. так —
Visual Basic
1
CreateObject("Shell.Application").ShellExecute strTemp,,, "print", 0
, а не так —
Visual Basic
1
CreateObject("Shell.Application").NameSpace(0).ParseName(strTemp).InvokeVerb "print"
0
2619 / 549 / 109
Регистрация: 21.03.2012
Сообщений: 1,051
01.11.2017, 10:58
Цитата Сообщение от FlasherX Посмотреть сообщение
... Есть куда более быстрый способ...
Как демонстрируют прикреплённые ниже картинки, толку от него немного.
В случае, когда значение "умолчального" параметра задано, наблюдается тождественная ситуация.
Миниатюры
Печать с параметрами и перемещение   Печать с параметрами и перемещение  
0
7001 / 2885 / 1110
Регистрация: 06.06.2017
Сообщений: 9,804
01.11.2017, 12:27
Немного поспешил. Так:
Visual Basic
1
2
3
4
5
6
7
On Error Resume Next
With CreateObject("WScript.Shell")
    Verb = .RegRead("HKCR\" & .RegRead("HKCR\.html\") & "\shell\Print\")
End With
If Err Then MsgBox "Системе требуется привязка HTML-файлов к отправке на печать!", 4144 : WSH.Quit
On Error Goto 0
' MsgBox Verb
0
2619 / 549 / 109
Регистрация: 21.03.2012
Сообщений: 1,051
01.11.2017, 12:47
FlasherX, нет никакой разницы.
0
7001 / 2885 / 1110
Регистрация: 06.06.2017
Сообщений: 9,804
01.11.2017, 12:56
Dmitrii, в чём? В поведении? Что-то не верится.
0
2619 / 549 / 109
Регистрация: 21.03.2012
Сообщений: 1,051
01.11.2017, 14:44
Цитата Сообщение от FlasherX Посмотреть сообщение
... В поведении?..
Да.
Ситуация:
1) значение "умолчального" параметра ветки HKCR\.html - строка AudioCD;
2) ветка HKCR\AudioCD\shell не содержит подключа print;
3) предложенный вами в сообщении #23 сценарий выдаёт оповещение Системе требуется привязка HTML-файлов к отправке на печать!;
4) в контекстном меню HTML-файла имеется команда Печать;
5) предложенный мной в сообщении #10 сценарий успешно вызывает спулер печати.
Картинки прилагаются.
Миниатюры
Печать с параметрами и перемещение   Печать с параметрами и перемещение  
0
7001 / 2885 / 1110
Регистрация: 06.06.2017
Сообщений: 9,804
01.11.2017, 15:25
Dmitrii, допустим.
1) А как там вообще AudioCD оказалась?

Ведь стоит в реестре сменить умолчательное значение HKCR\.<расширение> на ключ без \shell\print\ внутри, то пункт печати для данного расширения из меню автоматически пропадает.
0
2619 / 549 / 109
Регистрация: 21.03.2012
Сообщений: 1,051
01.11.2017, 15:35
Цитата Сообщение от FlasherX Посмотреть сообщение
... как там вообще AudioCD оказалась?..
Я задал.
Цитата Сообщение от FlasherX Посмотреть сообщение
... пункт печати для данного расширения из меню автоматически пропадает...
Как видите, не пропал.
0
7001 / 2885 / 1110
Регистрация: 06.06.2017
Сообщений: 9,804
01.11.2017, 16:07
Цитата Сообщение от Dmitrii
Я задал.
Ну, для чистоты эксперимента править ручками вообще не имело смысла.
Цитата Сообщение от Dmitrii
Как видите, не пропал.
По-видимому, на XP данные из реестра где-то кэшируются. Попробуйте перезапустить Windows и ещё раз заглянуть в меню.
0
2619 / 549 / 109
Регистрация: 21.03.2012
Сообщений: 1,051
01.11.2017, 17:09
Цитата Сообщение от FlasherX Посмотреть сообщение
... править ручками вообще не имело смысла...
Имело, т.к. это был лишь один из способов проверки в числе прочих. Были проверки, в которых правка реестра вручную не применялась, но результат был аналогичным.
Цитата Сообщение от FlasherX Посмотреть сообщение
... перезапустить Windows...
Это действие, разумеется, выполнялось.
Цитата Сообщение от FlasherX Посмотреть сообщение
... на XP данные из реестра где-то кэшируются...
Проверки были выполнены не на XP, а на 7 HB/10 Pro.
0
7001 / 2885 / 1110
Регистрация: 06.06.2017
Сообщений: 9,804
01.11.2017, 18:04
Цитата Сообщение от Dmitrii
Были проверки, в которых правка реестра вручную не применялась, но результат был аналогичным.
Т. е. сообщение в случае с FireFox не появлялось?
Проверки были выполнены не на XP, а на 7 HB/10 Pro.
Ну, вот я сегодня протестировал в очередной раз на Win 7 x86 Max. Всё происходит именно так, как я описывал.
0
2619 / 549 / 109
Регистрация: 21.03.2012
Сообщений: 1,051
02.11.2017, 09:16
Цитата Сообщение от FlasherX Посмотреть сообщение
Т. е. сообщение в случае с FireFox не появлялось?..
Не появлялось.

К настоящему моменту проверки были выполнены на XP Pro x86/7 Pro x86/7 HB x64/8.1 Pro x64/10 Pro x64 (1709.16299.19).
Во всех случаях исходным значением "умолчального" параметра ветки HKCR\.html была строка htmlfile. Таковым же это значение оставалось при изменении ассоциации HTML-файла с обозревателем штатными средствами. Таковым же оно оставалось после перезагрузки ОС. Ветка HKCR\htmlfile\shell во всех случаях содержала подключ print. На всех ОС, кроме XP, в контекстом меню HTML-файла имелась команда Печать, если он был ассоцииорван с MSIE, и не имелась, если он был ассоциирован с другими обозревателями: Firefox, GoogleChrome, Edge (для "десятки").
На XP в контекстом меню HTML-файла команда Печать имелась при его ассоциировании с любым обозревателем.
Использовавшаяся "десятка" была только что установленной. На ней не было никаких дополнительных приложений, кроме Firefox. Прочие ОС находились различное время в реальной эксплуатации.

Контрольный опыт с заданием значения "умолчального" параметра ветки HKCR\.html вручную проводился на ОС 7 HB x64/10 Pro x64. Выбирались ключи куста HKCR, у которых в подключе shell не было подключа print: Max3.Association.HTML и AudioCD (соответственно указанному порядку ОС). Пример результата уже был описан и проиллюстрирован.

Цитата Сообщение от FlasherX Посмотреть сообщение
... протестировал в очередной раз на Win 7 x86 Max. Всё происходит именно так, как я описывал.
Не сомневаюсь в том, что у вас всё именно так и работает. Однако, как следует из сказанного выше, такая ситуация справедлива не во всех случаях.
В итоге возвращаемся к тому, с чего начался данный спор: мой опыт вновь свидетельствует о том, что наиболее надёжным (из стандартно имеющихся в ОС) средством решения обсуждаемой задачи является использование метода DoIt.
Возможно, чей-то опыт позволяет утверждать обратное, но мне такие ситуации пока не встречались.
0
7001 / 2885 / 1110
Регистрация: 06.06.2017
Сообщений: 9,804
02.11.2017, 11:38
Цитата Сообщение от Dmitrii
и не имелась, если он был ассоциирован с другими обозревателями: Firefox, GoogleChrome, Edge (для "десятки")
Там может быть не Печать, а Print. Я для этого нижний MsgBox и привёл на всякий.
Цитата Сообщение от Dmitrii
Пример результата уже был описан и проиллюстрирован.
Так в примере с FireFox было показано, что глагол отсутствует. Так и должно быть.
0
0 / 0 / 2
Регистрация: 29.04.2013
Сообщений: 52
02.11.2017, 14:36  [ТС]
Можно закрывать тему, я доделал как нужно было.
(мне без разницы что не красиво - она работает как и хотел)

Следит за диском V, перемещает файлы по папкам в зависимости от маски, файлы .JPG копирует (в архив) и на диск C - от куда будет взята ссылка и собран HTML файл (картинка + имя картинки).
Отчёт только о факте переноса файлов, но это уже по желанию.

VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
Dim objFS, objFSS, objFSO, FSO, objFil, objFile, objShell, objWShell, strPath, arrPatterns, arrTargets, strLog, arrFile, Name, Extn
Dim strExclusion, strTranslator, strTemp, blnIsConsole, blnHasError, xAnswer, i
Dim objFolderItem, objIte
 
'============================================================================================
 
Set FSO=CreateObject("Scripting.FileSystemObject")
Dim par_file, folderC, oth_folder, v
Set par_folder=FSO.GetFolder("V:\")
Set folderC=FSO.GetFolder("C:\0-0")
 
For Each par_file In par_folder.Files
    If instr(par_file.Name,".jpg") <> 0 Then
    FSO.CopyFile par_file.Path, folderC.Path & "\"
End If
Next
'============================================================================================
 
Dim par_file1, folderC1, oth_folder1
Set par_folder1=FSO.GetFolder("C:\0-0")
Set folderC1=FSO.GetFolder("V:\")
For Each par_file1 In par_folder1.Files
    If instr(par_file1.Name,".jpg") <> 0 Then
 
Set objFSS = CreateObject("Scripting.FileSystemObject")
strPath = objFSS.GetParentFolderName(par_file1.Path)
strName = objFSS.GetBaseName(par_file1.Path)
strTemp = objFSS.BuildPath(strPath, strName & ".html")
Set objFile = objFSS.CreateTextFile(strTemp, True)
strTemp = objFSS.GetFileName(par_file1.Path)
strTemp1 = objFSS.GetBaseName(par_file1.Path)
objFile.Write "<html><head></head><body><div style=""position:relative ; left:360px;  top:1000px;""> <h4>" & strTemp1 & "</h4></div><img src=" & strTemp & "   height=""95%"">  </body></html>"
objFile.Close
End If
Next
 
'============================================================================================
 
strPath = "V:\": strLog = "Журнал"
arrPatterns = Array("Имя1*.xls", "Имя2*.jpg", "Имя3*.jpg", "Имя4*.xlsx")
arrTargets = Array("J:\Путь1", "J:\Путь2", "J:\Путь3", "J:\Путь4")
Set objFS = CreateObject ("Scripting.FileSystemObject")
strTranslator = objFS.GetBaseName(WScript.FullName)
If StrComp(strTranslator, "cscript", vbTextCompare) = 0 Then
    blnIsConsole = True
Else
    blnIsConsole = False
 
End If
If objFS.FolderExists(strPath) Then
    For i = 0 To UBound(arrTargets)
        If objFS.FolderExists(arrTargets(i)) Then
            strExclusion = strExclusion & arrTargets(i) & ";"
        Else
            MsgBox "Не найдена папка-приёмник " & arrTargets(i), vbCritical, "Перемещение файлов"
            blnHasError = True
            Exit For
        End If
    Next
    If Not blnHasError Then
        Set objShell = CreateObject("Shell.Application")
        strTemp = CStr(Year(Date)) & Right("00" & CStr(Month(Date)), 2) & Right("00" & CStr(Day(Date)), 2)
        strLog = objFS.BuildPath(objFS.GetParentFolderName(WScript.ScriptFullName), strLog & "_" & strTemp & ".txt")
        Set objFile = objFS.OpenTextFile(strLog, 8, True)
        Call View_Folder(strPath)
        objFile.Close
        Set objFile = Nothing: Set objShell = Nothing
        WScript.Echo "Готово. Журнал - здесь: " & strLog
    End If
Else
    MsgBox "Не найдена папка-источник " & strPath, vbCritical, "Перемещение файлов"
End If
Set objFS = Nothing
WScript.Quit 0
 
'============================================================================================
 
Function View_Folder(strDir)
 
Dim objFolderItems, objItem, i
If InStr(1, strExclusion, strDir & ";", vbTextCompare) = 0 Then
    If blnIsConsole Then WScript.Echo "=== " & UCase(strDir) & " ==="
    On Error Resume Next
    For i = 0 To UBound(arrPatterns)
        Set objFolderItems = objShell.NameSpace(strDir).Items
        objFolderItems.Filter 64, arrPatterns(i)
        If objFolderItems.Count > 0 Then
            For Each objItem In objFolderItems
 
                objFS.MoveFile objItem.Path, arrTargets(i) & "\"
 
                If Err.Number = 0 Then
    Set objFS = CreateObject ("Scripting.FileSystemObject")
 
                    If blnIsConsole Then WScript.Echo  time & chr(9) & " " & " [ " & objItem & " ] " & chr(9) & " --> " & chr(9) & " [ " & arrTargets(i) & " ] " & chr(9) & " OK "
                    objFile.WriteLine time & chr(9) & " " & " [ " & objItem & " ] " & chr(9) & " --> " & chr(9) & " [ " & arrTargets(i) & " ] " & chr(9) & " OK "
                Else
                    If blnIsConsole Then WScript.Echo time & chr(9) & " " & " [ " & objItem & " ] "  & " ---> Ошибка при перемещении в " & chr(10) & arrTargets(i) & Err.Description
                    objFile.WriteLine time & chr(9) & " " & " [ " & objItem & " ] " & " ---> Ошибка при перемещении в " & " [ " & arrTargets(i) &  " ] " & chr(9) & " - ( " & Err.Description & " ) "
                    Err.Clear
                End If
 
            Next 
Else
            If blnIsConsole Then WScript.Echo strDir & " ---> Не найдено соответствий шаблону " & arrPatterns(i) 
 
        End If
    Next
 
    On Error GoTo 0
    For Each objItem In objFS.GetFolder(strDir).SubFolders
        Call View_Folder(objItem.Path)
    Next
    If blnIsConsole Then WScript.Echo "========="
End If
End Function
0
2619 / 549 / 109
Регистрация: 21.03.2012
Сообщений: 1,051
02.11.2017, 15:09
Цитата Сообщение от FlasherX Посмотреть сообщение
Там может быть не Печать, а Print. Я для этого нижний MsgBox и привёл на всякий...
В большинстве проверенных мною случаев "умолчальный" параметр ветки HKCR\htmlfile\shell\Print не имеет никакого значения, реже - значение &Печать. Однако наличие или отсутствие этого значения никак не коррелирует с наличием или отсутствием нужного глагола в контекстном меню HTML-файла (при любом варианте ассоциирования).
Цитата Сообщение от FlasherX Посмотреть сообщение
... в примере с FireFox было показано, что глагол отсутствует. Так и должно быть.
Речь шла не о том, как должно быть, а о том, есть ли связь между наличием искомого глагола и наличием подключа Print в соответствующей ветке реестра. Приведённые данные свидетельствуют, что в моих случаях такой связи опять-таки не наблюдается.
0
7001 / 2885 / 1110
Регистрация: 06.06.2017
Сообщений: 9,804
04.11.2017, 08:46
Цитата Сообщение от Dmitrii
В большинстве проверенных мною случаев "умолчальный" параметр ветки HKCR\htmlfile\shell\Print не имеет никакого значения
А HKCR\htmlfile? Может, он перенаправляет?
0
2619 / 549 / 109
Регистрация: 21.03.2012
Сообщений: 1,051
07.11.2017, 13:52
Цитата Сообщение от FlasherX Посмотреть сообщение
А HKCR\htmlfile?..
Строка HTML Document
0
7001 / 2885 / 1110
Регистрация: 06.06.2017
Сообщений: 9,804
07.11.2017, 16:54
Dmitrii, ладно, сойдёмся пока на меню. По реестру ещё были мысли, но пока не до этого.
0
Ответ Создать тему
Новые блоги и статьи
[golang] Worker Pool
alhaos 09.06.2026
Worker Pool Worker Pool — паттерн конкурентной обработки задач в Go. Суть: фиксированное количество горутин-воркеров читают задачи из общего канала и пишут результаты в общий канал результатов. . . .
[golang] Pipeline
alhaos 08.06.2026
Pipeline Pipeline — паттерн конкурентной обработки данных в Go. Суть: данные проходят через цепочку независимых стадий, каждая из которых работает в своей горутине и общается с соседями через. . .
Свет внутри себя
kumehtar 07.06.2026
Пусть это будет здесь lIs4oanZS9Y
Программа для com-порта
Uhbif79 05.06.2026
Всем привет, давно хотел изучить Qt, начинал, бросал, потом снова начинал. И сейчас вот смог написать свою первую программу. До этого имел опыт программирования микроконтроллеров, писал прошивки на. . .
Транскрипция 55-минутного видео через Whisper: WhisperDesktop облажался, спас Google Colab[
anaschu 01.06.2026
Понадобилось получить текст из свежезагруженного видео на YouTube. Казалось бы, задача на пять минут. Заняла полтора часа. Делюсь опытом — может кому пригодится последовательность решений. . . .
21 мат мед. Планы на развитие модели здравоСохранения
anaschu 01.06.2026
AnyLogic: план развития симуляционной модели рабочего коллектива — динамический абсентеизм, реальные данные, три сценария сравнения Продолжаю серию постов о дискретно-событийной модели рабочего. . .
20. Мат мед. Абсентеизм как отдельный тип простоя
anaschu 29.05.2026
Апдейт модели: исправленные баги, абсентеизм и новые механизмы Продолжаю развивать ранее описанную модель рабочего коллектива на AnyLogic. За последние несколько дней был проведён серьёзный. . .
19. здоровье, усталость и психотип работника влияют на производительность предприятия, и наоборот, производительность на здоровье, усталось и психотип
anaschu 28.05.2026
Дискретно-событийная модель рабочего коллектива на AnyLogic: здоровье, выгорание, психотипы и микростимуляция Привет, коллеги. Хочу поделиться итогами нескольких недель работы над симуляционной. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru