J[ava]Script et .DLL


~ Introduction ~
Il arrive que l'on ne puisse pas faire ce que l'on veut, directement, en JavaScript ( comme dans de nombreux langages d'ailleurs ), la fonctionnalité n'existant pas, par exemple.
On résoud souvent le problème en utilisant un Active'X. ( gestion de fichiers, pilotage d'applications... )
Mais, parfois, cet Active'X, lui non plus, n'existe pas, ou alors on n'a pas les droits d'utilisation, ou même, on préfèrerait développer quelque chose de spécifique...



Sur un exemple de base [ jouer un son standard ], on va développer une petite DLL ( en Visual Basic, qui sera chargé de faire appel à une API Windows et ) que l'on utilisera depuis le JavaScript.

En Visual Basic, mais facilement "transposable" vers le langage que vous préférez...

~ Création d'une .DLL ~
° Dans VB, créer un projet de type "DLL ActiveX"
° Nommer ce projet "MessageBeep"
    [sauver sous le nom "MessageBeep.vbp"]
° Nommer le module de classe "ClsMessageBeep"
    [sauver sous le nom "ClsMessageBeep.cls"]
° dans la source du module de classe saisir le code suivant :

 Option Explicit
 Const MB_ICONHAND = &H10            ' Arrêt critique
 Const MB_ICONQUESTION = &H20        ' Question
 Const MB_ICONEXCLAMATION = &H30     ' Exclamation
 Const MB_ICONASTERISK = &H40        ' Astérisque
 Private Declare Function MessageBeep Lib "user32" _
         (ByVal Son As Long) As Long
 '÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷
 '÷ joue un son standard Windows ( de manière asynchrone )
 '÷ Son = constantes MB_?? ci-dessus
 '÷ retourne 0 en cas d'échec
 '÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷
 Public Sub BeepMessage(Son As Long)
   Dim ret As Long
     ret = MessageBeep(Son)
 End Sub

° Compiler le projet MessageBeep
    [ la compilation fait ce qu'il faut au niveau de Windows,
      pour que cette DLL soit connue du système.
      sinon il faudrait utiliser Regsvr32. ]

° on peut l'utiliser comme suit dans une page web (hta,htm[l]...)

~ une page Web ~ ( hta,htm... )

<HTML>
<HEAD>
<title>exemple</title>
</head>
<body>
<!--÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷-->
<script type="Text/JavaScript">
function son(hou)
{
      var obj = new ActiveXObject("MessageBeep.ClsMessageBeep");
      obj.BeepMessage(hou);
}
</script>
<!--÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷-->
<input type="button" value="Critique"
      onclick="son(0x10);"/>
<input type="button" value="Question"
      onclick="son(0x20);"/>
<input type="button" value="Exclamation"
      onclick="son(0x30);"/>
<input type="button" value="Astérisque"
      onclick="son(0x40);"/>
de 1 à 4 :<input type="text" name="valeur" size=3/>
<input type="button" value="<== ce son"
      onclick="son(Number(valeur.value)*16);"/>
<!--÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷-->
</body></html>


Ce script n'est absolument pas "optimisé", il faudrait, en fait, créer l'Active'X, une fois et une seule [ au chargement de la page ? ], le supprimer quand il devient inutile, [ en fin de programme ? obj=null; ], et ne faire que l'utiliser entre-temps, mais pour la clarté de l'explication j'ai "simplifié" le script au maximum.

~ Conclusion ~
Vous voyez que c'est plutôt simple...
Une fois que l'on a les informations.
Trouver les informations, la documentation ...
c'est souvent moins facile, ça.
             ~\\|//
              (@ ~)
:------oOOOo---(_)---oOOOo------:
:     Contact          Site     :
:         .oooO   Oooo.         :
:---------(   )---(   )---------:
           \ (     ) /
            \_)   (_/