如何从 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 方法的主要内容,如果未能解决你的问题,请参考以下文章
如何从 Kendo 网格中的 ClientTemplate 调用 javascript 方法?