Lucrul cu telecomanda
Pentru a rezolva prima problemă, avem un tuner TV Behold TV H6 cu telecomandă ca hardware. Pentru a lucra cu consola este proiectată biblioteca BeholdRC.dll, o descriere a funcțiilor exportate, precum și un exemplu de lucru pe Delphi, pe care îl putem găsi pe site-ul dezvoltatorului. Cu toate acestea, există doar câteva funcții. Puteți obține informații despre apăsările de la tastatură în două moduri, fie verificați starea după ceas, fie folosiți un fir separat. A doua opțiune pare mai eficientă și mai interesantă. Deci, clasa implementată va avea numele TRemoteVolumeControl și va fi moștenitorul TThread. În această etapă de dezvoltare, codul pentru forma principală va fi responsabil pentru trei lucruri:- Crearea unui obiect TRemoteVolumeControl atunci când începe aplicația
- Primirea de mesaje despre apăsarea butoanelor de schimbare a volumului (este posibilă actualizarea interfeței programului)
- Overflow, când programul este închis
Managementul sunetului
În general, nu m-am gândit niciodată cum să modific volumul sunetului din sistem. Așa că m-am dus să studiez documentația. Cu toate acestea, nu am intrat deloc în detalii. După cum am înțeles, din Windows Vista, metodele de gestionare a sunetului s-au schimbat dramatic. Acest lucru ne este comunicat de API-ul Core Audio MSDN. Putem controla sunetul la nivel global sau schimbând doar fluxul de sunet. Suntem interesați de prima opțiune. Pentru muncă avem nevoie de mai multe interfețe: IMMDeviceEnumerator, reprezintă o colecție de dispozitive multimedia; IMMDevice reprezintă un dispozitiv și interfața IAudioEndpointVolume pentru controlul volumului. Din păcate, Delphi nu conține interfețe, deci a fost necesar să rescrieți fișierele antetului mmDeviceApi.h EndpointVolume.h (rezultatul este atașat la sfârșitul articolului). În Google puteți găsi fișierul mmDevApi.pas care descrie interfețele la Delphi, dar descrie doar acele interfețe care au nevoie pentru a schimba volumul, dar nu și fișiere header complet adecvate. Este demn de remarcat faptul că, folosind aceste interfețe, nu putem controla numai volumul, dar, de asemenea, să fie notificat că volumul a fost modificat (IAudioEndpointVolumeCallback). Acum, pentru a fi scurt, funcția InitVolumeControl nostru trebuie să obțină o trimitere la interfață IAudioEndpointVolume că vom face: Ne putem descrie acum RCKeyPress funcția. În primul rând, informăm formularul cu privire la cheia care este apăsată, trimițând codul. În plus, în funcție de tasta presată, vom mări / micșora volumul (VolumeStepUp / VolumeStepDown). Când apăsați butonul mut, trebuie să determinăm starea curentă și să o inversăm. Dacă faceți clic pe butonul off, putem trimite un mesaj WM_CLOSE la formular, deși l-am notificat deja prin trimiterea codului de buton. Aplicația noastră poate schimba volumul general al sunetului în Window Vista 7. Aș dori să pun în aplicare o interfață frumoasă pentru acest lucru, cu o formă transparentă și o imagine a vorbitorului, dar știu cum să fac acest lucru în Direct2D. pentru că am avut o problemă ultima dată. Codul sursă pentru clasa descrisă, precum și fișierele de descriere a interfeței MMDeviceAPI și EndpointVolume pot fi descărcate aici.