CONTROLE DE VOLUME OSD (WIN32)

racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 - 5 août 2006 à 19:16
cs_leomat Messages postés 3 Date d'inscription samedi 18 juillet 2009 Statut Membre Dernière intervention 18 juillet 2009 - 18 juil. 2009 à 22:59
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/38949-controle-de-volume-osd-win32

cs_leomat Messages postés 3 Date d'inscription samedi 18 juillet 2009 Statut Membre Dernière intervention 18 juillet 2009
18 juil. 2009 à 22:59
C'est exactement le genre de programme que je cherchais.
Au début, je voulais le créer moi-même, mais que je vois le genre de code à développer, j'suis content d'avoir trouvé le tien :D

Sous Vista SP1, il ne fonctionne pas. La fenêtre transparent s'affiche avec les barres de volume, mais le son reste au même niveau^^
J'ai modifié le header de Windows utilisé. Tu utilisais "#define _WIN32_WINNT 0x0500"
j'ai essayé de le remplacer par "#define NTDDI_VISTASP1 0x0500", mais malheureusement, j'obtiens ces erreurs :

volume.cpp: In function `int WinMain(HINSTANCE__*, HINSTANCE__*, CHAR*, int)':
volume.cpp:374: error: `LWA_COLORKEY' undeclared (first use this function)
volume.cpp:374: error: (Each undeclared identifier is reported only once for each function it appears in.)
volume.cpp:374: error: `SetLayeredWindowAttributes' undeclared (first use this function)

j'approfondis mon analyse de ton code, et j'essaie de trouver une solution pour Vista (oui oui j'ai de l'espoir :D )

Très bonne initiative en tous cas d'avoir développé cette application.
MisteryX Messages postés 21 Date d'inscription vendredi 5 mai 2006 Statut Membre Dernière intervention 26 février 2009
15 déc. 2008 à 22:39
Le problème c'est surtout vista, si tu vois ce que je veux dire...! lol
ImmortalPC Messages postés 954 Date d'inscription mardi 11 mai 2004 Statut Membre Dernière intervention 11 novembre 2008 2
14 déc. 2008 à 16: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 ?

@+
MisteryX Messages postés 21 Date d'inscription vendredi 5 mai 2006 Statut Membre Dernière intervention 26 février 2009
20 nov. 2008 à 15:49
Y avraiment personne qui sait quel autre partie du code il faut modifier pr corriger ce prob. ?
Merci !
MisteryX Messages postés 21 Date d'inscription vendredi 5 mai 2006 Statut Membre Dernière intervention 26 février 2009
19 nov. 2008 à 01:58
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 !
MisteryX Messages postés 21 Date d'inscription vendredi 5 mai 2006 Statut Membre Dernière intervention 26 février 2009
14 nov. 2008 à 16:21
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 ?
ImmortalPC Messages postés 954 Date d'inscription mardi 11 mai 2004 Statut Membre Dernière intervention 11 novembre 2008 2
14 nov. 2008 à 10:34
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/ )

@+
MisteryX Messages postés 21 Date d'inscription vendredi 5 mai 2006 Statut Membre Dernière intervention 26 février 2009
14 nov. 2008 à 05:20
J'ai peut-être mis un peu trop de "toi" ds le "Ps:" lol
MisteryX Messages postés 21 Date d'inscription vendredi 5 mai 2006 Statut Membre Dernière intervention 26 février 2009
14 nov. 2008 à 05:16
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... ?
ImmortalPC Messages postés 954 Date d'inscription mardi 11 mai 2004 Statut Membre Dernière intervention 11 novembre 2008 2
13 nov. 2008 à 20:56
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".

@+
MisteryX Messages postés 21 Date d'inscription vendredi 5 mai 2006 Statut Membre Dernière intervention 26 février 2009
13 nov. 2008 à 13:16
Je ne sais pas pourquoi mais ça ne marche toujours pas...
ImmortalPC Messages postés 954 Date d'inscription mardi 11 mai 2004 Statut Membre Dernière intervention 11 novembre 2008 2
13 nov. 2008 à 12:36
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

@+
MisteryX Messages postés 21 Date d'inscription vendredi 5 mai 2006 Statut Membre Dernière intervention 26 février 2009
13 nov. 2008 à 11:54
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 !
ImmortalPC Messages postés 954 Date d'inscription mardi 11 mai 2004 Statut Membre Dernière intervention 11 novembre 2008 2
13 nov. 2008 à 10:03
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
MisteryX Messages postés 21 Date d'inscription vendredi 5 mai 2006 Statut Membre Dernière intervention 26 février 2009
13 nov. 2008 à 03:01
SVP Pas tous à la fois !
MisteryX Messages postés 21 Date d'inscription vendredi 5 mai 2006 Statut Membre Dernière intervention 26 février 2009
7 nov. 2008 à 02:52
Petite correction: quand je dis "expliquer", je veux bien entendu dire "comment le placer ds le prog"
MisteryX Messages postés 21 Date d'inscription vendredi 5 mai 2006 Statut Membre Dernière intervention 26 février 2009
7 nov. 2008 à 02: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 !
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
26 oct. 2008 à 20:19
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.
MisteryX Messages postés 21 Date d'inscription vendredi 5 mai 2006 Statut Membre Dernière intervention 26 février 2009
21 oct. 2008 à 00:20
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 !
MisteryX Messages postés 21 Date d'inscription vendredi 5 mai 2006 Statut Membre Dernière intervention 26 février 2009
20 oct. 2008 à 05:55
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 !
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
18 oct. 2008 à 23:57
< = 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
MisteryX Messages postés 21 Date d'inscription vendredi 5 mai 2006 Statut Membre Dernière intervention 26 février 2009
18 oct. 2008 à 22:33
"< ou >" je voulais dire: ex: "ctrl+alt+<"
MisteryX Messages postés 21 Date d'inscription vendredi 5 mai 2006 Statut Membre Dernière intervention 26 février 2009
18 oct. 2008 à 22:32
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!
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
18 oct. 2008 à 21:47
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.
MisteryX Messages postés 21 Date d'inscription vendredi 5 mai 2006 Statut Membre Dernière intervention 26 février 2009
16 oct. 2008 à 23:08
ouh ouh y a quelqu'un ?
MisteryX Messages postés 21 Date d'inscription vendredi 5 mai 2006 Statut Membre Dernière intervention 26 février 2009
16 oct. 2008 à 21:13
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 !
ImmortalPC Messages postés 954 Date d'inscription mardi 11 mai 2004 Statut Membre Dernière intervention 11 novembre 2008 2
18 août 2008 à 21:53
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

@+
EstevanTH Messages postés 7 Date d'inscription lundi 12 avril 2010 Statut Membre Dernière intervention 26 juillet 2010
12 juil. 2008 à 12:42
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. ^^
EstevanTH Messages postés 7 Date d'inscription lundi 12 avril 2010 Statut Membre Dernière intervention 26 juillet 2010
12 juil. 2008 à 12:34
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.
cs_nullite Messages postés 9 Date d'inscription mardi 25 janvier 2005 Statut Membre Dernière intervention 18 novembre 2009
12 avril 2008 à 04:38
bravo 10/10 Merci !
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
18 févr. 2007 à 11:52
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);
hazote Messages postés 1 Date d'inscription lundi 12 janvier 2004 Statut Membre Dernière intervention 6 février 2007
6 févr. 2007 à 19:28
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
Mickey069 Messages postés 3 Date d'inscription vendredi 7 mai 2004 Statut Membre Dernière intervention 26 octobre 2006
26 oct. 2006 à 15:51
C'est genial, c'est exactement ce que je cherchais depuis ce matin... Merci et bon travail
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
22 sept. 2006 à 14:50
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.
thunderx Messages postés 13 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 21 septembre 2006
21 sept. 2006 à 11:21
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
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
7 août 2006 à 00:19
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.
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
7 août 2006 à 00:10
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.
wxccxw Messages postés 755 Date d'inscription samedi 15 mai 2004 Statut Membre Dernière intervention 30 janvier 2011
6 août 2006 à 23:59
un dernier truc, l'horloge marche tres bien mais pas le son :(
wxccxw Messages postés 755 Date d'inscription samedi 15 mai 2004 Statut Membre Dernière intervention 30 janvier 2011
6 août 2006 à 23:51
10/10
wxccxw Messages postés 755 Date d'inscription samedi 15 mai 2004 Statut Membre Dernière intervention 30 janvier 2011
6 août 2006 à 23:48
tres jolie comme toujours Racpp, je chercher, et j'ai trouver merci.
cs_Stormy Messages postés 255 Date d'inscription samedi 20 avril 2002 Statut Membre Dernière intervention 16 janvier 2007
6 août 2006 à 19:43
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.
Utilisateur anonyme
6 août 2006 à 02:19
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.
:)
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
5 août 2006 à 19:16
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
Rejoignez-nous