当前位置:  开发笔记 > 编程语言 > 正文

使用MATLAB从另一个应用程序中的控件获取文本

如何解决《使用MATLAB从另一个应用程序中的控件获取文本》经验,为你挑选了1个好方法。

MATLAB的External Functions接口允许以各种语言调用函数,其中包括Java.如本回答所述,与Windows API交互的流行Java库是Java Native Access(JNA).

在这个答案中演示了如何利用JNA发送WM_GETTEXT消息.针对此问题的特定需求进行了调整并转换为static方法,所需的Java-JNA代码如下所示:

package hack.graphic.devil

import com.sun.jna.Native;
import com.sun.jna.Pointer;
import com.sun.jna.platform.win32.WinDef.HWND;
import com.sun.jna.platform.win32.WinDef.LRESULT;
import com.sun.jna.win32.StdCallLibrary;

public class User32Util {
    interface User32 extends StdCallLibrary {
        User32 INSTANCE = (User32) Native.loadLibrary("user32", User32.class);
        int WM_GETTEXT = 0x000D;

        LRESULT SendMessageA(HWND editHwnd, int wmGettext, long l, byte[] lParamStr);
    }

    public static String getStringFromHexHWND(String args0) {
        User32 user32 = User32.INSTANCE;
        HWND target = new HWND(new Pointer(Long.decode(args0)));
        byte[] lParamStr = new byte[512];
        user32.SendMessageA(target, User32.WM_GETTEXT, 512, lParamStr);
        return Native.toString(lParamStr);
    }
}

上面的代码导入了在JNA的旧分支(特别是其/src/com/sun/jna/文件夹)中找到的类.打包.jar后,可以使用以下方法从MATLAB调用:

javaaddpath(fullfile(pwd,'User32Util.jar'));
...
str = char(hack.graphic.devil.User32Util.getStringFromHexHWND(['0x' dec2hex(hTmp(5))]));

str然后将包含所需的String.优质教育基金



1> Dev-iL..:

MATLAB的External Functions接口允许以各种语言调用函数,其中包括Java.如本回答所述,与Windows API交互的流行Java库是Java Native Access(JNA).

在这个答案中演示了如何利用JNA发送WM_GETTEXT消息.针对此问题的特定需求进行了调整并转换为static方法,所需的Java-JNA代码如下所示:

package hack.graphic.devil

import com.sun.jna.Native;
import com.sun.jna.Pointer;
import com.sun.jna.platform.win32.WinDef.HWND;
import com.sun.jna.platform.win32.WinDef.LRESULT;
import com.sun.jna.win32.StdCallLibrary;

public class User32Util {
    interface User32 extends StdCallLibrary {
        User32 INSTANCE = (User32) Native.loadLibrary("user32", User32.class);
        int WM_GETTEXT = 0x000D;

        LRESULT SendMessageA(HWND editHwnd, int wmGettext, long l, byte[] lParamStr);
    }

    public static String getStringFromHexHWND(String args0) {
        User32 user32 = User32.INSTANCE;
        HWND target = new HWND(new Pointer(Long.decode(args0)));
        byte[] lParamStr = new byte[512];
        user32.SendMessageA(target, User32.WM_GETTEXT, 512, lParamStr);
        return Native.toString(lParamStr);
    }
}

上面的代码导入了在JNA的旧分支(特别是其/src/com/sun/jna/文件夹)中找到的类.打包.jar后,可以使用以下方法从MATLAB调用:

javaaddpath(fullfile(pwd,'User32Util.jar'));
...
str = char(hack.graphic.devil.User32Util.getStringFromHexHWND(['0x' dec2hex(hTmp(5))]));

str然后将包含所需的String.优质教育基金


@DavidHeffernan - "_所有事情应尽可能简单,但不能简单".如果我这样问,那就是["XY问题"](http://meta.stackexchange.com/q/66377).相反,我的问题是从另一个应用程序获取一个字符串 - 这是我试图传达的.其他一切都回答了经典的"你尝试了什么?".我认为这个Q&A对未来读者有多大帮助,在展示我的思想轨迹方面看到了价值.特别是如果/当其他答案出现时会显示更好的方式.
推荐阅读
臭小子
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有