gpt4 book ai didi

java - 使用 JNA 操作 'Internet Explorer_server' 中的 HTML 元素

转载 作者:行者123 更新时间:2023-12-01 22:16:09 25 4
gpt4 key购买 nike

我正在使用 Java 创建一个自动登录应用程序,但在尝试使用 JNA 获取 Internet Explorer_Server 的 html 内容时陷入了死胡同。

其他编程语言(例如 Python 或 C#)中存在一些有关此问题的信息,但找不到如何在 Java 中执行此操作。人们正在使用 ObjectFromLresult 方法来获取 html 内容,但我在 Java 中找不到任何替代方法。 IHTMLDocument2 - click button inside iframe

我成功连接到窗口并可以发送 WM_HTML_GETOBJECT 消息,但我不知道如何从 LResult 获取 html 内容。

        WinDef.HWND hWnd = user32.FindWindow("ADALWebBrowserHost","");
if(hWnd != null){
ieServer = hWnd;
while(!ieServerFound) {
getIEServer gies = new getIEServer();
user32.EnumChildWindows(ieServer, gies, null);
}
int msg = user32.RegisterWindowMessage("WM_HTML_GETOBJECT");
WinDef.DWORDByReference dbr = new WinDef.DWORDByReference();
WinDef.LRESULT result = user32.SendMessageTimeout(ieServer, msg, new WinDef.WPARAM(0),new WinDef.LPARAM(0), WinUser.SMTO_ABORTIFHUNG,1000, dbr);
// HTML ObjectFromLresult?
}

有没有办法将 LResult 转换为 Java 中某种 HTML 对象数组?

最佳答案

您需要映射ObjectFromLresult JNA 的功能。它目前不在用户贡献的 jna-platform 库中。

您需要定义一个 Oleacc 类,以从该函数所在的 oleacc.dll 库中获取并映射该函数。

public interface Oleacc extends StdCallLibrary, WinUser {
public static final Oleacc INSTANCE =
(Oleacc)Native.loadLibrary("oleacc", Oleacc.class, W32APIOptions.DEFAULT_OPTIONS);

HRESULT ObjectFromLresult(WinDef.LRESULT lResult, Guid.REFIID riid, WinDef.WPARAM wParam,
PointerByReference ppvObject);
}

请注意,上述链接文档指出:

This function is designed for internal use by Microsoft Active Accessibility and is documented for informational purposes only. Neither clients nor servers should call this function.

因此您不应依赖此 API 来获取生产代码。但假设您已经走到这一步,您需要将返回的指针强制转换为 IHTMLDocument2 interface 。这将是一个类似这样的类:

class IHTMLDocument2 extends IDispatch {
public IHTMLDocument2() {
}

public IHTMLDocument2(Pointer p) {
super(p);
}

// map function(s) here
}

为了映射该函数,您将定义一个 JNA 方法 matching the function signature in the header file它将包装一个 _invokeNativeObject() 调用,传递如下参数:

return (HRESULT) _invokeNativeObject(123,
new Object[] { foo, bar }, HRESULT.class);

您将用 IHTMLDocument2Vtbl 中函数/方法的从 0 开始的索引替换 123头文件中的类。

关于java - 使用 JNA 操作 'Internet Explorer_server' 中的 HTML 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58625932/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com