如何从 javascript 调用 user32.dll 方法

发布于 2024-08-07 23:47:10 字数 139 浏览 10 评论 0原文

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

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

谢谢,

达特

I have a javascript running on a browser. Is it possible to call a function/method in user32.dll.

This is possible from C# by using pInvoke calls. How do I do the same in JavaScript?

Thanks,

Datte

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

倒带 2024-08-14 23:47:10

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

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

Because of the JavaScript sandbox, you can't do it without a middle layer requiring elevated security permissions, such as a Netscape-style browser plug-in (widely supported), ActiveX control (pretty much IE-only), or .Net control (I assume that's possible; again probably IE-only). In each case, the JavaScript would talk to the control, which would in turn make the USER32 call for you.

None of that will work without the user having granted your application elevated permissions, but I'm guessing as you're requiring Windows, this is for some kind of intranet application where that may be possible.

许仙没带伞 2024-08-14 23:47:10

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

You definitely need a plug-in, extension or ActiveX of your own installed on the client.

In the case of a firefox extension, you can use jsctypes to wrap the calls easily.
If you use the Jetpack API included with Firefox 4, it will be all JavaScript and won't even require a browser restart.

Here's an exemple from mozilla.org for a basic 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();
南街女流氓 2024-08-14 23:47:10

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

如果您想在服务器上运行它,您需要使用 AJAX 和 C#。

On the client - it is not possible for security reasons (imagine every site could run system commands on your computer... end of the world - maybe possible with an ActiveX, but that's IE only, but then again, the DLL is windows only).

If you want to run it on the server you'll need to go trough AJAX and C#.

So要识趣 2024-08-14 23:47:10

使用网页中的 javascript 在客户端计算机上运行 dll 方法?这就是会引发世界末日的原因。

Run dll methods on the client machine using javascript from a web page? That's what is gonna trigger apocalypse.

那伤。 2024-08-14 23:47:10

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

If you build your own web browser in C#, you can intercept JavaScript calls and translate them to whatever you want in your browser. Though that won't work if you want it to be available to other browsers.

是伱的 2024-08-14 23:47:10

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

Write a com object that wraps your call to user32. Invoke it in IE/javascript.
Your DynamicWrapperX object would work for this (it would BE that com object, allowing you to just call your dlls as you wish).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文