-1

Вся информация гласит, что это основная оболочка версий Windows 3.x и выше ОС Windows.

Мой вопрос: как эта программа имеет доступ ко всему графическому интерфейсу и данным экрана / кадрового буфера для рисования и изменения чего-либо на ней, и почему другие программы не могут делать то, что она делает, например, меню «Пуск» и другие вещи, которые обычные программы, похоже, могут не трогать?

Например, проверка программы в шестнадцатеричном редакторе показывает, что это обычный 32-разрядный исполняемый формат PE, общий со всеми исполняемыми файлами Windows; однако все программы не могут касаться экранных данных, где находится меню «Пуск», панель задач и т. д.

Я слышал, что это можно заменить, но тогда возможно ли это, чтобы обычная программа уровня пользователя изменила его? Если нет, то почему и почему можно просто заменить его другой программой?

Более конкретные детали:

Как explorer.exe затрагивает те части памяти, которые недоступны обычным программам? Например, я пишу приложение SDL/C++, которое упаковывает Windows API. WinAPI не контролирует меню «Пуск» и т.д., И не имеет никаких других библиотек, о которых я знаю. Как explorer.exe изменяет экранную память из этих регионов, что другие программы не могут?

1 ответ1

3

как эта программа имеет доступ ко всему графическому интерфейсу и данным экрана / кадрового буфера для рисования и изменения содержимого на нем.

Он использует вызовы API для управления графической подсистемой, которая использует драйверы для управления оборудованием видеоадаптера.

и почему другие программы не могут делать то, что делает

Они могут и делают. Explorer.exe не генерирует графику.

как меню «Пуск» и другие вещи, которые обычные программы, по-видимому, не могут коснуться?

Меню «Пуск» и панель задач ARE explorer.exe.

Я слышал, что это можно заменить,

Вы правильно слышали, это заменимо.

но так ли это возможно обычной программе уровня пользователя, чтобы изменить его?

Нет, потому что вы не можете изменить оболочку, если у вас нет прав администратора для редактирования реестра. Затем, после того как EXE-файл был настроен в качестве оболочки и автоматически запускается Windows, он теперь работает в контексте системного уровня, а не в контексте пользователя.

Как explorer.exe затрагивает те части памяти, которые недоступны обычным программам?

Это не так. В лучшем случае он может защитить свои собственные области памяти, изменяемые другими программами, и ОС в любом случае обеспечивает эту защиту большей частью. Любая программа может касаться любой области экрана. Прямой доступ к "экранной памяти" в Windows не происходит из-за аппаратной абстракции. Если вы не говорите о водителе, которым вы не являетесь.

WinAPI не контролирует меню «Пуск» и т.д., И не имеет никаких других библиотек, о которых я знаю. Как explorer.exe изменяет экранную память из этих регионов, что другие программы не могут?

И снова Explerer.exe - это меню «Пуск» и т.д. Проводник использует WinAPI для отображения своих окон и элементов управления (меню «Пуск» и панель задач - это просто окна с элементами управления).

Попробуйте этот эксперимент: откройте диспетчер задач и уничтожьте все копии Explorer.exe, которые вы видите. Когда вы убьете последний, вы заметите, что меню «Пуск» и панель задач исчезают.

Тем не менее, другие программы все еще работают и все еще видны, даже без запуска Explorer.exe. Вы даже можете использовать Диспетчер задач для обеда НОВЫХ программ; и они запустятся и будут видны с окнами, кнопками и всем прочим. :)

Эта статья CodeProject может помочь вам начать работу и поможет вам изменить элементы Explorer (в данном случае кнопку «Пуск») с точки зрения программирования: скрытие панели задач и меню запуска (start orb) в Windows Vista и Windows 7

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .