Основы сабклассинга

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Diamock
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 388
Зарегистрирован: 26.10.2009 (Пн) 4:19
Откуда: Кемерово

Основы сабклассинга

Сообщение Diamock » 02.04.2011 (Сб) 15:16

Здравствуйте Уважаемые!
Однажды,я пожаловался в этой теме, что немогу понять основ сабклассинга. Ответ был дан, размытый конечно, но в общем понятный. Вооружившись поисковиками и словарями, я принялся за поиски и нашёл множество различной информации. Что из этого получилось, я хочу привести здесь и получить комментарии и исправления, если я что-то неправильно понял.

Windows – операционная система, основанная на сообщения и событиях. Это означает, что каждое действие вызывает событие, передающееся в виде сообщения в приложение. Приложение анализирует сообщение и выполняет соответствующее действие.

В операционной системе, пользователь может работать одновременно с несколькими приложениями. Например, может редактировать текст в текстовом редакторе, и переключится в программу обработки электронных таблиц, выполнить расчёты. Поэтому ни одно приложение не может функционировать само по себе, не взаимодействуя с другими приложениями и операционной системой. Вышестоящее приложение или операционная система, должны сообщить, что происходит и только тогда, приложение реагирует.

Предположим, в операционной системе выполняются два приложения. Ни одно из них, не может перехватить инициативу и среагировать на нажатие клавиш клавиатуры, потому что это событие может быть предназначено другому приложению. Поэтому Windows сначала воспринимает событие, вызванное нажатием клавиш, а затем решает, кому передать обработку этого события. Затем нажатие клавиш в виде сообщений посылается приложению. Приложение обрабатывает события, связанные с клавиатурой.

Разумеется, такое представление является упрощённым. Обычно, при обработке нажатия клавиш, вызывается значительно больше сообщений и событий.

Кроме сообщений связывающих пользователя с приложениями операционной системы, существуют и внутренние сообщения Windows. Они служат для обновления времени и даты, для сообщения изменений о состоянии или исчерпании системных ресурсов.

Технология сабклассинга и хука, основана на сообщениях, которыми обменивается операционная система. С их помощью, можно управлять, изменять или удалять сообщения, посланные приложениям операционной системы, тем самым изменив их реакцию. Поэтому, полное понимание сообщений операционной системы (Windows Message) – является основополагающим при изучении методов сабклассинга и хука.

Не стоит забывать, что пользоваться сабклассингом и хуком надо осторожно. Не правильное применение этих методов может вызвать, как падение приложения, так и всей операционной системы в целом.

Сабклассинг (Subclssing)

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

Перехватывая сообщения, мы получаем гибкий инструмент для управления окнами и элементами управления операционной системы. Например, щелкнув правой кнопкой мыши в элементе управления Visual Basic – TextBox, мы увидим контекстное меню элемента управления, выводимое по умолчанию.

Замена контекстного меню TextBox, собственным меню – является одним из простейших примеров применения сабклассинга. Но у сабклассинга, существует и множество других применений:

    Определение активности или неактивности окна и изменение его состояния.
    Реагирование на добавленные в системное меню окна новые пункты.
    Запрет на действия пользователя на манипуляции с окном.
    Разрешения на изменение пользователем размеров окна, в пределах указанных параметров.
    Изменение вида окна или элемента управления.
    Изменение размеров списка элемента управления ComboBox.
    Изменение или блокирование сообщений передаваемых окну или элементу управления.
    Мониторинг за системными ресурсами операционной системы.
    Изменение стандартного вида окна или элемента управления.

Сабклассинг открывает многообразие возможностей разработчику на Visual Basic – возможности, которые обычно недоступны или труднореализуемы. Существует три типа сабклассинга, которые мы будем обсуждать.

Первый: сабклассинг экземпляра – позволяет перехватить сообщение для единственного экземпляра окна или элемента управления. Этот вид сабклассинга наиболее используемый, он, например, позволяет определить размеры экземпляра окна.

Второй: глобальный сабклассинг – позволяет перехватывать сообщения для одного или более окон или элементов управления. Все окна, происходят из одного типа класса, эти классы описывают фундаментальный вид и поведение окон, производных от них. Например, стандартная кнопка, каждый экземпляр этого элемента управления – производная от класса BUTTON. Используя глобальный сабклассинг, мы можем изменить поведение целого класса. Это позволяет перехватывать сообщения для всех окон или элементов управления, производных из этого класса. Используя глобальный сабклассинг можно управлять возможностью изменить любое окно или элемент управления, производный от класса.

Третий: суперклассинг – является аналогом глобального сабклассинга. У суперклассинга, также есть возможность перехвата сообщений для одного или более окон или элементов управления. Различие – при суперклассинге, создаётся абсолютно новый класс.

Хук (Hook)

Технология хука, подобно сабклассингу основана на перехвате сообщений операционной системы, но в более широком смысле. Хук позволяет перехватить сообщение, как до обработки его окном, так и после.

