Это технически невозможно с C #.
Давайте представим следующую ситуацию. Предположим, вы успешно написали управляемое расширение, и оно «расширяет» любое контекстное меню текстового поля в системе. И, конечно, вы должны обрабатывать каждый новый пункт меню, который вы добавили. и для этого вам нужно внедрить свой управляемый код в каждый процесс, имеющий текстовое поле, и заменить его WindProc
. Хорошо, предположим, что в системе есть управляемое приложение, написанное для версии .net, отличной от версии, которую вы использовали для расширения. Таким образом, в этом случае вы получите критическую ошибку во время внедрения расширения, потому что на процесс может быть загружена только одна версия .net. Так что нет способа написать надежный управляемый низкоуровневый хук или расширение оболочки. С здесь :
Глобальные хуки не поддерживаются в
.NET Framework
За исключением
WH_KEYBOARD_LL низкоуровневый хук и
WH_MOUSE_LL низкоуровневый хук, вы не можете
реализовать глобальные хуки в
Microsoft .NET Framework. Чтобы установить
глобальный хук, хук должен иметь нативный
DLL экспорт, чтобы внедрить себя в другой
процесс, который требует действительного,
последовательная функция для вызова. это
поведение требует экспорта DLL.
.NET Framework не поддерживает DLL
экспорт. Управляемый код не имеет понятия
последовательного значения для функции
указатель, потому что эти функции
указатели являются прокси, которые построены
динамически.
Вызваны процедуры ловушек низкого уровня
на нити, в которой установлен крючок.
Крючки низкого уровня не требуют
процедура подключения должна быть реализована в
DLL.
Вы также можете проверить эту статью и выяснить, почему не следует писать расширения управляемой оболочки.