如何从javascript调用user32.dll方法

时间:2009-10-11 07:39:48

标签: javascript pinvoke user32

我在浏览器上运行了一个javascript。是否可以在user32.dll中调用函数/方法。

使用pInvoke调用可以从C#中实现。我如何在JavaScript中执行相同操作?

谢谢,

Datte

6 个答案:

答案 0 :(得分:12)

由于JavaScript沙箱,如果没有需要提升安全权限的中间层,您就无法做到这一点,例如Netscape风格的浏览器插件(广泛支持),ActiveX控件(几乎只支持IE),或者.Net控制(我认为这是可能的;再次可能只有IE)。在每种情况下,JavaScript都会与控件通信,而控件又会为您调用USER32。

如果没有用户授予您的应用程序提升权限,这些都不会起作用,但我猜你正在要求Windows,这适用于可能的某种内联网应用程序。

答案 1 :(得分:4)

您肯定需要在客户端上安装自己的插件,扩展程序或ActiveX。

对于firefox扩展,您可以使用jsctypes轻松打包电话 如果您使用Firefox 4附带的Jetpack API,它将是所有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();

答案 2 :(得分:0)

在客户端上 - 出于安全原因这是不可能的(想象每个站点都可以在您的计算机上运行系统命令......世界末日 - 可能使用ActiveX,但这只是IE,但是再一次,DLL只是窗户。)

如果你想在服务器上运行它,你需要通过AJAX和C#。

答案 3 :(得分:0)

使用网页上的javascript在客户端计算机上运行dll方法?这就是触发大灾难的原因。

答案 4 :(得分:0)

如果您使用C#构建自己的Web浏览器,则可以拦截JavaScript调用并将其转换为浏览器中的任何内容。如果您希望其他浏览器可以使用它,那么这将不起作用。

答案 5 :(得分:0)

编写一个包含对user32的调用的com对象。在IE / javascript中调用它。 您的DynamicWrapperX对象适用于此(它将是该com对象,允许您根据需要调用您的dll。)

相关问题