Задать вопрос
@ulilu1372

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

Не могу уяснить, как ОС работает с физическим уровнем.
P. S. Если не трудно, оставляете контактные данные, хочу кое-что доспрашивать
  • Вопрос задан
  • 818 просмотров
Подписаться 2 Оценить 2 комментария
Решения вопроса 1
@Mercury13
Программист на «си с крестами» и не только
1. Мышь посылает команды «Я нажата» и «Я отпущена». Считаем, что мышь USB’шная — тогда диспетчер шины 125 раз в секунду даёт мыши таймслот, и она за это время посылает 8-байтовый пакет, и в нём есть поля «сдвиг по X, сдвиг по Y, нажатые кнопки». Сама ОС ведёт счёт координатам курсора мыши. Отображение курсора мыши — это отдельная функция графического драйвера (из-за требовательности к скорости).
2. ОС из этих команд генерирует событие «Двойной щелчок по координатам (X, Y)» и посылает текущей программе (в данном случае — оболочке Windows, explorer.exe, он же Проводник).
3. Рабочий стол — это сильно модифицированный ListView из comctl32.dll (если я правильно назвал эту библиотеку). Впрочем, событие «двойной щелчок» обрабатывается самим Проводником, и если какой-то элемент выделен, он говорит: запусти файл, библиотека shell32.dll, функция ShellExecute с глаголом «open».
4. Библиотека оболочки shell32.dll имеет специальную ветвь кода для запуска ярлыков. Она разбирает файл ярлыка и вызывает более низкоуровневую функцию CreateProcess.
5. Ядро Windows делает всё, что нужно, чтобы создать процесс, завести под него отдельное «пользовательское» адресное пространство, отдельный стек вызовов, потоки ввода-вывода и т.д. Сам EXE-файл и его библиотеки становятся частью системы подкачки Windows, и если какая-то страничка сегмента кода будет выброшена, она подгружается прямо из EXE/DLL. Разрешает динамические адреса, которые становятся известны только при загрузке программы (т.н. relocations). Процесс загрузки программы — дело сложное, с ним я незнаком.
6. Считаем, что программа GUI’шная. Тогда при загрузке, как ни странно, ничего внешне не происходит (только трещит винт, подкачивая данные в оперативную память). Сама программа говорит WinAPI: мне нужно создать такое-то окно, с такими-то кнопками в заголовке, с отображением на панели задач.
7. Система сама посылает окну события: «Я изменяю свой размер», «Я показываюсь», «Я перерисовываюсь». Программа может перехватить эти события и сделать по ним что-то своё. Если у окна есть неклиентская часть (заголовок, рамка), показывает их сама Windows.
8. За перерисовку клиентской части окна (то есть того, что внутри рамки) отвечает одна из нескольких подсистем Windows. Наиболее распространённая — GDI (интерфейс графических устройств), хотя всё чаще используют библиотеки аппаратного ускорения — DirectX/OpenGL/Vulkan.
9. Как только сработали события перерисовки — внутренние Windows и пользовательские — мы видим на экране окошко!
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
saboteur_kiev
@saboteur_kiev Куратор тега Железо
software engineer
Считывается ярлык - это отдельный файл. В нем указан путь к самому файлу, который выполняется - он затем выполняется.
Или уточните вопрос, что для вас физический уровень.
Ответ написан
Комментировать
@dmfun
Срабатывает событие onclick (ondblclick) в программе explorer.exe, из Listview выбирается конкретный элемент, который является ярлыком, запускается процесс с параметрами, которые читаются из файла ярлыка.
Данные о ярлыке загружены во внутренний массив данных explorer.exe

То есть на физическом уровне, главное прерывание от мыши отловить.
Ответ написан
Комментировать
AlexXYZ
@AlexXYZ
O Keep Clear O
Не очень понятно, что для вас "физический уровень" (мышки или экрана?), но если без шуток, то есть WinAPI функции и они вызываются при действиях самой же операционной системы. Вот пример статьи как можно посмотреть, что происходит по разным поводам (Нужен Spy++, если установлена Visual Studio, то смотрите меню Tools):
zennolab.com/discussion/threads/pm-winapi-ili-upra...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы