Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

CONTROLE DE VOLUME OSD (WIN32)


Information sur la source

Catégorie :Multimédia Classé sous : volume, audio, osd, mixer Niveau : Débutant Date de création : 05/08/2006 Vu / téléchargé: 15 396 / 1 253

Note :
9,75 / 10 - par 4 personnes
9,75 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (42)
Ajouter un commentaire et/ou une note

Description

Cliquez pour voir la capture en taille normale
Il s'agit ici d'un petit programme permettant de controler le volume audio du PC en utilisant le clavier. En maintenant la touche CTRL droite enfoncée, on appuie sur la flèche de direction droite pour augmenter le volume, ou la flèche gauche pour le diminuer. Pour passer au mode MUET on garde CTRL droite enfoncée et on appuie sur SUPPR. L'appui suivant annule le mode MUET. A chaque action, un graphique s'affiche comme sur l'écran d'un téléviseur. Il disparait au bout de 3 secondes d'inactivité. Le menu contextuel de l'icone dans la zone TrayIcon permet de quitter le programme.
Dans ce code source, j'ai utilisé un hook clavier de bas niveau pour l'interception de l'appui sur les touches. Pour l'affichage, j'ai utilisé une fenêtre transparente sur laquelle on écrit et dessine. Pour le controle du volume, j'ai fait appel aux APIs du MIXER de Windows.
Les remarques et les commentaires sont les bienvenus.

 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Commentaires et avis

signaler à un administrateur
Commentaire de racpp le 05/08/2006 19:16:30 administrateur CS

J'ai oublié de préciser que le zip contient le projet pour Visual C/C++ 2005 et Dev-CPP 4.9.9.2.
Pour tester l'exécutable, il suffit de le renommer en volume.exe

signaler à un administrateur
Commentaire de maladedede le 06/08/2006 02:19:17

Ma remarque n'est pas constructive, mais elle te félicite.
Trés bon programme et bonne idée d'avoir pensé a faire ca.
Je vais analysé le code je commence la prog avec le fenetrage win32 je vais en apprendre bcp.
:)

signaler à un administrateur
Commentaire de Stormy le 06/08/2006 19:43:04

Bon programme mais ne crois-tu pas que l'usage des touches CTRL+droite risque d'interférer avec d'autres programmes.
Je pense particulièrement à quelques jeux ou ces touches peuvent servir aux déplacements et positions du joueur. Le hook bas niveau risque de provoquer un conflit ennuyeux.

signaler à un administrateur
Commentaire de wxccxw le 06/08/2006 23:48:37

tres jolie comme toujours Racpp, je chercher, et j'ai trouver merci.

signaler à un administrateur
Commentaire de wxccxw le 06/08/2006 23:51:17

10/10

signaler à un administrateur
Commentaire de wxccxw le 06/08/2006 23:59:33

un dernier truc, l'horloge marche tres bien mais pas le son :(

signaler à un administrateur
Commentaire de racpp le 07/08/2006 00:10:26 administrateur CS

Salut,
Merci chers amis.
Stormy >> Effectivement, j'ai oublié de le signaler dans la présentation du code. L'utilisation de CTRL doite n'est qu'un exemple. J'ai choisi cette touche pour sa proximité des touches de direction. Ainsi, avec 2 doigts de la main droite, on peut agir sur le volume. Vous pouvez remplacer cette touche par n'importe quelle autre touche. Vous pouvez même faire une combinaison de plusieurs touches. Pour cela, il suffit de modifier légérement le code de la procédure de hook. J'avais l'intention de rendre le programme configurable en permettant le choix des touches à utiliser. Mais je voulais en même temps ne pas trop compliquer le code. C'est une option que vous pouvez ajouter en utilisant la base de registre(par exemple) pour sauvegarder les paramètres.

signaler à un administrateur
Commentaire de racpp le 07/08/2006 00:19:24 administrateur CS

wxccxw >> Normalement, ça devrait marcher avec la carte son par défaut. J'ai essayé ce programme sur plusieurs ordinateurs sans remarquer de problème. Ca marche même sur un PC ayant deux cartes son. Il agit sur la carte son actuellemnt sélectionnée dans Windows. Essaie de déboguer le programme afin de pouvoir trouver la cause du problème. Il est possible que ce programme ne tienne pas compte de certains cas particuliers. J'aimerais bien connaitre ces cas pour l'améliorer.

signaler à un administrateur
Commentaire de thunderx le 21/09/2006 11:21:02

Salut Racpp. Nickel, c'est exactement ce que je cherchais.
Par contre, si je suis sous un jeu (par exemple CS en plein ecran), ca marche encore ?
J'ai deja testé des progs de ce genre, mais dès que je suis sous un jeu, je n'ai plus rien a l'ecran.

Ps : là je n'ai pas encore testé - mais peut etre quelqu'un l'a deja fait

signaler à un administrateur
Commentaire de racpp le 22/09/2006 14:50:05 administrateur CS

Salut,
Je n'ai pas faits de tests. Je pense que c'est comme les autres programmes. L'affichage se fait grâce à une fenêtre transparente. Si un jeu s'accapare de tout l'affichage, il est normal que rien ne s'affiche.

signaler à un administrateur
Commentaire de Mickey069 le 26/10/2006 15:51:30

C'est genial, c'est exactement ce que je cherchais depuis ce matin... Merci et bon travail

signaler à un administrateur
Commentaire de hazote le 06/02/2007 19:28:50

super code !  c'est exactement ce que je cherchais, merci beaucoup
quelqu'uns aurait il la gentillesse de me transformer cela de maniere a ce que l'on regle le son avec "CTRL+PAV_Num+" et "CTRL+PAV_Num-"  et aussi un affichage de 1 seconde et non 3.
je ne connais pa grand chose en programation, et ma sa seul approche est sous linux :s

signaler à un administrateur
Commentaire de racpp le 18/02/2007 11:52:32 administrateur CS

Salut,
HAZOTE >> Dans le code, tu remplaces les deux VK_LEFT par VK_SUBTRACT et les deux VK_RIGHT par VK_ADD. Pour avoir une durée d'affichage d'une seconde il suffit de mettre 1000 pour le 3ème paramètre de SetTimer():
SetTimer(hWnd,1,1000,0);

signaler à un administrateur
Commentaire de nullite le 12/04/2008 04:38:26

bravo 10/10 Merci !

signaler à un administrateur
Commentaire de EstevanTH le 12/07/2008 12:34:07

Excellent logiciel ! Très utile et bien conçu. Merci.
Outre la personnalisation des raccourcis clavier, on peut également penser à intégrer différents thèmes, notamment un thème compact car un grand volume en plein milieu de l'écran n'est pas toujours appréciable. ^^
Voilà pour mes idées d'amélioration.

signaler à un administrateur
Commentaire de EstevanTH le 12/07/2008 12:42:24

En y réfléchissant, le réglage du temps d'attente avant disparition serait également appréciable. Autre possibilité : tant que la touche Ctrl droite est enfoncée (si la combinaison devient personnalisable, utiliser la combinaison correspondante), ne pas masquer le contrôle du volume : ça laisserait un temps de réflexion aux personnes lentes. ^^

signaler à un administrateur
Commentaire de ImmortalPC le 18/08/2008 21:53:43

Salut !

Très belle source !
Je me permet d' y ajouter quelques améliorations :D
- Gestion des touches Mute, SOUND+, SOUND-
- Diminution de l' utilisation des ram lors du repos du prog

http://immortal-pc.info/CodeS-SourceS/volume.cpp

@+

signaler à un administrateur
Commentaire de MisteryX le 16/10/2008 21:13:51

Bonsoir,

Je ne suis pas programmeur, mais disons que tout cela m'intéresse.
En fait, je voudrais modifier le temps d'affichage et les touches raccourci, mais je ne sais pas comment on compile(si c'est ça qu'il faut faire)...
Il à été question aussi de base de registre...

Est-ce que quelqu'un pourrait m'expliquer la marche à suivre ?

Merci d'avance !

signaler à un administrateur
Commentaire de MisteryX le 16/10/2008 23:08:03

ouh ouh y a quelqu'un ?

signaler à un administrateur
Commentaire de racpp le 18/10/2008 21:47:43 administrateur CS

MisteryX >> Justement, après avoir modifié le code, il faudra recompiler. La démarche à suivre dépend de ton compilateur. Ce code a été fait pour Visual C/C++ 2005 et Dev C++. Normalement ça devrait aller avec tout autre compilateur.

signaler à un administrateur
Commentaire de MisteryX le 18/10/2008 22:32:47

Bonsoir racpp et merci pr ta réponse,

Effectivement j'ai compris en cherchant ce qu'il falait faire...
Mais parcontre, à part le fait que j'ai envie de le décortiquer pr apprendre,
je n'ai pas réussi à obtenir, par ex: "ctrl+alt+A" ou tout autre lettre du clavier.
Je n'ai pas trouvé nonplus comment on obtient "< ou >"...

Pourrais-tu m'aider stp ?

Merci!

signaler à un administrateur
Commentaire de MisteryX le 18/10/2008 22:33:50

"< ou >" je voulais dire: ex: "ctrl+alt+<"

signaler à un administrateur
Commentaire de racpp le 18/10/2008 23:57:00 administrateur CS

< = VK_LEFT
> = VK_RIGHT
ctrl = VK_CONTROL (gauche et droite)
ctrl gauche =VK_LCONTROL
ctrl droite = VK_RCONTROL
alt = VK_MENU
alt gauche = VK_LMENU
alt droite = VK_RMENU
A = 0x41 en hexadécimal ou 65 en décimal
B = 0x42 en hexadécimal ou 66 en décimal
etc
Voici le lien MSDN pour la liste complète:
http://msdn.microsoft.com/en-us/library/ms645540(VS.85).aspx

signaler à un administrateur
Commentaire de MisteryX le 20/10/2008 05:55:39

Bonjour,

Merci pour les explications !

Mais en ce qui concerne "< ou >" je parlais des signes qui se trouvent sur la touche à gauche du "w"...
Ensuite, je n'ai pas réussi à obtenir, ex: "ctrl+alt+a", ni à faire fonctionner "alt"...
Sais-tu pourquoi ?
Ce que je ne comprends pas non-plus, c'est qu'il faille mettre par ex: "0x41" au lieu de "VK_A" ?

En tous cas, j'espère vite apprendre tout ça...

PS: Pr info, j'ai installé devcpp (sur xp).

Encore merci pour ton aide !

signaler à un administrateur
Commentaire de MisteryX le 21/10/2008 00:20:41

J'oubliais, existe-t-il un tuto qui me permettrait de comprendre ton logiciel ?
Et si ça t'embête pas, je voudrais savoir comment rendre la fenêtre opaque ?
Désolé pour mon bombardement de questions. ;-)
Merci !

signaler à un administrateur
Commentaire de racpp le 26/10/2008 20:19:27 administrateur CS

Pour les symboles "<" et ">" tu peux utiliser le membre scanCode de la structure KBDLLHOOKSTRUCT. Le scancode correspondant à la touche "<" est 0x56. Dans les hooks clavier, il s'agit des codes des touches et non pas des caractères.
Pour faire ctrl+alt+a il suffit de faire dans la procédure du hook:
if(touche==0x41)
{
   if((GetKeyState(VK_CONTROL) & 0x8000)
   && (GetKeyState(VK_MENU) & 0x8000))
   {
      SendMessage(hWnd,SETVOLUME,0,(LPARAM)touche);
      return 1;
   }
}
Ne pas oublier de mettre if(lParam==0x41) dans le traitement du message SETVOLUME.
La constante VK_A n'est pas définie par défaut. Pareil pour toutes les touches alphabétiques. Tu peux d'ailleurs remplacer 0x41 par 'A'.
Pour rendre la fenêtre opaque tu peux jouer sur le 3ème paramètre de la fonction SetLayeredWindowAttributes(). La valeur 255 correspond à l'opacité totale.
Pour, les tutos, j'en caonnais pas mais tu devrais en trouver sur le net.

signaler à un administrateur
Commentaire de MisteryX le 07/11/2008 02:50:50

Bonjour à tous,

Je suis comme je l'ai déjà dit, plutôt débutant...
Donc, est-ce que quelqu'un pourrait svp m'expliquer le point suivant(venant du message ci-dessus):
"utiliser le membre scanCode de la structure KBDLLHOOKSTRUCT. Le scancode correspondant à la touche "<" est 0x56"

Merci d'avance !

signaler à un administrateur
Commentaire de MisteryX le 07/11/2008 02:52:32

Petite correction: quand je dis "expliquer", je veux bien entendu dire "comment le placer ds le prog"

signaler à un administrateur
Commentaire de MisteryX le 13/11/2008 03:01:52

SVP Pas tous à la fois !

signaler à un administrateur
Commentaire de ImmortalPC le 13/11/2008 10:03:35

Salut !

C'est fort simple. ( Les instruiction qui suivent, font référances aux fichier Volume.cpp http://files.codes-sources.com/fichier.aspx?id=38949&f=volume%5cvolume.cpp ).

