Есть ли способ в C# по всему миру добавить элемент меню во все системные меню во всех активных окнах? Возможно, под командой «Максимизировать»?Изменение глобальных системных меню
ответ
Это не может быть сделано в управляемом коде. И это было бы невероятно сложно даже в неизмененном коде. В основном вам придется вводить код в каждый процесс, а затем вставлять элементы в локальные системные меню, а затем подключать обработчик основного окна для перехвата сообщений WM_SYSCOMMAND, чтобы вы могли сделать пункты меню что-то.
Вы можете написать код, который добавит стиль WS_TOPMOST к (большинству) окнам (с разрешения безопасности) с помощью FindWindow
, чтобы получить дескриптор окна, а затем SetWindowLong
, чтобы изменить стиль окна.
Но вы не сможете разместить интерфейс для этого в системном меню другого процесса.
Спасибо за ответ Джон. Итак, лучший способ сделать это - написать что-то вроде Spy ++, которое позволяет вам «выбрать» окно, а затем использовать SetWindowLong в этом окне, чтобы изменить стиль окна? – Icemanind
да, это было бы так. –
Элегантный способ сделать это без инъекции кода описан на http://stackoverflow.com/q/138616/103167 –
Если ваш дизайн требует от вас этого, вам нужно подумать о своем дизайне. –
Я пытаюсь написать программу, которая позволит мне «привязать» любое окно, чтобы оно всегда находилось поверх всех остальных окон. – Icemanind
Что делать, если у пользователя есть другое приложение, которое использует ту же технику, что и в конечном итоге, чтобы поставить окно сверху, кто победит? – BFree