Как вызывать методы user32.dll из javascript - PullRequest
1 голос
/ 11 октября 2009

У меня в браузере работает javascript. Можно ли вызвать функцию / метод в user32.dll.

Это возможно из C # с помощью вызовов pInvoke. Как мне сделать то же самое в JavaScript?

Спасибо

Datte

Ответы [ 6 ]

12 голосов
/ 11 октября 2009

Из-за изолированной программной среды JavaScript вы не можете сделать это без промежуточного уровня, требующего повышенных разрешений безопасности, таких как плагин для браузера в стиле Netscape (широко поддерживается), элемент управления ActiveX (в значительной степени только для IE) или .Net control (я полагаю, это возможно; опять же, вероятно, только для IE). В каждом случае JavaScript связывался с элементом управления, что, в свою очередь, вызывало бы вызов USER32.

Ничто из этого не будет работать без предоставления пользователю повышенных разрешений для вашего приложения, но я предполагаю, что вам нужна Windows, это для какого-то приложения для интрасети, где это возможно.

4 голосов
/ 14 апреля 2011

Вам определенно нужен собственный плагин, расширение или ActiveX, установленные на клиенте.

В случае расширения Firefox вы можете использовать jsctypes для удобной упаковки вызовов.
Если вы используете Jetpack API, включенный в Firefox 4, все это будет JavaScript и даже не потребует перезапуска браузера.

Вот пример из mozilla.org для базового Hello World:

/* 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();
0 голосов
/ 19 апреля 2011

Напишите com-объект, который обернет ваш вызов user32. Вызвать это в IE / javascript. Ваш объект DynamicWrapperX будет работать для этого (это будет тот ком-объект, позволяющий вам просто вызывать ваши dll как вам угодно).

0 голосов
/ 15 апреля 2011

Если вы создаете свой собственный веб-браузер в C #, вы можете перехватывать вызовы JavaScript и переводить их в любой браузер. Хотя это не сработает, если вы хотите, чтобы он был доступен для других браузеров.

0 голосов
/ 11 октября 2009

Запускать методы dll на клиентском компьютере, используя JavaScript с веб-страницы? Это то, что вызовет апокалипсис.

0 голосов
/ 11 октября 2009

На клиенте - это невозможно по соображениям безопасности (представьте, что каждый сайт может запускать системные команды на вашем компьютере ... конец света - возможно, с ActiveX, но это только IE, но опять же DLL только окна).

Если вы хотите запустить его на сервере, вам нужно пройти через AJAX и C #.

...