gifts2017

"Захват окон" - ActiveX-компонента для 1С

Опубликовал Василий Демидов (Душелов) в раздел Программирование - Внешние компоненты

Захватывает открытые окна и помещает их в 1С, так же получает скриншот выбранного окна.

Хотите играть в пасьянс в 1С, смотреть кино или просматривать секретные документы ;)
и не светить эти окна на рабочем столе, тогда эта компонента для Вас :)

*** Для работы компоненты потребуется установленный Microsoft .NET Framework 2.0, который можно скачать отсюда.

и зарегистрировать компоненту в Windows - запустить reg.bat
(для удаления информации о компоненте в Windows - запустить unreg.bat)
или использовать совместно с хранилищем внешних компонент: http://infostart.ru/projects/2863/

В архиве приложены примеры для 7.7 и 8.1

*** Добавление на форму 1С:

v7: Использовать 1С++:

Перем ЗахватОкон;
Процедура ПослеОткрытия() ЗахватОкон = СоздатьОбъект("АктивИкс"); 
    ЗахватОкон.УстановитьАтрибут(Форма, "АктХ"); 
    //"АктХ" - идентификатор элемента диалога, на месте которого будет создан элемент ActiveX. 
//только для реквизитов диалога типа "Текст".
ЗахватОкон.СоздатьЭУ("Душелов.WinHost1C"); ЗахватОкон.УстановитьФокус(); КонецПроцедуры


v8: Меню "Форма" - "Вставить ActiveX..." - Выбрать элемент "Душелов.WinHost1C"

*** Методы:

//ВОССТАНОВИТЬ ВСЕ ЗАХВАЧЕННЫЕ ОКНА:
 
   ВосстановитьОкна();

//ПОЛУЧИТЬ СПИСОК ОТКРЫТЫХ ОКОН (Массив):

   ПолучитьСписокОткрытыхОкон(Фильтр); //фильтр - строка для фильтрации в заголовке 
   //возвращает в виде строки: Заголовок окнаИдентификатор процессаПуть к exe-файлу процесса 

//ПОЛУЧИТЬ СПИСОК ОТКРЫТЫХ ОКОН (Строка с разделителями): 

   ПолучитьСписокОткрытыхОконСтрокой(Фильтр); //фильтр - строка для фильтрации в заголовке 
   //возвращает в виде строки: Заголовок окнаИдентификатор процессаПуть к exe-файлу процесса 

//ЗАХВАТИТЬ ОТКРЫТОЕ ОКНО: 

   ЗахватитьОкно(ЗаголовокОкна);
   ЗахватитьОкноПоPID(PID);

//СКРИНШОТ ОКНА: Скриншот(ЗаголовокОкна, ПутьКФайлу);

   СкриншотПоPID(PID, ПутьКФайлу);

//МЕНЮ:
  
   ПоказатьМеню();
   СкрытьМеню();

//АКТИВАЦИЯ ОКНА:

   АктивироватьОкно(ЗаголовокОкна);
   АктивироватьОкноПоPID(PID);

//ЗАКРЫТЬ ОКНО:

   ЗакрытьОкно(ЗаголовокОкна);
   ЗакрытьОкноПоPID(PID);

//ВОССТАНОВИТЬ ОКНО:

   ВосстановитьОкно(ЗаголовокОкна);
   ВосстановитьОкноПоPID(PID);

Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
Полная версия
.1234947992 95,33Kb
03.10.09
152
.1234947992 95,33Kb 152 Бесплатно

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Василий Демидов (Душелов) 20.11.08 14:27
Вообщем, режим "АнтиБосс" ;)
2. Андрей Скляров (coder1cv8) 20.11.08 14:35
Прикольно! Но бесполезно... )
А можешь сделать ВК что-бы она выбранное окно принтскринила?... )
3. Василий Демидов (Душелов) 20.11.08 14:38
(2) Ну почему же бесполезно? Я на позапрошлом месте работы использовал аналог для сокрытия оперы, а то когда подходили к компу - много чего левого можно было в заголовках окон увидеть ;)))

