使用 JNA 和 EnumWindows 的问题

2023-12-27

我正在尝试 JNA,这是我尝试运行的第一个程序。我从参考文献中复制了它,但是,当我运行它时,他发现了 412 个窗口......而且我很确定我现在没有打开那么多窗口:) 有人可以向我解释一下该程序的行为吗?

import com.sun.jna.Pointer;
import com.sun.jna.win32.StdCallLibrary.StdCallCallback;
import com.sun.jna.Native;
import com.sun.jna.win32.StdCallLibrary;

public class Main {
// Equivalent JNA mappings
    public interface User32 extends StdCallLibrary {
        User32 INSTANCE = (User32) Native.loadLibrary("user32", User32.class);

        interface WNDENUMPROC extends StdCallCallback {
            boolean callback(Pointer hWnd, Pointer arg);
        }

        boolean EnumWindows(WNDENUMPROC lpEnumFunc, Pointer arg);
    }

    public static void main(String[] args) {
        User32 user32 = User32.INSTANCE;

        user32.EnumWindows(new User32.WNDENUMPROC() {
            int count;
            public boolean callback(Pointer hWnd, Pointer userData) {
                System.out.println("Found window " + hWnd + ", total " + ++count);
                return true;
            }
        }, null);
    }
}

在Windows 中,几乎一切都是窗口。以下是对代码的一些更改,这些更改将显示一些窗口标题/文本:

import com.sun.jna.Pointer;
import com.sun.jna.Native;
import com.sun.jna.win32.StdCallLibrary;

public class JNA_Main {
    // Equivalent JNA mappings
    public interface User32 extends StdCallLibrary {
        User32 INSTANCE = (User32) Native.loadLibrary("user32", User32.class);

        interface WNDENUMPROC extends StdCallCallback {
            boolean callback(Pointer hWnd, Pointer arg);
        }

        boolean EnumWindows(WNDENUMPROC lpEnumFunc, Pointer arg);

        int GetWindowTextA(Pointer hWnd, byte[] lpString, int nMaxCount);
    }

    public static void main(String[] args) {
        final User32 user32 = User32.INSTANCE;

        user32.EnumWindows(new User32.WNDENUMPROC() {

            int count;

            public boolean callback(Pointer hWnd, Pointer userData) {
                byte[] windowText = new byte[512];
                user32.GetWindowTextA(hWnd, windowText, 512);
                String wText = Native.toString(windowText);
                wText = (wText.isEmpty()) ? "" : "; text: " + wText;
                System.out.println("Found window " + hWnd + ", total " + ++count + wText);
                return true;
            }
        }, null);
    }
}

有什么不清楚的地方请追问。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 JNA 和 EnumWindows 的问题 的相关文章

