Вход | Регистрация


1С:Предприятие ::

Метки: 

v7: Как подавить мелькание окна отправки на принтер при Таб.Напечатать(0)

Я
   Злопчинский
 
Ведущий
06.07.18 - 08:12
..собственно, сабж
?
 
 
   Карст
 
1 - 06.07.18 - 08:48
сохраняй файл и печатай скриптом
   Ray Zexter
 
2 - 06.07.18 - 09:06
скорее всего никак, это окно - часть Windows GUI. Даже если его прижать, скорее всего оно вылезет иначе.
   Злопчинский
 
Ведущий
3 - 06.07.18 - 10:20
(1) и каким скриптом печатать сохраненный моксель?
   Вафель
 
4 - 06.07.18 - 10:21
а чем они плохи? они же фокус не забирают. или ты в фоне печатешь по 1000 страниц?
   Злопчинский
 
Ведущий
5 - 06.07.18 - 10:24
(4) где-то удобнее вместо перекурочивания печформы отправлять на печать 100 одинаковых печформ в цикле (ну так сложилось исторически). окно и морготит...
   Вафель
 
6 - 06.07.18 - 10:30
(5) ну так в это время пользователь все равно не работает. А так видно что процесс идет, а не просто висит
   mehfk
 
7 - 06.07.18 - 10:48
(3) А если из них сгенерить ёкселем pdf-ки ?
   Злопчинский
 
Ведущий
8 - 06.07.18 - 11:12
(7) излишество явное.
и Йоксель просто так правильные пдфы не сгенерит, совпадающие по разметке с результатом печати мокселя.
   Djelf
 
9 - 06.07.18 - 13:00
(0) Сомневаюсь что можно. Никаких флагов по этому поводу тут не вижу: https://msdn.microsoft.com/en-us/library/w6afzd4h.aspx
Если кто-то найдет какой флаг нужно установить, могу  собрать йоксель с поддержкой такого поведения.

А как насчет того чтобы печатать через подключение по OLE?
   Злопчинский
 
Ведущий
10 - 06.07.18 - 13:13
"печатать через подключение по OLE" - ??? не понял.
вопрос в (0) некритичный, но интересный...
 
 
   Волшебник
 
11 - 06.07.18 - 13:14
Да пусть моргает... Пёс с ним
   Djelf
 
12 - 06.07.18 - 13:27
(10) Через V77.Application, печатать в другой сессии.
   d4rkmesa
 
13 - 06.07.18 - 13:59
(8) Актуальная платформа 8-ки весьма прилично сохраняет pdf-ки. Другое дело, что смысла в этом нет.
   MadDAD
 
14 - 06.07.18 - 20:08
(0) Решается патчем MFC42.dll 
MFC42.dll : 4613 (?OnFilePrint@CView@@IAEXXZ)  + 0x516 - заменить 05 на 00
   MadDAD
 
15 - 06.07.18 - 20:39
+(14) https://cloud.mail.ru/public/MC6Y/jVPC762So

Обработка для этого. Нужен DynWrapX.dll
   Злопчинский
 
Ведущий
16 - 07.07.18 - 00:15
О!
   Злопчинский
 
Ведущий
17 - 07.07.18 - 00:22
(15) что-то где-то у меня в памяти что есть какие-то разные DynWrapX.dll ..?
   Salimbek
 
18 - 07.07.18 - 09:22
   Djelf
 
19 - 07.07.18 - 17:30
(14) Это конечно хорошо, но недостаточно ;(
Этих версий mfc42.dll тьма тьмущая и в какой из них по 0x516 находится 0х05 я пока не нашел.
   MadDAD
 
20 - 07.07.18 - 18:46

   MadDAD
 
21 - 07.07.18 - 18:51
(19) сообщение съелось.
Моя обработка на твоей версии MFC отработала?

Надо искать от начала процедуры CView::OnFilePrint() по смещению 0x516. Там вызов CWnd::ShowWindow(nCmdShow), захардкоден параметр SW_SHOW

(17) Я  использовал отсюда - http://forum.script-coding.com/viewtopic.php?id=5341
   MadDAD
 
22 - 07.07.18 - 18:54
(21) ординал CView::OnFilePrint() - 4613.

Я ищу процедуру по ординалу, беруадрес по смещению  0x516 от найденного и если там 05 - меняю на 0 - SW_HIDE.

Т.е. окно создается, но невидимое.
   Djelf
 
23 - 07.07.18 - 19:04
(22) Отличное решение!
(19) Заработало на mfc42.dll 6.6.8063.0 от 19.10.2016. Размер 1,08 МБ (1 136 640 байт)
На mfc42.dll (той же версии) в составе W10х64 вылетает.
   Злопчинский
 
Ведущий
24 - 07.07.18 - 22:26
а оформить это ВК-шкой можно, чтобы тонны скрипта не писать в конфигах?
   MadDAD
 
25 - 08.07.18 - 01:28

   Djelf
 
26 - 08.07.18 - 12:13
(24) ВК ПрогрессПечати https://cloud.mail.ru/public/HM9C/MEXK9QY9G (вк, ert, sqc);


(25) Сделал поиском по паттерну "FFFF6A058D"

Если на какой то mfc42.dll не сработает - давайте ее сюда.
   Злопчинский
 
Ведущий
27 - 08.07.18 - 23:44
(26) Взял, постараюсь завтра запустить в работу
   MadDAD
 
28 - 09.07.18 - 07:54
(25) MistaReader не постит сообщения.

(24) Я писал что есть уже пропатченная библиотека. Навсегда отключено окно.
   MadDAD
 
29 - 09.07.18 - 07:55
(26) Круто! от вопроса до готовой ВК - полтора суток :)
   MadDAD
 
