当前位置: 首页 > 知识库问答 >
问题:

从任务栏最大化java进程

薄高懿
2023-03-14

如果我在任务栏中最小化了一个进程,有没有办法从java中最大化它?

我知道这个过程的名字,但有可能吗?

共有1个答案

司空温书
2023-03-14

你最好的选择可能是使用视窗应用编程接口。我以前用过Java本机访问来完成这样的任务。我发现这个库非常方便。

使用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函数名完全匹配。如果您想使用Java风格的方法名(camelCase而不是PascalCase),则需要一个进行更改的自定义函数映射器(使用示例,类定义)

要查找并显示您的窗口(注意,我还没有对此进行测试,如果它不起作用,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());
        }
    }
}

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

如果你想通过枚举所有的过程来找到你感兴趣的过程,你可以从我的lacuna项目,windows/WindowsPidEnumerator中找到一些例子。java和windows/WindowsNativeProcessCollector。java文件可能很有用。不过,值得一提的是,这是一个课程项目,它有许多令人厌恶的抽象层。

 类似资料:
  • 当我最大化我的应用程序时,我想隐藏任务栏。它以全屏模式启动,并带有隐藏的任务栏(在MainWindow.xaml中定义,使用以下代码定义): 我想能够得到应用程序回到正常窗口模式,然后回到全屏隐藏任务栏。 当我单击标题栏中的最大化按钮时,应用程序进入全屏模式,但任务栏仍然可见。我已经尝试将ResizeMode设置为NoResize,但它对我不起作用。 下面是我的代码:

  • 问题内容: 我在jFrame中使用和。这很好用,但是现在当我最大化框架时,即使任务栏不可见,它也会散布在整个窗口中。如何使框架不隐藏任务栏? 另外,当我最大化最小化我的帧时,光标会多次更改为该值,这通常用于当光标位于帧的边界时更改帧的大小。有什么我可以做的吗? 一小段代码即可重现内容: 问题答案: 这是一个已知的错误:http : //bugs.sun.com/bugdatabase/view_b

  • 本文向大家介绍WinForm实现窗体最大化并遮盖任务栏的方法,包括了WinForm实现窗体最大化并遮盖任务栏的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了WinForm实现窗体最大化并遮盖任务栏的方法。分享给大家供大家参考。具体实现方法如下: 调用: 希望本文所述对大家的C#程序设计有所帮助。

  • 本文向大家介绍C#设置窗体最大化且不遮挡任务栏的方法,包括了C#设置窗体最大化且不遮挡任务栏的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#设置窗体最大化且不遮挡任务栏的方法。分享给大家供大家参考。具体实现方法如下: 希望本文所述对大家的C#程序设计有所帮助。

  • 运行Excel2010,我可以肯定总是在这个版本上运行这些表单,因为它只会在我工作的终端计算机上本地访问。 null 我一直在仔细研究,试图让这件事奏效,但没有任何效果。到目前为止,我的理解是我需要实现ITaskbarList3接口,它通常在Windows API中找到。从我发现的代码中可以看出如何使它工作,一旦暗示了,其余的似乎相当容易,而且很容易解释。 我完全被限制使用Excel作为代码的基础