用Java获取活动窗口信息

詹姆士 :

我试图用Java升级我的应用程序,使其仅在具有特定名称的进程窗口处于活动状态时才能工作。我发现使用JNI可以做到这一点,但是我不知道该怎么做。我只是找不到任何可以解释它的描述或示例。我的问题是-如何获取Windows中当前活动窗口的进程名称(通过JNI或其他方式-我接受任何其他解决方案)?

加勒特音乐厅:

减轻您的痛苦,并使用JNA您将需要下载 Win32 API的jna.jarjna -platform.jarPInvoke的 wiki和MSDN是找到合适的系统调用是有用的。

无论如何,这是用于打印当前活动窗口的标题和过程的代码。

import static enumeration.EnumerateWindows.Kernel32.*;
import static enumeration.EnumerateWindows.Psapi.*;
import static enumeration.EnumerateWindows.User32DLL.*;
import com.sun.jna.Native;
import com.sun.jna.Pointer;
import com.sun.jna.platform.win32.WinDef.HWND;
import com.sun.jna.ptr.PointerByReference;

public class EnumerateWindows {
    private static final int MAX_TITLE_LENGTH = 1024;

    public static void main(String[] args) throws Exception {
        char[] buffer = new char[MAX_TITLE_LENGTH * 2];
        GetWindowTextW(GetForegroundWindow(), buffer, MAX_TITLE_LENGTH);
        System.out.println("Active window title: " + Native.toString(buffer));

        PointerByReference pointer = new PointerByReference();
        GetWindowThreadProcessId(GetForegroundWindow(), pointer);
        Pointer process = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, false, pointer.getValue());
        GetModuleBaseNameW(process, null, buffer, MAX_TITLE_LENGTH);
        System.out.println("Active window process: " + Native.toString(buffer));
    }

    static class Psapi {
        static { Native.register("psapi"); }
        public static native int GetModuleBaseNameW(Pointer hProcess, Pointer hmodule, char[] lpBaseName, int size);
    }

    static class Kernel32 {
        static { Native.register("kernel32"); }
        public static int PROCESS_QUERY_INFORMATION = 0x0400;
        public static int PROCESS_VM_READ = 0x0010;
        public static native int GetLastError();
        public static native Pointer OpenProcess(int dwDesiredAccess, boolean bInheritHandle, Pointer pointer);
    }

    static class User32DLL {
        static { Native.register("user32"); }
        public static native int GetWindowThreadProcessId(HWND hWnd, PointerByReference pref);
        public static native HWND GetForegroundWindow();
        public static native int GetWindowTextW(HWND hWnd, char[] lpString, int nMaxCount);
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

来自分类Dev

在Mac上使用C#获取活动窗口信息

来自分类Dev

链接标记窗口信息

来自分类Dev

Go / Golang试图通过syscall获取窗口信息。(例如在EnumWindows等中)

来自分类Linux

X11-XCB:窗口信息不是最新的吗?

来自分类Dev

使用Swift 4.1在Google地图上自定义窗口信息

来自分类Dev

用角度6中的接口信息填充字符串数组

来自分类Dev

使用Windows API枚举端口时如何获取扩展端口信息

来自分类Java

有什么方法可以在netty中获取端口信息吗?

来自分类Dev

如何从IDialogContext获取活动信息

来自分类Dev

Nestjs MongoDb模式/接口信息重复

来自分类Linux

skb中的端口信息与tcpdump的端口信息不匹配

来自分类Java

Java的:从适配器获取信息到活动如有单选按钮被点击或不

来自分类Dev

Autohotkey获取当前活动子窗口的宽度

来自分类Linux

在X中获取活动的窗口标题

来自分类Dev

获取Wayland Weston中活动窗口的列表

来自分类Dev

通过部分URL获取活动的IE窗口

来自分类Dev

获取当前活动窗口的线程ID

来自分类Dev

如何解释Docker容器的端口信息

来自分类Dev

HandleFunc中的http主机和端口信息

来自分类Dev

试图用javascript获取窗口宽度

来自分类Dev

从Flutter应用程序获取Firebase活动信息

来自分类Dev

如何从Google日历获取活动详细信息

来自分类Dev

从Google+信息页获取所有活动并访问内容

来自分类Dev

WooCommerce订阅-获取活动的订户信息以显示在表格中

来自分类Dev

在X11 Haskell库中获取活动窗口标题

来自分类Dev

如何在GNOME中获取活动窗口的监视器?

来自分类Dev

如何使用Swift和Cocoa获取当前活动窗口

来自分类Dev

可访问的弹出窗口以获取其他帮助信息

来自分类Java

用Java8收集统计信息

TOP 榜单

热门标签

归档