从Java将窗口置于前台

5
有没有办法使用Java将窗口置于前台?也许可以使用一些操作系统库吗?

请纠正标题 - bluish
3
你说的“激活窗口”是什么意思?你能详细说明一下吗? - jmj
他可能想从Java调用Win32的SetForegroundWindow。JNI有人会吗? - Janiek Buysrogge
3
如果“windows”是继承java.awt.Window的东西,“toFront”方法会将其置于当前JVM中其他窗口的前面。 - khachik
2
这是一个无法回答的问题,因为它目前的表述不够清晰。 - Hovercraft Full Of Eels
显示剩余4条评论
3个回答

4
似乎这是可能的,但你的解决方案会非常依赖于操作系统。 理论上,可以通过以下顺序调用win32 API 来实现:
  1. FindWindow 函数
  2. ShowWindow 函数 或者,
  3. BringWindowToTop 函数
现在问题来了,“如何从Java中调用它们?”好吧,所有上述函数都在user32.dll中定义,并且可以通过JNA访问。
一些使用JNA引用user32 API的示例:
  1. 如何使用JNI或JNA读取窗口标题?
  2. 使用Java调用User32.dll的FindWindow方法

使用谷歌查找更多信息。

希望这能有所帮助。


谢谢Favonius,我会证明它的。 - Lobo
请问如何知道哪个DLL执行了哪些函数?有没有什么方法可以知道呢? - SmartSolution

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);
 }
}


0

SWT 对 Win32 调用非常好。

import org.eclipse.swt.internal.win32.OS;

@SuppressWarnings("restriction")

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接