0

我正在处理 JNA 并尝试获取 JDialog 内的 JInternalFrame 的标题。我可以使用 JNA 获得所有 Windows Programns 标题,但 JInternalFrame 的标题没有出现在列表中。

我正在做这样的事情:

user32.EnumWindows(new User32.WNDENUMPROC() {

            int count;

            public boolean callback(HWND hWnd, Pointer userData) {
                char[] windowText = new char[1024*2];
                EnumerateWindows.User32DLL.GetWindowTextW(hWnd, windowText, 
                EnumerateWindows.getMaxTitleLength());

                String wText = Native.toString(windowText);
                wText = (wText.isEmpty()) ? "" : " " + wText;

                if (!wText.isEmpty())
                    logger.warn("Window Title:"
                            + wText);

                return true;
            }


        }, null);

...

出现所有 Windows 标题,但 JInternalFrames 没有出现,有人可以帮助我吗?

实际上,我会更具体。我使用 JNA 是因为我试图专注于在生产中运行的程序。我无权访问应用程序生产代码,也无权在这台机器上安装任何东西。我只能调用我自己的 jar 程序。我的程序是一个机器人,它填充了这个特定 JInternalFrame 中的一些表格。出于某种原因,此框架在 ActionPerformed 按钮事件后失去焦点,我想使用我的程序再次将焦点设置在此框架上以继续填充过程。我可以通过单击 JInternalFrame 的任何位置来做到这一点,但这有点风险,因为如果我错过在框架内单击,我的程序会填写错误的表格。所以,有没有办法使用 JNA + JRobot 将焦点集中在第三方应用程序的 JInternalFrame 上,或者访问 JVM 的一些黑暗面力量,:)?我可以将焦点设置到 JDialog,但不能设置到它的内部框架。谢谢

4

1 回答 1

2

Swing 非顶级组件是轻量级组件,因此不是由操作系统创建的,没有 HWND 窗口句柄,因此无法通过 JNA 获取。相反,您将不得不通过 JVM,例如调用您感兴趣getAllFrames()的JVM。JDesktopPaneJInternalFrames

于 2015-03-31T21:36:17.043 回答