随机推荐

  • 当工作进程死亡时,数据持久化,如何?

    我的工作进程需要收集 计算的数据作为启动时的参数 重新启动时也需要这样做 初始化代码应该放在哪里 在supervisors init里面 或者在模块内部 start link 或 init Erlang 在这方面有什么最佳实践吗 如果 ge
  • DBeaver 和 PostgreSQL 中的串行数据类型问题

    我是新用户 菜鸟 Dbeaver https dbeaver jkiss org 社区版 和PostgreSQL https www postgresql org 我在定义时遇到了很大的麻烦自动递增主键在任何表中 所以我想知道如何能够使用定
  • 如何在具有多个服务器的 NodeJS 中检索 SessionID?

    我是 NodeJS 新手 我正在开发 REST API 并使用 Express Session 来处理会话 因此 要获取我正在使用的会话 ID var sessionID req sessionID 这个sessionID是从服务器端生成的
  • Android - Parcel:无法编组值

    我正在尝试使用 Parcelable 通过活动传递数据 这是我的代码 public class Player implements Parcelable public static final Parcelable Creator
  • 从网络发送短信(是否有一些提供商可以提供此服务)?

    我想要一些类似于 app net 网站的东西 您单击一个按钮 然后可以选择通过短信 或电子邮件 将链接发送到您的手机 实现短信方面有哪些选项 是否有提供此功能的服务或开源包 这是来自 app net 的随机示例 http app net q
  • 核心数据:NSObjectID 和 NSTemporaryObjectID 泄漏

    在将我的应用程序发送到应用程序商店之前 我喜欢使用工具检查它是否存在内存泄漏和其他可疑内容 有一个核心数据问题我似乎无法解决 因此我决定创建一个小型测试应用程序来说明该问题 有什么问题 当我将实体保存在 子 NSManagedObjectC
  • java.io.IOException:连接被主机中的软件使用 Selenium java 中的 Sendkeys() 中止

    操作系统 Win7 64位 浏览器 Chrome 我正在完成我的任务 用硒测试一个程序 我正在使用教授提供的代码 它在我的本地主机上创建一个网络应用程序 8080 所以不应该有任何连接问题 public void canConenctTwo
  • 检查字符串是否包含 xml 或 json 数据

    我收到一个包含 xml 或 json 内容的字符串 如果字符串包含 json 内容 我使用 jackson java api 进行转换JSON 到 Java 对象 如果它包含 xml 内容 我使用 JAXB 将 XML 内容转换为 Java
  • 在 Woocommerce 我的帐户下载部分显示产品图片

    我有一个问题似乎无法解决 我正在尝试将产品图片添加到 my account downloads 部分中的每个项目 我尝试了多个找到的代码 但似乎没有一个对我有用 我正在使用 3 个插件 并禁用所有其他插件来尝试解决这个问题 这 3 个插件是
  • 如何在 D7 中解码 XML Blob 字段

    I m having a problem trying to decode XML data returned by an instance of MS SQL Server 2014 to an app written in D7 the
  • 延长“for”变量的寿命

    当我在 Rust 0 12 0 中编译以下代码时 出现以下错误 error borrowed value does not live long enough let match re captures a line unwrap as sl
  • 在角度控制器中打开 Outlook

    这是工作 Html a href L CsEmail a 这是行不通的 a L CsEmail a js vm composeEmail function data vm email mai
  • Extjs 日期字段从 到 或开始结束日期验证

    这是一个 extjs mixin 用于验证表单中的从日期到日期或开始结束日期 这是 mixin 核心代码取自 sencha 论坛 Ext define AMShiva mixin DateRangeValidator timerange f
  • 装箱和拆箱[重复]

    这个问题在这里已经有答案了 可能的重复 什么是装箱和拆箱以及权衡是什么 https stackoverflow com questions 13055 what is boxing and unboxing and what are the
  • WCF Web 服务更改 wsdl 名称和 targetNamespace

    All 我对 IIS 上的 WCF 有点陌生 但之前做过一些 ASMX Web 服务 我的 WCF 服务已启动并正在运行 但 Web 服务为我生成的帮助程序页面具有默认名称 即页面显示 您已经创建了一项服务 要测试此服务 您需要创建一个客户
  • 基于 Java 的加密器,仅生成字母数字字符

    我知道这个 jasypt 库 http www jasypt org index html http www jasypt org index html 效果很好 但只提供十六进制或 Base64 进行加密输出 两者都不适合我 因为十六进制
  • 使用 Xcode 以编程方式更改 Mac OS 上的显示旋转

    我正在尝试编写一个小型 Objective C 命令行工具来调整给定显示器的旋转 遗憾的是 我在苹果文档中找不到任何说明如何更改旋转的参考资料 除了获取它之外 我认为这必须通过使用来完成CGDisplayModeRef但我不知道怎么做 任何
  • 在 C 中循环文件的每一行

    我想知道如何循环遍历文件的每一行 这是我到目前为止的代码 FILE todoFile todoFile fopen todo txt r if todoFile NULL else printf ERROR 逐行读取文件直到结束的惯用方法是
  • 考虑 Scala 泛型类“equals”方法中的类型参数...清单是唯一的方法吗?

    给定一个简单的泛型类 class EqualsQuestion T val value T 以下代码解析为 false 似乎是合理的 val a new EqualsQuestion Int 5 val b new EqualsQuesti
  • 使用 JNA 和 EnumWindows 的问题

    我正在尝试 JNA 这是我尝试运行的第一个程序 我从参考文献中复制了它 但是 当我运行它时 他发现了 412 个窗口 而且我很确定我现在没有打开那么多窗口 有人可以向我解释一下该程序的行为吗 import com sun jna Point