带有JNA的java的win32 api:User32.INSTANCE.EnumChildWindows不返回任何内容

时间:2015-01-18 20:58:47

标签: java winapi jna

我使用JNA有以下代码:

HWND foregroundWindow = Tools.getForegroundWindow();

    User32.INSTANCE.EnumChildWindows(foregroundWindow, new User32.WNDENUMPROC() {

        @Override
        public boolean callback(HWND hwnd, Pointer pntr) {

            char[] textBuffer = new char[512];
            char[] textBuffer2 = new char[512];
            User32.INSTANCE.GetClassName(hwnd, textBuffer, 512);
            User32.INSTANCE.GetWindowText(hwnd, textBuffer2, 512);
            String wText = Native.toString(textBuffer);
            String wText2 = Native.toString(textBuffer2);

            System.out.println("className: " + wText + " title: " + wText2);

            return true;
        }

    }, null);

熟悉win32 api的JNA实现的人应该知道这个函数的目的是返回窗口的子元素。

当我启动mozilla firefox.exe并按Ctrl + Shift + Delete时,会打开一个弹出窗口,用于清除缓存,cookie和历史记录。我想找到DELETE按钮,所以我可以编程控制它,但上面的函数不会返回窗口内的任何控件。

那么我做错了什么,我该如何解决呢?

提前10倍。

P.S。

当我使用像inspec.exe这样的工具时,它会显示子组件。

1 个答案:

答案 0 :(得分:1)

EnumChildWindows枚举窗口化的子控件。 Mozilla使用非窗口控件。

您需要使用自动化API才能实现自动化。