如何从 javascript 调用 user32.dll 方法

Posted

技术标签:

【中文标题】如何从 javascript 调用 user32.dll 方法【英文标题】:How to call user32.dll methods from javascript 【发布时间】:2010-12-05 17:26:19 【问题描述】:

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

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

谢谢,

达特

【问题讨论】:

我想知道如何在 Internet Explorer 中的 jscript 中执行此操作,并且浏览器具有足够的权限。 【参考方案1】:

您肯定需要在客户端上安装自己的插件、扩展或 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】:

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

【讨论】:

【参考方案3】:

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

【讨论】:

【参考方案4】:

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

【讨论】:

Chrome Extensions 可以使用 DLL。【参考方案5】:

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

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

【讨论】:

我们如何在 jscript 中使用 ActiveX 调用 user32.dll? @Matthew:建议为此发布您自己的新问题。它与这个问题有很大的不同,它不是重复的。 (仅供参考,我认为这并不难。编写一个 ActiveX 控件,公开一个调用 USER32 的公共方法,将控件放在带有object 标记的页面上,一旦用户允许它,您的 JScript 代码应该能够在页面上的 ActiveX 控件实例上调用该方法。但是我已经 10 多年没有这样做了,所以我不是最好的依靠,我敢肯定这里有人最近有经验它。) 您认为这是一个好方法吗? script-coding.com/dynwrapx_eng.html【参考方案6】:

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

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

【讨论】:

以上是关于如何从 javascript 调用 user32.dll 方法的主要内容,如果未能解决你的问题,请参考以下文章

如何从 PHP 进行 Win32 API 调用?

如何从 js 文件调用 Laravel 路由

如何从 PyQT 调用 javascript 函数

如何从 Kendo 网格中的 ClientTemplate 调用 javascript 方法?

如何在 go 中调用 user32.dll EnumDisplaySettings

如何从服务器端对象调用 javascript 对象的属性/方法