Question

J'ai un javascript en cours d'exécution sur un navigateur. Est-il possible d'appeler une fonction / méthode user32.dll.

Ceci est possible à partir de C # à l'aide d'appels PInvoke. Comment puis-je faire la même chose en JavaScript?

Merci,

Datte

Était-ce utile?

La solution

En raison du bac à sable JavaScript, vous ne pouvez pas le faire sans une couche intermédiaire nécessitant des autorisations de sécurité élevées, comme un plug-in (largement pris en charge) navigateur de style Netscape, le contrôle ActiveX (à peu près IE uniquement), ou contrôle .Net (je suppose que cela est possible, de nouveau probablement IE uniquement). Dans chaque cas, le JavaScript parlerait au contrôle, qui à son tour faire l'appel USER32 pour vous.

Rien de tout cela ne fonctionnera sans que l'utilisateur ayant accordé votre application des autorisations élevées, mais je devine que vous êtes exigeant Windows, cela est pour une sorte d'application intranet où cela peut être possible.

Autres conseils

Vous avez certainement besoin d'un plug-in, l'extension ou ActiveX de votre propre installé sur le client.

Dans le cas d'une extension Firefox, vous pouvez utiliser jsctypes pour envelopper les appels facilement.
Si vous utilisez l'API Jetpack inclus avec Firefox 4, il sera tout JavaScript et même pas besoin d'un redémarrage du navigateur.

Voici un exemple de mozilla.org pour Bonjour tout le monde de base:

/* Load JS Ctypes Javascript module */
require("chrome").Cu.import("resource://gre/modules/ctypes.jsm");

/* Load windows api dll */
var lib = ctypes.open("user32.dll");

/* Declare the signature of the function we are going to call */
var msgBox = lib.declare("MessageBoxW",
                         ctypes.stdcall_abi,
                         ctypes.int32_t,
                         ctypes.int32_t,
                         ctypes.ustring,
                         ctypes.ustring,
                         ctypes.int32_t);
var MB_OK = 3;

/* Do it! */
var ret = msgBox(0, "Hello world", "title", MB_OK);

/* Display the returned value */
alert("MessageBox result : "+ret);

lib.close();

Sur le client - il est impossible pour des raisons de sécurité (imaginez chaque site pourrait exécuter des commandes système sur votre ordinateur ... fin du monde - peut-être possible avec un ActiveX, mais c'est IE seulement, mais là encore, la DLL fonctionne uniquement sous windows).

Si vous voulez exécuter sur le serveur que vous aurez besoin d'aller AJAX creux et C #.

Exécuter des méthodes dll sur la machine client à l'aide javascript à partir d'une page Web? C'est ce qui est va apocalypse déclencheur.

Si vous construisez votre propre navigateur web en C #, vous pouvez intercepter les appels JavaScript et les traduire à tout ce que vous voulez dans votre navigateur. Bien que ne fonctionnera pas si vous voulez qu'il soit disponible à d'autres navigateurs.

Ecrire un objet com qui enveloppe votre appel à user32. Invoquer dans IE / javascript. Votre objet DynamicWrapperX fonctionnerait pour cela (il serait l'objet de com, vous permettant d'appeler simplement vos dll que vous le souhaitez).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top