Полный контроль над кнопкой "Пуск"

Xakep, номер #037, стр. 037-069-1

Horrific aka Фленов Михаил (smirnandr@mail.ru) http://www.cydsoft.com/vr-online/

Прошло уже полгода с того светлого момента, как появился "Кодинг" на страницах нашего журнала. Когда я сел готовить эту статью, то заметил, что план, согласованный с главредом, уже закончился. За полгода я смог рассказать все, что намечал, и даже перевыполнил план, когда по многочисленным просьбам написал программу для взлома паролей. Поэтому, пока мы с SINtez'ом думаем над продолжением рубрики, ты в обязательном порядке должен написать мне письмо с описанием того, что ты хочешь увидеть в моей рубрике в ближайшее время. А я клянусь кариесам на моих зубах, что самые многочисленные просьбы будут выполнены. Мои предложения следующие:

1. Продолжать приколы.

2. Побольше сетевых вещей.

3. Графика OpenGL (хочу создавать демки).

4. Графика DirectX (хочу создавать крутые демки).

Любая из этих тем может появиться на страницах нашего журнала, я только жду твоего окончательного слова. Можешь предложить свои идеи.

Сегодня в программе

После сентябрьской статьи "Центр управления полетами 'Пуск'" мне пришло достаточно много писем с просьбой описать реальную работу с кнопкой "Пуск". Просто в том примере я смухлевал и подбрасывал на экране бутафорию, а реальная кнопка оставалась на месте без изменений. Сегодня я покажу тебе, как можно получить доступ к самой кнопке "Пуск", управлять ею и изменять ее картинку.

Стартовая кнопка - это не что иное, как простое окно с картинкой на морде, просто выглядит таким образом. Чтобы получить к ней доступ, нужно знать идентификатор этого окна. Как его можно получить? С помощью API функции FindWindow. У этой функции два параметра, первый - это имя класса окна, а второй - это имя окна. Кнопка "Пуск" имеет имя класса "Shell_TrayWnd". Точнее сказать, это класс всей панели задач. Имя нам знать необязательно, потому что если его не указать, то FindWindow укажет нам на первое найденное окно указанного класса. Спешу тебя обрадовать, что такого класса в Windows только одно окно и это именно панель задач.

Получаем контроль над кнопкой

Чтобы получить доступ к картинке кнопки на панели задач, можно воспользоваться более продвинутой функцией - FindWindowEx. Эта функция позволяет нам получить доступ к любому элементу на окне. У нее уже есть четыре параметра:

1. Окно, на котором нужно искать элемент управления.

2. Элемент управления на этом окне, с которого нужно начинать поиск. Если здесь указать 0, то поиск будет начинаться с самого первого элемента управления.

3. Класс элемента управления. В нашем случае это кнопка, значит нужно указать "Button".

4. Имя. Если указать ноль (nil), то будет происходить поиск всех элементов подобного класса.

Итак, чтобы получить контроль над кнопкой "Пуск", нужно написать следующий код:

StartBtnWnd:=FindWindow('Shell_TrayWnd', nil);

StartBtnBmp:=FindWindowEx(StartBtnWnd, 0,'Button', nil);

Здесь я в первой строчке ищу окно панели задач. Результат поиска сохраняется в переменной StartBtnWnd. Во второй строчке я ищу саму кнопку "Пуск" внутри найденной панели задач. Результат этого поиска я запихиваю в переменную StartBtnBmp.

Содержание  Вперед на стр. 037-069-2

ttfb: 4.9099922180176 ms