Есть несколько видов хука, каждый предназначен для определённой цели:

    WH_CALLWNDPROC
    WH_CALLWNDPROCRET
    WH_CBT
    WH_DEBUG
    WH_FOREGROUNDIDLE
    WH_GETMESSAGE
    WH_JOURNALPLAYBACK
    WH_JOURNALRECORD
    WH_KEYBOARD
    WH_KEYBOARD_LL
    WH_MOUSE
    WH_MОUSE_LL
    WH_MSGFILTER
    WH_SYSMSGFILTER
    WH_SHELL

У хука, в отличие от сабклассинга, областью действия может быть одно приложение или область контекстов устройств, общее для нескольких приложений. Этим подразумевается – хук может перехватить сообщение для одного приложения, или общее сообщение для нескольких приложений работающих в операционной системе. Хук, даёт контроль над операционной системой, невозможный получить при помощи сабклассинга.

Вот несколько примеров использования хука:

    Изменение сообщения, отправленного диалоговым окнам, полосам прокрутки, меню.
    Сабклассинг окна, находящегося в отдельном процессе.
    Перехват и изменение сообщений мыши или клавиатуры на уровне системы.
    Установка горячей клавиши справки, для пунктов меню.
    Создание утилиты, подобной Spy++.
    Создание автоматизированного приложения тестирования.
    Определение состояния приложение – активно или неактивно.
    Изменение кнопок мыши и нажатий клавиш для определенного приложения, или для всех приложений.
    Изменение функциональности сочетания клавиш ALT+TAB и ALT+ESC.

С уважением...
In der Beschrankung zeigt sich erst der Meister
Графоманю...

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Основы сабклассинга

Сообщение Хакер » 02.04.2011 (Сб) 16:39

Количество ошибок зашкаливает.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Diamock
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 388
Зарегистрирован: 26.10.2009 (Пн) 4:19
Откуда: Кемерово

Re: Основы сабклассинга

Сообщение Diamock » 02.04.2011 (Сб) 16:45

Хакер писал(а):Количество ошибок зашкаливает.

Очень хочу узнать какие и где ошибки?
In der Beschrankung zeigt sich erst der Meister
Графоманю...

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Основы сабклассинга

Сообщение Хакер » 02.04.2011 (Сб) 20:57

О каких именно? Здесь куча грамматических ошибок, куча пунктуационных шибок, куча некорректных формулировок, куча нарушений причинно-следственных связий и отношений владелец-подчинённый. И несколько глобальных заблуждений.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

NeverGone
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 107
Зарегистрирован: 11.11.2007 (Вс) 21:05
Откуда: Москва

Re: Основы сабклассинга

Сообщение NeverGone » 02.04.2011 (Сб) 23:25

[Хакер] :: Здесь не место для оффтопика.

Diamock
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 388
Зарегистрирован: 26.10.2009 (Пн) 4:19
Откуда: Кемерово

Re: Основы сабклассинга

Сообщение Diamock » 03.04.2011 (Вс) 5:43

Об ошибках, хотелось бы узнать в сдедущем порядке:

    1). Некорректные формулировки: какие, почему и как правильно?
    2). Нарушения. Причинно-следственные и владелец-подчинённый.
    3). Глобальные заблуждения.
С грамматикой и пунктуацией буду разбираться сам.

О чём уже знаю:

  • Windows не основана на сообщениях и событиях. Windows основана на IRP. На сообщениях основана оконная подсистема, а события вообще не имеют никакого отношения к взаимодействию пользователя с окном.
  • Классы окон не являются частью какой-то иерархии, от них окна ничего не наследуют. Каждый класс связан со своей оконной функцией, в которой и реализуется логика класса.
  • При суперклассинге создается не абсолютно новый класс, а класс, аналогичный стандартному, за исключением имени и указателя на образ.

С уважением...
In der Beschrankung zeigt sich erst der Meister
Графоманю...

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Re: Основы сабклассинга

Сообщение BV » 03.04.2011 (Вс) 13:58

Это наиболее грубые ошибки, Diamock. Как только их исправишь, тебе придется взяться за все "поэтому" в этой статье.
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

Diamock
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 388
Зарегистрирован: 26.10.2009 (Пн) 4:19
Откуда: Кемерово

Re: Основы сабклассинга

Сообщение Diamock » 03.04.2011 (Вс) 14:05

BV писал(а):Это наиболее грубые ошибки, Diamock. Как только их исправишь, тебе придется взяться за все "поэтому" в этой статье.

Приму к сведению, и продолжу разбираться.
In der Beschrankung zeigt sich erst der Meister
Графоманю...

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Основы сабклассинга

Сообщение Хакер » 03.04.2011 (Вс) 14:24

Diamock писал(а):Windows основана на IRP.

Только в части общения IO-подсистемы с драйверами.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Diamock
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 388
Зарегистрирован: 26.10.2009 (Пн) 4:19
Откуда: Кемерово

Re: Основы сабклассинга

Сообщение Diamock » 03.04.2011 (Вс) 14:30

Хакер писал(а):Только в части общения IO-подсистемы с драйверами.

Спасибо за уточнение.
In der Beschrankung zeigt sich erst der Meister
Графоманю...


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot, Google-бот и гости: 94

    TopList