Изменение глобальных системных меню
Есть ли способ в C# глобально добавить пункт меню ко всем системным меню во всех активных окнах? Возможно, под командой "Развернуть"?
2 ответа
Это не может быть сделано в управляемом коде. И это было бы удивительно сложно даже в неуправляемом коде. По сути, вам придется внедрять свой код в каждый процесс, а затем вставлять элементы в меню локальной системы, а затем подключать процедуру главного окна для перехвата сообщений WM_SYSCOMMAND, чтобы вы могли заставить элементы меню что-то делать.
Вы МОЖЕТЕ написать код, который добавит стиль WS_TOPMOST к (большинству) окон (если позволяет безопасность), просто используя FindWindow
чтобы получить ручку окна, а затем SetWindowLong
изменить стиль окна.
Но вы не сможете поместить пользовательский интерфейс для этого в системные меню других процессов.
Вы можете сделать это, записав всю логику в C# в исполняемый файл. Вам также придется написать некоторый код на C/C++ в виде хука, который будет отправлять события из пунктов меню в ваш exe-файл. Вы можете найти пример здесь https://github.com/AlexanderPro/SmartSystemMenu