Ligne 28 : if(touche==VK_LEFT || touche==VK_RIGHT)
Ce if représente une des conditions pour ajuster le son.
c'est à remplacer par
if((((touche == VK_OEM_102 && (GetKeyState(VK_SHIFT) & 0x8000)) || (touche == VK_OEM_102)) && (GetKeyState(VK_MENU) & 0x8000) && (GetKeyState(VK_CONTROL) & 0x8000)) || ((touche==VK_LEFT || touche==VK_RIGHT) && (GetKeyState(VK_RCONTROL) & 0x8000)))
Les lignes 31, 32 et 37 sont à supprimer

Ligne 238 : if(lParam==VK_LEFT)
est à remplacer par :
if(lParam==VK_LEFT || (lParam == VK_OEM_102 && !(GetKeyState(VK_SHIFT) & 0x8000)))

Ligne 244 : if(lParam==VK_RIGHT)
est à remplacer par :
if(lParam==VK_RIGHT || (lParam == VK_OEM_102 && (GetKeyState(VK_SHIFT) & 0x8000)))

Avec ces modifications, voici les nouvelles commande:
Augmenter le son : Ctrl+Alt+> ( Qui est en fait  Ctrl+Alt+Maj(ou Shift )+< ) OU CTRL+"flèche de droite"
Baisser le son : Ctrl+Alt+< OU CTRL+"flèche de gauche"
Mute: CTRL+Suppr

Cordialement



signaler à un administrateur
Commentaire de MisteryX le 13/11/2008 11:54:29

Bonjour,

Merci beaucoup pour ton aide, mais j'ai un soucis avec "VK_OEM_102", ça ne marche pas,
j'avais même déjà essayé.Devcpp me donne un message d'erreur en bas.
Par ailleurs, si ça ne t'embête pas, je voudrais aussi savoir(par curiosité) comment obtenir ce que me disait racpp, càd, que "0x56" ne corresponde pas à la lettre "v" mais au numéro de la touche "<" ?

Encore merci !

signaler à un administrateur
Commentaire de ImmortalPC le 13/11/2008 12:36:57

Salut !

Devcpp est mort, utilise plutôt Code::Blocks il est nikel ;)
Sinon, voilà la page de code :
http://msdn.microsoft.com/en-us/library/ms645540(VS.85).aspx
VK_OEM_102 = 0xE2
Windows 2000/XP: Either the angle bracket key or the backslash key on the RT 102-key keyboard
En gros, VK_OEM_102 représente la touche <>.

VK_LEFT  = 0x25
VK_RIGHT = 0x27
VK_SHIFT = 0x10
VK_MENU  = 0x12
VK_RCONTROL = 0xA3

@+

signaler à un administrateur
Commentaire de MisteryX le 13/11/2008 13:16:06

Je ne sais pas pourquoi mais ça ne marche toujours pas...

signaler à un administrateur
Commentaire de ImmortalPC le 13/11/2008 20:56:27

Salut !

on va faire simple: www.immortalpc.free.fr/Volume.zip
Le binaire est dedans.
Les racourcis sont :
Augmenter le son : Ctrl+Alt+> ( Qui est en fait Ctrl+Alt+Maj(ou Shift )+< ) OU CTRL+"flèche de droite" OU  "La touche spécial sur le clavier pour monter le son".
Baisser le son : Ctrl+Alt+< OU CTRL+"flèche de gauche" OU  "La touche spécial sur le clavier pour baisser le son".
Mute: CTRL+Suppr OU  "La touche spécial sur le clavier pour mute le son".

@+

signaler à un administrateur
Commentaire de MisteryX le 14/11/2008 05:16:40

Merci beaucoup !

Voilà ce qui n'allait pas:
il faut remplacer "char touche=(char)hookstruct->vkCode;"
par               "int touche=(int)hookstruct->vkCode;"
Parcontre, je suis encore ignorant et donc je n'ai pas encore compris pourquoi...
Si ça t'embête pas, pourrais-tu stp m'expliquer en 2 mots ?
Ou m'indiquer un tutoriel qui l'explique bien ?

A+

PS: comment apprends-tu toi ce language toi, livres, tuto... ?

signaler à un administrateur
Commentaire de MisteryX le 14/11/2008 05:20:04

J'ai peut-être mis un peu trop de "toi" ds le "Ps:"  lol

signaler à un administrateur
Commentaire de ImmortalPC le 14/11/2008 10:34:49

Salut !

