ПредишенСледващото

Работа с дистанционно управление

За решаването на първия проблем, който имаме като хардуер е с ТВ тунер Ето TV H6 с дистанционното управление. За да работите с устройството за дистанционно управление е проектиран библиотека BeholdRC.dll, описание на изнесените функции, както и пример за работата на Delphi, ние може да намерите на интернет страницата на разработчика. Въпреки това, само няколко функции. Информация клавиши подготовка може да се реализира по два начина, или проверка на състоянието на таймера, или да използвате отделна нишка. Вторият вариант е по-интересна и ефективна. Така че изпълнява класа ще се нарича TRemoteVolumeControl, и е наследник TThread. На този етап на развитие, основната форма кодът ще бъде отговорен за три неща:
  1. Създаване TRemoteVolumeControl обект, когато приложението започва
  2. Получаване на съобщения за натискане на бутоните за сила на звука, за да се промени (по възможност да се актуализира програмата интерфейс)
  3. Zavereshnie поток при затваряне на програмата
Към всичко това, добавите персонализирано съобщение, рутинните си, и променлива от тип TRemoteVolumenControl. Повторно дефиниране на строителя на нашия клас поток, така че като параметри се отнасят към него за приемане на дръжката на прозореца за съобщения, както и код на съобщението. При изпращане на съобщение, wParam съдържа натиснат клавиш код. Табла се предлагат в различни версии, с различен брой бутони, които описват по следния списък (тип дистанционно управление получаваме с помощта на BeholdRC библиотеки): За да работите с библиотеката, ние трябва да се опише подписите на изнесени функции. Всички те използват модел cdecl повикване. алгоритъм Call обикновено е както следва: за да научите броя на картите, да се инициализира картата на индекса. Можете да получите името и вида на панел, анкета ключов код натиснат. В края на работата, необходима за да предизвика процедура UnInit. Веднага давам описание TRemoteVolumeControl Клас: Както виждаме строителя параметри се съхраняват в частни членове FNotifyWindow FNotifyMessage. За да се инициализира на операцията с дистанционно управление и промяна на обема два функция InitRemoteControl (отдалечен) и InitVolumeControl (звука). След приключване на работния процес Съставено метод се нарича. По този начин, конструктора на класа се използва за задаване на параметрите и инициализира библиотеки. Ако не може да се инициализира на операцията с дистанционно управление, или контрол на обема, след което завършва на потока. Необходимо е да се премахне препратки към звук контролния панел на COM-обект и затваряне на библиотеката. За да работите с дистанционното управление, трябва да изтеглите библиотеката, задаване на входната точка на изнесената функцията, изберете устройството. Съответният код е тривиално, но нека да бъде: В "описание", каза API библиотеката, че оптималният интервал за проверка на състоянието 30-50msek надолу клавиши. С това твърдение не съм съгласен. Практически експерименти показват, че натискане на бутона и го освобождава отнема около 150-200ms, което е много добре доказана чрез натискане на бутон за заглушаване Mute (Интервал за отбелязване на 50 мс, звукът е включен изключване 2-3 пъти). Основният работен цикъл на програмата е много проста: да разпитва за състоянието на дистанционното (getRemoteCode), ако се натисне бутона (кодът е различен от $ FF), за да направи необходимите манипулации (процедура RCKeyPress), отивам да спя за 180 мс до следващия тест. Необходими манипулации в този случай, да уведомят основната форма на заявлението, както и промяна на силата на звука. Но до този момент ние не виждаме детайлите. Както можете да видите, като работи с дистанционно управление е много проста.

звук Control

Всъщност, никога не съм мислил за това, как да промените силата на звука в системата. И така, той отиде да учи в документацията. Но подробностите не вървят. Аз разбирам, че като се започне с Windows Vista, добри практики на управление са се променили драстично. Този раздел ни казва MSDN Ядро Audio API. Контрол на звука, което можем на глобално ниво, или да се променя само неговата аудио поток. Ние сме заинтересовани в първия вариант. За работа, ние се нуждаем от определен брой интерфейси: IMMDeviceEnumerator, е колекция от мултимедийни устройства; IMMDevice представлява едно устройство и IAudioEndpointVolume интерфейс за контрол на звука. За съжаление Delphi не съдържа описание на интерфейса, така че взе да се пренапише заглавията mmDeviceApi.h EndpointVolume.h (резултати, прикрепени към края на статията). В Google можете да намерите mmDevApi.pas файл с описание на интерфейсите за Delphi, но го описва само тези интерфейси, които трябва да промените силата на звука, но не напълно подходящи заглавни файлове. Заслужава да се отбележи, че използването на тези интерфейси, ние можем не само да контролирате силата на звука, но и да бъдат уведомени, че обемът е променен (IAudioEndpointVolumeCallback). Сега, за да бъда кратък, нашата функция InitVolumeControl трябва да получите препратка към IAudioEndpointVolume интерфейс, който ще предприемем: Сега можем да се опише функция RCKeyPress. На първо място, ние уведомява формата на клавиши, да я изпратите на кода. След това, в зависимост от ключа натиснат, ние или увеличаване / намаляване на звука (VolumeStepUp / VolumeStepDown). Когато натиснете бутона за спиране, трябва да се определи текущото състояние и да го обърнете. Кликвайки върху бутона за захранване, можем да изпратим под формата на WM_CLOSE съобщение, въпреки че ние имаме вече уведомен бутон кода Submit. Сега нашата молба може да се промени цялостната силата на звука в Window Vista 7. Бих искал да приложи някакъв хубав интерфейс за това, с ясна форма и модел динамика, но аз знам как да направя такова нещо в Direct2D. За изправени пред последен път на проблема. Сорс кодът на класа е описано, както и MMDeviceAPI и EndpointVolume файлове определящи интерфейса могат да бъдат изтеглени тук.

Подкрепете проекта - споделете линка, благодаря!