30 - 09.07.18 - 08:07
Кстати есть похожее решение для проблемы обрезанного до 63 символов имени файла в ФС.ВЫбратьФайл().
   Злопчинский
 
Ведущий
31 - 09.07.18 - 09:35
(29) патамушта правильно поставленный Злопчинским вопрос уже содержит половину ответа!
   Злопчинский
 
Ведущий
32 - 09.07.18 - 09:58
(30) ??
   ADirks
 
33 - 09.07.18 - 10:07
(30), (32)
недавно с удивлением наткнулся... почесав репу вспомнил про svcsvc
    svcsvc = СоздатьОбъект("Svcsvc.Service");
    ИмяФайла = svcsvc.SelectFile(0, "", "Картинки|*.jpg;*.jpeg;*.bmp;*.gif;*.tif;*.tiff");
    Если ПустаяСтрока(ИмяФайла) = 1 Тогда
        Возврат;
    КонецЕсли;
 
  Рекламное место пустует
   trad
 
34 - 09.07.18 - 10:10
чтобы не корячить общесистемную mfc42
можно рядом 1cv7s.exe (1cv7.exe) создать папку 1cv7s.exe.local (1cv7.exe.local)
скопировать туда mfc42.dll и надругаться над копией
   MadDAD
 
35 - 09.07.18 - 12:10
(34) Так оно же для каждого процесса отдельно грузит и при патче, прочие не трогает.
   MadDAD
 
36 - 09.07.18 - 12:11
(32) Патч SEVEN.dll по смещению 220CDA68,  заменить 34 на 30.

Будет возвращаться полный путь с каталогом, но зато не обрезанный.
   MadDAD
 
37 - 09.07.18 - 12:17
(36) Заменяем вызов CFileDialog::GetFileName() на CFileDialog::GetPathName().
   Вафель
 
38 - 09.07.18 - 12:18
(28) Переходи на реакт.миста
   trad
 
39 - 09.07.18 - 12:19
(35) при патче в памяти - да.
но можно пропатчить и положить отдельно сам файл.
дополнительный бонус - не зависим от исходного файла.
   MadDAD
 
40 - 09.07.18 - 12:21
(39) Это да. Я обычно просто рядом складываю.
   Злопчинский
 
Ведущий
41 - 10.07.18 - 03:37
(34) не понял. а что дает что в папке 1cv7.exe.local
будет лежать поруганный mfc42.dll ...?копией
   Злопчинский
 
Ведущий
42 - 10.07.18 - 03:38
(26) Поставил в продакшен. если сегодня с утра не дернут - то будет ок...
   trad
 
43 - 10.07.18 - 07:47
(41) дает то, что не надо портить файл в system32
   MadDAD
 
44 - 10.07.18 - 09:38
(43) Ну почему сразу портить? :) Кому оно нужно, это окошко?
   trad
 
45 - 10.07.18 - 13:12
(44) mfc42 - системная библиотека. Используется не только 1cv7
   trad
 
46 - 10.07.18 - 13:13
* не только в 1cv7
   Злопчинский
 
Ведущий
47 - 10.07.18 - 17:59
(43) а откуда система знает что надо брать файл из ближней папки к 1С?
   Злопчинский
 
Ведущий
48 - 10.07.18 - 18:00
(26) Пока работает, не жалуются. Экран все равно подмаргивает, но работает все побыстрее...
.
а в чем скрытый смысл ПерегрзитьФорму()...? что-то я не просек...
   Djelf
 
49 - 10.07.18 - 18:22
(48) А мну запаривает 100 раз нажимать Файл/Открыть ;)

Можно вообще вырубить создание окна и его обновление.
Или вообще переписать код этой процедуры и всю перехватить ее полностью. Исходники то есть... Не то что у 7ки ;(
 
  Рекламное место пустует
   trad
 
50 - 10.07.18 - 20:14
(47) так прописано в алгоритме винапишной функции loadlibray
   Злопчинский
 
Ведущий
51 - 10.07.18 - 22:20
(50) а откуда система знает что эта пакап ближняя?
   trad
 
52 - 10.07.18 - 22:44
забей. Не грузись



Список тем форума
  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует