Замена класса окна во всей Windows - PullRequest
0 голосов
/ 14 января 2009

Мне нужно заменить один из предопределенных оконных классов по всей Windows. Например, я хотел бы заменить класс «EDIT», чтобы мое собственное поле редактирования использовалось всякий раз, когда любая программа Windows вызывает CreateWindowEx с «EDIT» в качестве аргумента имени класса.

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

1 Ответ

1 голос
/ 14 января 2009

То, что вы запрашиваете, т. Е. Изменение поведения класса «EDIT», видимого другими процессами, представляет собой угрозу безопасности и не так легко реализовать: например, http://msdn.microsoft.com/en-us/library/ms997565.aspx говорит: « Создание подклассов допускается только внутри процесса. Приложение не может создать подкласс для окна или класса, принадлежащего другому процессу."

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

Может ли API SetWindowsHookEx дать вам то, что вам нужно, вместо подклассов?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...