IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 Delphi Discussion :

Comment détecter le son Windows standard et personnel.


Sujet :

Delphi

  1. #1
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 450
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 450
    Points : 1 336
    Points
    1 336
    Par défaut Comment détecter le son Windows standard et personnel.
    Bonjour à toutes et à tous,

    J'aurai aimé pouvoir détecter le son Windows attribué par défaut à la "Poubelle" ainsi que le son personnalisé que je lui aurait attribué par un thême.

    Voila mon essai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
    {$R *.dfm}
     
    uses mmsystem ;
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
    with ComboBox1.Items do
      begin
      Add('.Default');
      Add('AppGPFault');
      Add('CCSelect');
      Add('Close');
      Add('EmptyRecycleBin');
      Add('MailBeep');
      Add('Maximize');
      Add('MenuCommand');
      Add('MenuPopup');
      Add('Minimize');
      Add('NMain-MouseClick');
      Add('NMain-MouseLeave');
      Add('NMain-MouseOver');
      Add('Open');
      Add('RestoreDown');
      Add('RestoreUp');
      Add('ShowBand');
      Add('SystemAsterisk');
      Add('SystemExclamation');
      Add('SystemExit');
      Add('SystemHand');
      Add('SystemQuestion');
      Add('SystemStart');
     end;
     ComboBox1.Style := csDropDownList;
     
    end;
    Utilisation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    if not (sndPlaySound (pchar(ComboBox1.items[ComboBox1.ItemIndex]) ,SND_ASYNC ))
       then ShowMessage('Il y a un problème ! Peut-être n''y a t-il pas de son affecté !');
     
    end;
     
    procedure TForm1.Button2Click(Sender: TObject);
    begin
    if not(PlaySound('c:\WINDOWS\MEDIA\logoff.wav', handle,SND_ASYNC)) then
         showmessage('Il y a un problème ! Peux être le chemin indiqué n''est pas bon...');
     
    end;
    Merci d'avance,

    @+,

    Cincap

  2. #2
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 785
    Points : 5 916
    Points
    5 916
    Par défaut
    Bonjour,
    Citation Envoyé par cincap Voir le message
    J'aurai aimé pouvoir détecter le son Windows attribué par défaut à la "Poubelle" ainsi que le son personnalisé que je lui aurait attribué par un thême.
    En consultant la base de registre.
    Regardez cet article pour les détails :
    Les sons système et Delphi: comment les utiliser ? 1. Où se trouvent les sons du système d'exploitation ?

  3. #3
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 450
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 450
    Points : 1 336
    Points
    1 336
    Par défaut
    @ Ph. B. décidemment, tu es toujours le 1er à m'aiguiller, ce lien je l'avais déjà consulté, le code est calqué sur celui proposé.

    La base de registre n'indique pas si j'ai mis un fichier par ex Chassedeau.wav à la place du son par défaut par ex "EmptyRecycleBin".

    Merci de ton intervention.

    @+,

    Cincap

  4. #4
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 876
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 876
    Points : 15 307
    Points
    15 307
    Par défaut
    Citation Envoyé par cincap Voir le message
    (...) La base de registre n'indique pas si j'ai mis un fichier par ex Chassedeau.wav à la place du son par défaut par ex "EmptyRecycleBin". (...)
    Faut aller fouiller là-dedans (en ce qui concerne la corbeille) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [HKEY_CURRENT_USER\AppEvents\Schemes\Apps\Explorer\EmptyRecycleBin]
    Y a 3 sous-clés, je pense que tu pourrais y trouver ton bonheur...

  5. #5
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 450
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 450
    Points : 1 336
    Points
    1 336
    Par défaut
    @ Jipété, en effet sous cette sous clé ".Current" je constate mon fichier wav et sous ".Default" celui par défaut.

    Mais comment le lire ?

    @+,

    Cincap

  6. #6
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 450
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 450
    Points : 1 336
    Points
    1 336
    Par défaut
    Bonjour à toutes et à tous, avec mon essai, je n'arrive même pas à lire le contenu de cette clé ou se trouve le chemin du fichier wav :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    procedure TForm1.Button1Click(Sender: TObject);
    Var
      Reg : TRegistry;
      Key, keyname: string;
    begin
     
      Reg:=TRegistry.Create
     
      with Reg do
      try
        Reg.RootKey:= HKEY_CURRENT_USER; //Définit la clé principale
        key := '\AppEvents\Schemes\Apps\Explorer\EmptyRecycleBin';
        keyname := '.Current' ;
     
        if Reg.OpenKey(key,false) {"OpenKey" ouvre une clé particulière (False signifie que la clé n'est pas crée si elle n'existe pas}
        then
        begin
          EdName.Text:=Reg.ReadString(keyname); //Renvoie un string à partir du nom de la valeur
          Reg.CloseKey; //Ferme la clé
        end
      finally
        Reg.Free; //Détruit l'objet
      end;
    end;
    J'ai vérifié le chemin et c'est ok....

    J'ai peut être loupé quelque chose.

    @+,

    Cincap

  7. #7
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 876
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 876
    Points : 15 307
    Points
    15 307
    Par défaut
    Salut,
    Citation Envoyé par cincap Voir le message
    J'ai peut être loupé quelque chose.
    Vi, je pense que tu as loupé de capter ce que t'affiche Regedit quand tu te balades dans l'arborescence concernée :
    les données NE sont PAS TOUJOURS des bêtes strings (REG_SZ dans .Current par exemple) mais sont AUSSI des REG_EXPAND_SZ (dans .Default)

    Citation Envoyé par cincap Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        EdName.Text:=Reg.ReadString(keyname); //Renvoie un string à partir du nom de la valeur
    Donc faut revoir cette ligne, àmha.

    Mais surtout, il me semble qu'il y a un souci ici :
    Citation Envoyé par cincap Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        Reg.RootKey:= HKEY_CURRENT_USER; //Définit la clé principale
        key := '\AppEvents\Schemes\Apps\Explorer\EmptyRecycleBin';
        keyname := '.Current' ;
    L'arborescence réelle semble être key := '\AppEvents\Schemes\Apps\Explorer\EmptyRecycleBin\.Current';.
    Quant au "keyname" dans la valeur est "(par défaut)", je ne saurais te dire, je suis au taf et mes docs sont à la maison...

  8. #8
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 450
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 450
    Points : 1 336
    Points
    1 336
    Par défaut
    @ Jipété, merci pour l'aide, en effet c'est bien une autre règle d'où l'impossibilité de l'afficher.

    L'arborescence réelle semble être key := '\AppEvents\Schemes\Apps\Explorer\EmptyRecycleBin\.Current';.
    Sinon pour l'arborescence, elle me semble juste car je viens de refaire un test :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    procedure TTestRegEnum.Button1Click(Sender: TObject);
    var reg : tregistry;
    begin
    reg := tregistry.Create;
    reg.RootKey := HKEY_CURRENT_USER;
    reg.OpenKey('\AppEvents\Schemes\Apps\Explorer\EmptyRecycleBin',false);
    reg.ReadString('.Current');
     
     Reg.GetKeyNames(ListBox1.Items);
    Reg.GetValueNames(ListBox2.Items);
     
    reg.Free
    end;
    Par contre la valeur ne s'affiche pas !

    Je continue mes tests.

    @+,

    Cincap

  9. #9
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 876
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 876
    Points : 15 307
    Points
    15 307
    Par défaut
    Moi aussi je viens de faire un test au taf avec Lazarus, et quand je mets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      reg.OpenKey('\AppEvents\Schemes\Apps\Explorer\EmptyRecycleBin\.Current', False);
      Caption := reg.ReadString('');
    ça fonctionne tip-top !

  10. #10
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 450
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 450
    Points : 1 336
    Points
    1 336
    Par défaut
    @ Jipété, en effet cela fonctionne, j'ai donc revu mon code et c'est aussi ok.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    Var
      Reg : TRegistry;
      Key, keyname: string;
    begin
     
      Reg:=TRegistry.Create;//Crée un objet TRegistry
     
      with Reg do
      try
        Reg.RootKey:= HKEY_CURRENT_USER; //Définit la clé principale
        key := '\AppEvents\Schemes\Apps\Explorer\EmptyRecycleBin\.Current';
     
        if Reg.OpenKey(key,false) {"OpenKey" ouvre une clé particulière (False signifie que la clé n'est pas crée si elle n'existe pas}
        then
        begin
          EdName.Text:=Reg.Readstring(keyname); //Renvoie un string à partir du nom de la valeur
          Reg.CloseKey; //Ferme la clé
        end
      finally
        Reg.Free; //Détruit l'objet
      end;
    Topic parfaitement résolut puisque on peut placer une méthode pour lire le fichier *.wav

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    procedure TForm1.BPlayClick(Sender: TObject);
    begin
    if not(PlaySound(pchar(Edname.text), handle,SND_ASYNC)) then
         showmessage('Il y a un problème ! Peux être le chemin indiqué n''est pas bon...');
    end;
    Encore un grand merci à tous

    @+,

    Cincap

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [D6] Comment détecter l'arrêt de Windows
    Par Lucien dans le forum Langage
    Réponses: 6
    Dernier message: 02/03/2006, 10h29
  2. Comment changer les sons de Windows ?
    Par leonard.morel dans le forum API, COM et SDKs
    Réponses: 3
    Dernier message: 28/07/2005, 19h38
  3. Réponses: 4
    Dernier message: 26/06/2005, 23h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo