2009-12-22 2 views
1

Есть ли способ в C# по всему миру добавить элемент меню во все системные меню во всех активных окнах? Возможно, под командой «Максимизировать»?Изменение глобальных системных меню

+2

Если ваш дизайн требует от вас этого, вам нужно подумать о своем дизайне. –

+0

Я пытаюсь написать программу, которая позволит мне «привязать» любое окно, чтобы оно всегда находилось поверх всех остальных окон. – Icemanind

+1

Что делать, если у пользователя есть другое приложение, которое использует ту же технику, что и в конечном итоге, чтобы поставить окно сверху, кто победит? – BFree

ответ

4

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

Вы можете написать код, который добавит стиль WS_TOPMOST к (большинству) окнам (с разрешения безопасности) с помощью FindWindow, чтобы получить дескриптор окна, а затем SetWindowLong, чтобы изменить стиль окна.

Но вы не сможете разместить интерфейс для этого в системном меню другого процесса.

+0

Спасибо за ответ Джон. Итак, лучший способ сделать это - написать что-то вроде Spy ++, которое позволяет вам «выбрать» окно, а затем использовать SetWindowLong в этом окне, чтобы изменить стиль окна? – Icemanind

+0

да, это было бы так. –

+0

Элегантный способ сделать это без инъекции кода описан на http://stackoverflow.com/q/138616/103167 –