从任务栏最大化 java 进程

2024-04-23

如果我的任务栏中有一个最小化的进程,有什么方法可以从java中最大化它吗?

我知道该过程的名称,但这可能吗?


您最好的选择可能是使用 Windows API。我用过Java 本机访问 https://github.com/java-native-access/jna之前执行过这样的任务。我发现图书馆非常方便。

使用 JNA,您要做的就是使用共享库 (DLL) 的导出函数声明一个接口,然后加载该库,从而代理该库。

我们感兴趣的 WinAPI 函数是以下 User32 函数:

HWND WINAPI FindWindow(LPCTSTR lpClassName, LPCTSTR lpWindowName); 

BOOL WINAPI ShowWindow(HWND hWnd, int  nCmdShow); 

我们的代理界面可能如下所示。该接口提供非常低级别的访问,因此在实践中您可能希望封装该功能。

import com.sun.jna.win32.StdCallLibrary;

interface User32 extends StdCallLibrary {
    // https://msdn.microsoft.com/en-us/library/windows/desktop/ms633499(v=vs.85).aspx
    int FindWindowA(String className, String windowName);
    // https://msdn.microsoft.com/en-us/library/windows/desktop/ms633548(v=vs.85).aspx
    boolean ShowWindow(int window, int command);
}

请注意,函数名称必须与 API 函数名称匹配exactly。如果您想使用 Java 风格的方法名称(camelCase 而不是 PascalCase),您需要一个自定义函数映射器来执行更改(使用示例 https://github.com/cxcorp/lacuna/blob/a94ea17d844f2081ae46bbb0f89d2f89b102f1ba/lacuna/lacuna-core/src/main/java/cx/corp/lacuna/core/LacunaBootstrap.java#L154, class 定义 https://github.com/cxcorp/lacuna/blob/a94ea17d844f2081ae46bbb0f89d2f89b102f1ba/lacuna/lacuna-core/src/main/java/cx/corp/lacuna/core/windows/winapi/CamelToPascalCaseFunctionMapper.java#L11)

要查找并显示您的窗口(请注意,我还没有对此进行测试,如果它不起作用,Windows API 文档将帮助您):

import com.sun.jna.Native;

public class Program {
    private static final int SW_RESTORE = 9;

    public static void main(String[] args) {
        User32 user32 = Native.loadLibrary("User32.dll", User32.class);
        int window = user32.FindWindowA(null, "Google Chrome");
        boolean success = user32.ShowWindow(window, SW_RESTORE);
        if (success) {
            System.out.println("Success");
        } else {
            System.out.println("Fail: " + Native.getLastError());
        }
    }
}

注意窗口名称也必须完全匹配,否则window将为 0 (NULL) 并且以下调用将失败。我也不确定 SW_RESTORE 是否单独工作或者是否需要另一个标志来配合它。

如果您想枚举所有流程以找到您感兴趣的流程,您可以查看我的一些示例lacuna project https://github.com/cxcorp/lacuna/tree/master/lacuna/lacuna-core/src/main/java/cx/corp/lacuna/core, windows/WindowsPidEnumerator.java 和 windows/WindowsNativeProcessCollector.java 文件可能有用。不过,请注意,这是一个课程项目,它具有令人厌恶的许多抽象层。

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

从任务栏最大化 java 进程 的相关文章

随机推荐