gifts2017

Делаем “управляемые” и обычные формы неуправляемыми

Опубликовал slimper (slimper) в раздел Программирование - Практика программирования

По мотивам недавней публикации http://infostart.ru/public/140057/. Доводим идею публикации до логического завершения, т.е. до полной противоположности.

Для получения временного контроля над пользовательским интерфейсом 1С нам необходимо знать текущие координаты указателя мыши, и  дескриптор окна, под указателем.  Получить текущие координаты указателя, можно применив стандартный прием, установив низкоуровневый hook на перемещения мыши.  В определении дескриптора окна под указателем нам поможет функция WindowFromPoint. Теперь с данным окном можно выполнить некоторые манипуляции, изменив его внешний вид и поведение.

 Из всего разнообразия окон 1С выберем следующие классы:

V8FormElementнаиболее распостраненный вид  (текстовые поля, метки, списки, и.т.д);

V8MDILocalFrameглавное окно в 8.1 и 8.2 (MDI интерфейс);

V8TopLevelFrameSDI, V8TopLevelFrameSDIsec – окна верхнего уровня 8.2 (SDI интерфейс).

Чтобы изменить внешний вид окна, воспользуемся парой функций -  GetWindowLong (считывает биты стиля)  и  SetWindowLong (устаналивает биты стиля).  Для получения эффекта «зеркальное отражение» - отображение текста справа налево, нужно всего лишь установить бит стиля WS_EX_LAYOUTRTL. Стереть элемент управления можно, обнулив бит стиля WS_VISIBLE или при помощи функции MoveWindow, установив ширину и высоту окна равными 0. Эффекты «разбегания» и «дрожания» элементов управления, при наведении на них указателя мыши можно реализовать при помощи все той же функции MoveWindow.

 Для окон верхнего уровня эффект «прозрачности» можно получить следующим образом – устанавливаем бит стиля WS_EX_LAYERED, затем вызываем функцию SetLayeredWindowAttributes. Причем, если до вызова этой функции  не был установлен бит WS_EX_TRANSPARENT, c  окном  можно работать в обычном режиме, несмотря на его «прозрачность», в противном  случае указатель мыши будет «проваливаться» на окна лежащие ниже по Z-координате.

 В файле находится приложение, реализующее, описанные эффекты. Для его работы необходим Net Framework 2.0.

 Пример установки hook в среде .Net :

http://www.codeproject.com/Articles/7294/Processing-Global-Mouse-and-Keyboard-Hooks-in-C

 Объявления функций API и примеры:

http://www.pinvoke.net/

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

Наименование Файл Версия Размер
Hook 21
.rar 27,32Kb
30.06.12
21
.rar 27,32Kb Скачать

См. также

Подписаться Добавить вознаграждение
Комментарии
1. Алексей Роза (DoctorRoza) 01.07.12 13:14
2. slimper (slimper) 01.07.12 14:14
3. Василий Антонов (khaoos) 02.07.12 05:01
Не думаю, что когда-нибудь пригодятся такие фокусы, но автор молодец!
4. slimper (slimper) 02.07.12 06:57
(3) khaoos, эти фокусы всего лишь небольшая компенсация для себя, за то, что приходится иметь дело с 1С.
5. StronG-X (Dethmond) 03.07.12 20:15
Спасибо, как раз то, что нужно.
6. Дмитрий Николайчук (dimetra2008) 04.07.12 05:45
Спрашивается, а нафига все это?
7. slimper (slimper) 04.07.12 06:19
(6) dimetra2008, A вы делаете только то, за что можно поучить деньги?
8. Дмитрий Николайчук (dimetra2008) 04.07.12 06:26
(7) slimper,
Иногда бесплатно делаю.
Мне интересен практическое применение этого добра.
9. slimper (slimper) 04.07.12 06:46
(8) dimetra2008, поиск подходов по динамическому изменению пользовательского интерфейса 1С.
10. Дмитрий Николайчук (dimetra2008) 04.07.12 07:47
(9) slimper,
Я думаю что 1С тож над этим работает... ;)
11. Павел Колмаков (Stim213) 04.07.12 11:22
хорошее решение для обфускации пользовательского интерфейса =)
ilov_boris; +1 Ответить 1
12. slimper (slimper) 04.07.12 12:12
(11) Stim213, это не решение, a побочный продукт экспериментов с UI.
13. igor sarafanov (ms200999) 05.07.12 08:28
Забавно. Наверное, практического применения не имеет, но плюса публикация однозначно заслуживает.
14. Эдуард Неженцев (ErrorEd88) 09.07.12 16:55
Буду увольняться, скачаю)
ilov_boris; +1 Ответить