Zarb ton histoire de char et int, à la base c' est un DWORD que l' on converti en char.
La seule explication que je vois, c'est que ton char n' arrive pas à contenir les touches demandées.
Pour apprendre le C/C++ je suis passé par Le Site du Zéro ( http://www.siteduzero.com/ )

@+

signaler à un administrateur
Commentaire de MisteryX le 14/11/2008 16:21:13

Ok merci !
Mais je suppose que le problème avec "char" doit être le même partout, sinon racpp ne m'aurait pas conseillé de modifier le prog. Mais bon, maintenant avec "int", ça marche... Ça m'étonne qu'on ne me l'ai pas dit avant. ;-)
Un autre petit soucis que j'ai, et je suppose les autres aussi... c'est que je n'arrive pas à modifier l'opacité "SetLayeredWindowAttributes()", j'ai beau modifier la valeur et la couleur, j'obtiens toujours un fond totalement opaque et blanc.
Chez toi aussi ?

signaler à un administrateur
Commentaire de MisteryX le 19/11/2008 01:58:30

Bonjour,

Est-ce que quelqu'un saurait svp me dire quelle est la modification que je dois faire en plus de celles dans "SetLayeredWindowAttributes()" pour modifier la couleur de fond et l'opacité de la fenêtre ?
Si je vous demande ça, c'est que quoique je mette ds "SetLayeredWindowAttributes()", j'obtiens tjrs un fond blanc et d'une opacité totale...

Merci d'avance !

signaler à un administrateur
Commentaire de MisteryX le 20/11/2008 15:49:24

Y avraiment personne qui sait quel autre partie du code il faut modifier pr corriger ce prob. ?
Merci !

signaler à un administrateur
Commentaire de ImmortalPC le 14/12/2008 16:30:30

Salut !

Petit problème de compactibilité avec vista.
Le hook marche sans problème mais les fonctions de gestion du son ne marche pas du tout.
Donc le niveau sonore ne monte pas, ne baisse pas, et ne peut pas être mute.
Une idée ?

@+

signaler à un administrateur
Commentaire de MisteryX le 15/12/2008 22:39:17

Le problème c'est surtout vista, si tu vois ce que je veux dire...!  lol

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

controle du volume audio général [ par roxanic ] BonjourJe cherche a controler les bouton de volume.Pour le bouton Wave c'est OK. Mais je ne trouve pas le solution pour le curseur du volume général.M Sélectionner la source audio... [ par MisteryX ] Bonjour à tous,Si j'ai choisi un thème pour poster ma question c'est vraiment parce qu'il le fallait, donc je ne sais pas si j'ai fait le bon choix ?? Capture audio multiple avec directsound [ par CreugenatCoco ] Bonjour à tous et à toutes, je suis assez nouveau en programmation C++, et je dois réaliser une application qui:- detecte les cartes sons installées e Menu OSD [ par dams13120 ] Bonjour, J'ai un programme, en C qui tourne sur mon PC (version linux) et qui affiche une vidéo sur un écran en output. Je voulais savoir quelle solut OSD par dessus un jeu [ par Booster ] Bonsoir à tous, Je voudrais réaliser un OSD qui serait en premier plan (Même dans les jeux). Les OSDs présent sur ce site utilise de simple fenêtre Problème pour lire les fichiers audio dans un programme C++ [ par Nicolas ] Pour un projet C++ (linéaire),il souhaiterais réalisé une bibliothèque musical(.mp3, .wav). J'aurais besoin pour ca de lire les fichiers audio mais je Poblèmes pour lire un fichier audio dans un programme C++ [ par Nicolas ] Pour un projet C++ (linéaire),il souhaiterais réalisé une bibliothèque musical(.mp3, .wav). J'aurais besoin pour ca de lire les fichiers audio mais je utiliser les codecs (audio) en VC++ [ par MangaII ] Salut !Je cherche a utiliser les codecs pour décompresser des son, mais j'ai pas encore réussi !Si qqun c comment on pe faire ca, sans trop se compliq Récupération des données audio sous DirectX [ par kleinjer ] Bonjour,Je débute avec DirectX. J'ai une interface qui me permet d'ouvrir un fichier wav ou mp3 mais j'aurais besoin de recupérer les données audio af [HELP] Comment mixer plusieurs pistes wav [ par fehnerf ] Qu'elle est concretement l'opération (mathématique?) qui permet de passer de plusieurs pistes wav à une seule, mix des autres? Je recherche ça pour un


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version


HTC G1

Entre 449€ et 449€


Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,406 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.