Ну запринтскринить -то можно, если оно открыто, а если закрыто другим приложением, тогда врядли....
4. Андрей Скляров (coder1cv8) 20.11.08 14:44
(3) В смысле принтскринить в файл, пофиг, с активизацией окна!...
Типа так:
ВК.ПринтскринВФайл(ПИДПроцессаОкна, ПутьКФайлу)
Но это я так, мечтаю... Кроме плюса предложить нечего )
А со всякими существующими длл-ками, типа V7ICQ.dll у меня лично, проблемы...
5. Василий Демидов (Душелов) 20.11.08 17:16
(4) Да в целом можно.... Так же по заголовку, активировать его, определить координаты и запринскринить выбранный диапазон.
6. Сергей Лунев (luns) 20.11.08 18:26
(0) Ай молодец, сколько интересных идей...
7. Сhe Burashka (CheBurator) 20.11.08 18:34
Душелов жжот!
+1
.. а закладочки в 7-ке тоже будут?
.. чат - дорабатывается?
8. Василий Демидов (Душелов) 20.11.08 18:37
(7) С чатом пока взял перерыв... То, на практике его использовал, а чисто теоретически дорабатывать - не интересно...
Скрин 7.7 сейчас сделаю и выложу.
9. Василий Демидов (Душелов) 20.11.08 18:54
10. H A D G E H O G s (Hadgehogs) 23.11.08 00:58
(4) Чего, Нетленку уже отменили?
11. Василий Демидов (Душелов) 23.11.08 01:13
12. Василий Демидов (Душелов) 23.11.08 01:54
Добавил функцию получения скриншота. Пока в таком виде...
13. Андрей Скляров (coder1cv8) 23.11.08 08:08
(12) Спасибо. Но, лично мне, по PID-у нужно... )
(10) Будем смотреть! )
14. Василий Демидов (Душелов) 23.11.08 13:13
(13) Добавил:
- Получение списка открытых окон - возвращает в виде строки: <title>Заголовок окна</title><pid>Идентификатор процесса</pid><path>Путь к exe-файлу процесса</path>
- ЗахватитьОкноПоPID(PID);
- СкриншотПоPID(PID, ПутьКФайлу);
15. Андрей Скляров (coder1cv8) 23.11.08 13:22
(14) Класс! Спасибо огромное!!!
16. Василий Демидов (Душелов) 23.11.08 13:27
(15) Единственное, с чем я не стал заморачиваться - когда окон развернутое на весь экран, я просто делаю полный скриншот, не вычисляю размер окна.
17. Сергей (skom) 25.11.08 13:26
)))) вот это прикол под конец раб дня.....
Антибосс))
клева...
тока скачал. сегодня присоединить уже не успею. завтра побалуюсь.
но идейка зачет
19. Сергей (skom) 25.11.08 13:26
сорри за дубль...два раза даванул. модеры - убейте дубль и этот мессаг плиз
20. Роман Осадченко (cleaner_it) 28.11.08 10:43
Когда располагаю на другом в закладке - фокус не устанавливается. Хотя окно "живое" - то есть отображаются все действия. А мышкой тыкнуть не моги. Еще помучаюсь, может у меня косяк
21. Роман Осадченко (cleaner_it) 28.11.08 10:44
(20) на другом слое, конечно. в 7.7
22. Василий Демидов (Душелов) 28.11.08 10:55
(20-21) Ок, сейчас при себе исходников нет, дома посмотрю. Проблему воспроизвел.
23. Дмитрий (Froloid) 05.12.08 00:34
Добрался наконец-то до нужной странички. Душелову однозначно +
24. Василий Демидов (Душелов) 05.12.08 00:35
25. Василий Демидов (Душелов) 09.12.08 11:19
(20) что 7-ка, что 8-ка таким образом перехватывают окна, так что победить эту проблему не могу. На других платформах этой проблемы нет.
26. HotShot Nemesis (HotShot) 15.12.08 09:57
Очень удобная компонента. Каким методом можно автоматически перейти на вновь захваченное окно?
27. Василий Демидов (Душелов) 15.12.08 09:58
(26) Т.е. активировать нужную закладку?
28. HotShot Nemesis (HotShot) 15.12.08 10:04
Необходимо автоматически активировать закладку с захваченным окном... и скрыть закладку меню, что бы не вводить пользователя в заблуждение.
29. Андрей (Solemn) 15.12.08 10:04
(27) ага, и мне тож это нужно очень
30. Василий Демидов (Душелов) 15.12.08 11:00
Добавлено:

