1

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

这可以通过使用 pInvoke 调用从 C# 中实现。我如何在 JavaScript 中做同样的事情?

谢谢,

达特

4

6 回答 6

12

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

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

于 2009-10-11T07:47:59.230 回答
5

您肯定需要在客户端上安装您自己的插件、扩展或 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();
于 2011-04-14T11:36:46.230 回答
0

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

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

于 2009-10-11T07:45:06.460 回答
0

使用网页中的 javascript 在客户端计算机上运行 dll 方法?这就是要引发天启的原因。

于 2009-10-11T08:28:26.667 回答
0

如果您使用 C# 构建自己的 Web 浏览器,则可以拦截 JavaScript 调用并将它们转换为浏览器中所需的任何内容。尽管如果您希望它可用于其他浏览器,那将无法正常工作。

于 2011-04-15T19:54:27.317 回答
0

编写一个 com 对象来包装您对 user32 的调用。在 IE/javascript 中调用它。您的 DynamicWrapperX 对象将为此工作(它将是那个 com 对象,允许您根据需要调用您的 dll)。

于 2011-04-18T23:07:27.510 回答