【问题标题】:Bring window to front from Java从 Java 中将窗口置于前面
【发布时间】:2010-12-17 13:48:09
【问题描述】:

有没有办法使用 Java 将窗口置于最前面?也许使用一些操作系统库?

【问题讨论】:

  • 请更正标题
  • 激活窗口是什么意思,能详细说明一下吗?
  • 我固定了标题,我认为他的意思是把一个窗口带到前面,但我不确定..
  • 如果“windows”是继承java.awt.Window的东西,toFront方法会将它带到当前JVM中另一个窗口的前面。
  • 这是一个无法回答的问题,因为它目前正在编写。

标签: java dll window desktop


【解决方案1】:

这似乎是可能的,但是您的解决方案将非常特定于操作系统。

理论上可以通过按以下顺序调用win32 API来完成:

  1. FindWindow Function
  2. ShowWindow Function 或者,
  3. BringWindowToTop Function

现在问题来了“如何从 java 中调用它们?”。以上所有函数都在user32.dll 中定义,可以通过JNA 访问。

使用 JNA 对 user32 API 的一些示例引用是:

  1. How can I read the window title with JNI or JNA?
  2. call FindWindow method of User32.dll using java

使用谷歌查找更多信息。

希望这会有所帮助。

【讨论】:

  • 感谢 Favonius,我会证明这一点的。
  • 你能告诉我们如何知道哪个 DLL 正在执行哪种功能吗?有什么办法知道吗?
【解决方案2】:

package focus;

import com.sun.jna.Native;
import com.sun.jna.platform.win32.WinDef.HWND;
import com.sun.jna.win32.StdCallLibrary;

public class ForegroundWindow {
	private interface User32 extends StdCallLibrary {
		final User32 instance = (User32) Native.loadLibrary("user32", User32.class);

		boolean SetForegroundWindow(HWND handle);

		HWND FindWindowA(String className, String windowName);

		HWND GetForegroundWindow();
	}

	private String getWindowName(String winName) {
		String winText = "";
		if (winText.contains(winName)) {
			return winText;
		}
		return null;
	}

	public boolean bringWindowToFront(String className, String winName) {
		HWND hWnd = User32.instance.FindWindowA(className, getWindowName(winName));
		if (hWnd == null) {
			return false;
		}
		return User32.instance.SetForegroundWindow(hWnd);
	}
}

【讨论】:

    【解决方案3】:

    SWT 非常适合 Win32 调用。

    导入 org.eclipse.swt.internal.win32.OS;

    @SuppressWarnings("限制")

    int hwnd = OS.FindWindowW(null, "Titlein".toCharArray());

    【讨论】:

      猜你喜欢
      • 2011-11-04
      • 2012-10-08
      • 2011-10-07
      • 1970-01-01
      • 2011-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多