Код
//МЕНЮ:
  
   ПоказатьМеню();
   СкрытьМеню();

//АКТИВАЦИЯ ОКНА:

   АктивироватьОкно(ЗаголовокОкна);
   АктивироватьОкноПоPID(PID);
Показать полностью
31. HotShot Nemesis (HotShot) 15.12.08 11:05
Спасибо... Буду пробовать.
32. Андрей (Solemn) 15.12.08 11:15
33. HotShot Nemesis (HotShot) 16.12.08 11:10
Добрый день.
Дополнительные методы сильно упростили задачу разработки.
Однако, встала проблема программного закрытия приложения... Возможно ли интегрировать метод закрытия захваченного приложения по PID?
34. Василий Демидов (Душелов) 16.12.08 11:16
Спасибо в стакан не нальешь ;)

(33) Сейчас напишу метод закрытия окна с восстановлением или без.
35. Василий Демидов (Душелов) 16.12.08 11:48
Написать-то написал... Вот только обновить разработку не могу... :(
36. Василий Демидов (Душелов) 16.12.08 11:59
Добавлено:

Код
//ЗАКРЫТЬ ОКНО:

   ЗакрытьОкно(ЗаголовокОкна);
   ЗакрытьОкноПоPID(PID);

//ВОССТАНОВИТЬ ОКНО:

   ВосстановитьОкно(ЗаголовокОкна);
   ВосстановитьОкноПоPID(PID);
Показать полностью


Скачать пока тут: http://dushelov.ru/1c/WinHost.zip
37. Dmitry (trdm) 23.01.09 17:46
А можно на каком-нить менее ресурсоемком фраймверке сделать?
А то не очень хочется на серваке фраймверки городить?
Или хоть подсказку какую для имплементации?
38. Василий Демидов (Душелов) 26.01.09 12:06
(37) > можно на каком-нить менее ресурсоемком фраймверке сделать?
На каком?
39. Dmitry (trdm) 26.01.09 14:04
(37)>> можно на каком-нить менее ресурсоемком фраймверке сделать?
(38)>На каком?
WTL/ATL например?
40. Dmitry (trdm) 26.01.09 14:04
Хоть они и не фраймверки :)
41. Василий Демидов (Душелов) 13.02.09 19:34
Для получения демо-версии или покупки обращайтесь по контактам, указанным в профиле.
42. dushelov (Душелов) 18.06.09 17:53
Снова в бесплатном доступе :)
43. Andrey (liooo) 04.08.09 01:34
Как определить программно что приложение захвачено компонентой???
44. Аркадий Кучер (Abadonna) 04.08.09 03:15
(0)"Хотите играть в пасьянс в 1С, смотреть кино или просматривать секретные документы ;)"
Вась, а что, пасьянс внутри 1С пасьянистее становится? ;))))
Как проггер понимаю, как юзер - на ... оно надо?
45. dushelov (Душелов) 04.08.09 11:03
(43) Храните список захваченых приложений.

