Як Winamp приймає повідомлення
Природно, можна послати будь-яке повідомлення будь-якого вікна, наприклад, повідомлення про те, щоб вікно змінило становище і розміри.
Приблизно така технологія і використовується в Winamp. Він обробляє повідомлення певного роду і виконує інструкції які несуть ці повідомлення. Наприклад, зупинити відтворення, відновити і так далі.
У цій статті буде написано два додатки: одне буде відсилати повідомлення, а інше приймати. Приступимо.
Створіть новий проект. Збережіть. Тепер потрібно буде написати код для обробки повідомлення. Додайте в розділ public:
Тепер потрібно написати саму процедуру:
Що і як тут робиться? Все дуже просто, message це структура, що прийшла в програму. LParam це те, що саме нас цікавить і що ми будемо передавати в подальшому.
Далі потрібно перейменувати форму, наприклад, в GetMessage. Потім використовуючи це ім'я будемо відсилати повідомлення.
На цьому з першим додатком все. Збережіть цей проект, він нам ще знадобиться, і створіть новий.
Викладаємо на форму Button і Edit. У Edit будемо вводити число, далі тиснемо кнопку і це число буде відправлено першій програмі.
Тепер потрібно написати функцію відсилання повідомлення:
Тепер про те як це працює. В змінної H буде зберігатися дескриптор першої програми. Але він там не з'явиться просто так - його потрібно буде отримати. Для його отримання використовуємо функцію FindWindow. Ось тут нам і знадобиться ім'я тієї форми - GetMessage. З цього імені дається ім'я класу, просто додається буква T. Звичайно, можна просто вказати назву вікна програми, але ж таке вікно може вже бути десь ще.
Далі йде перевірка, чи отримали ми дескриптор чи ні. Якщо в H число відмінне від 0, то щось отримали. А раз отримали відсилаємо за отриманим дескриптору повідомлення Command за допомогою функції SendMessage.
Тепер створюємо обробник onClick кнопки. Там пишемо:
Тут все ще легше. Викликаємо тільки що написану функцію, а в якості параметра подаємо те, що знаходиться в Edit.
Запускаємо обидві програми, вводимо в Edit число тиснемо кнопку і заголовок в першій програмі повинен змінитися. Як обробляти конкретне повідомлення вже вирішує кожен сам. На цьому все.