2009-10-11 1 views
1

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

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

Спасибо,

Datte

+1

Я хотел бы знать, как это сделать в jscript в Internet Explorer с браузером, если у вас есть достаточные разрешения. –

ответ

10

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

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

+0

Как мы можем вызвать user32.dll с помощью ActiveX в jscript? –

+2

@Matthew: Рекомендовать опубликовать свой собственный, новый вопрос для этого. Это достаточно отличается от этого вопроса, что это не дубликат. (И FYI, я не думаю, что это сложно. Напишите элемент управления ActiveX, который предоставляет открытый метод, который вызывает в USER32, помещает элемент управления на страницу с тегом 'object', и как только пользователь разрешил его, ваш код JScript должен иметь возможность вызвать метод в экземпляре элемента управления ActiveX на странице. Но я не делал этого через 10 лет, поэтому я не лучший тростник, чтобы опираться, я уверен, что у кого-то есть недавний опыт работы с это.) –

+0

Считаете ли вы, что это был бы хороший способ сделать это? http://www.script-coding.com/dynwrapx_eng.html –

0

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

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

0

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

+0

[Расширения Chrome] (http://code.google.com/chrome/extensions/npapi.html) может использовать DLL. – Shaz

4

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

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

Вот Exemple от 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

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

0

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

 Смежные вопросы

  • Нет связанных вопросов^_^