(44) :) иногда надо скрывать лишние окна ;)
46. Аркадий Кучер (Abadonna) 04.08.09 11:53
Стал быть примерно так?:
procedure TMiracleClass.CaptureAimp;
var wnd:hwnd;
begin
wnd:=FindWindow('TAIMP2Main',nil);
if isWindow(wnd) then begin
SetParent(wnd,h1C);
end;
end;
Могу приватно подарить коды WM_COMMAND для управления Aimp прям из 1С ;)
Для особых извращенцев :)))))))))
47. Andrey (liooo) 04.08.09 12:24
Abadonna
Я такой извращенец, а точнее руководство!!! Необходимо запустить эту прогу http://www.thebrain.com/ на форме списка справочника и показать графические связи элементов, а потом изменить данные в 1С, если изменили связи в этой приблуде, так что коды WM_COMMAND для управления Aimp -- это для меня ;)
dushelov
У меня нет списка захваченных, я запускаю приложение и пытаюсь его захватить, но захват отрабатывает до открытия этой проги, поэтому надо организовать цикл проверки захвата, а ни один метод по захвату не возвращает никакого значения
48. dushelov (Душелов) 04.08.09 12:28
А что он должен возвращать?
49. Andrey (liooo) 04.08.09 12:57
решил все циклом с получением списка запущенных и нахождением в списке нужного, спасибо
50. Аркадий Кучер (Abadonna) 04.08.09 14:20
(48)>А что он должен возвращать?
По уму - хэндл ;)))))
51. dushelov (Душелов) 04.08.09 14:29
(50) Скорее ПИД, хэндл для 1С-ы не нужен.
52. Аркадий Кучер (Abadonna) 04.08.09 14:34
(51) Зато его наличие гарантирует, что захват произошел.
А на хрена 1С-е PID? Мочить при выходе?
53. dushelov (Душелов) 04.08.09 14:35
(52) У меня методы есть, которые по пиду работают ;)
54. Аркадий Кучер (Abadonna) 04.08.09 14:36
(53) Хэндл ВСЕГДА PID даст, а вот по PIDу хэндл - сложнее ;)))
55. Andrey (liooo) 06.08.09 01:54
Abadonna
(46) подари коды WM_COMMAND для управления Aimp прям из 1С
56. Ийон Тихий (cool.vlad4) 10.02.11 14:08
(0) Вопрос возник...как это все работает не разбирался...хочется сделать следующую штуку - надоело работать с консолью кода без подсказок. Возникла мысль сделать захват конфигуратора, затем перехват кода, текста и передача в консоль. Поможет ли мне эта ActiveX?
57. Михаил Гомбоев (yoyoman) 16.03.12 10:00
У меня зависает при использовании нескольких вкладок. Если на второй вкладке добавить этот элемент управления, сделать захват. И переключиться на первую вкладку - все вылетает :(
58. Дмитрий Павлик (DimaP) 14.08.12 16:05
А можно-ли этой компонентой ловить окна внутри самой 1С?
Например, стандартные формочки (список значений, ввод значения и т.д.)
59. Александр Алюев (alyuev) 17.12.12 20:03
Вопрос. Как сделать открытие приложения внутри самой 1С? Запомнить ПИДы запущенных приложений до запуска нужного и после запуска найти новое открытое?
60. Александр Алюев (alyuev) 01.04.13 18:37
Я воспользовался твоей компонентой захвата окон - захватываю по имени файла. Работает отлично. Но не могу найти свойство закрытия вкладки програмно. Буду очень признателен за помощь. Спасибо.
61. smaharbA (smaharbA) 01.04.13 19:08
мальчоник если чо эта фигня реализовывается и без вк
62. Александр Алюев (alyuev) 01.04.13 23:21
(61) Сотрясение воздуха не приветствуется, а конструктив - да.
63. Ризван Шихамматов (dagroma) 29.07.16 21:27
А кто-нибудь может поделиться последней версией компоненты?
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа