Для получения временного контроля над пользовательским интерфейсом 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 и примеры:




За творчество!! ))
(1) DoctorRoza, Спасибо!
Не думаю, что когда-нибудь пригодятся такие фокусы, но автор молодец!
(3) khaoos, эти фокусы всего лишь небольшая компенсация для себя, за то, что приходится иметь дело с 1С.
Спасибо, как раз то, что нужно.
Спрашивается, а нафига все это?
(6) dimetra2008, A вы делаете только то, за что можно поучить деньги?
(7)
Иногда бесплатно делаю.
Мне интересен практическое применение этого добра.
(8) dimetra2008, поиск подходов по динамическому изменению пользовательского интерфейса 1С.
(9)
Я думаю что 1С тож над этим работает… 😉
хорошее решение для обфускации пользовательского интерфейса =)
(11) Stim213, это не решение, a побочный продукт экспериментов с UI.
Забавно. Наверное, практического применения не имеет, но плюса публикация однозначно заслуживает.
Буду увольняться, скачаю)