如何用代码实现精准切换指定程序窗口?

程序窗口精准切换的代码实现方法

在日常电脑操作中,我们经常需要在不同的程序窗口间切换,Alt+Tab是常用的快捷键。但如果需要更精确地控制,例如只切换到特定程序的窗口,则需要借助代码实现。

实现步骤:

此方法的核心在于三个Windows API函数:

  1. 获取窗口句柄 (FindWindow): 使用FindWindow函数找到目标程序窗口的唯一标识符——窗口句柄。
  2. 显示窗口 (ShowWindow): 如果目标窗口最小化或隐藏,使用ShowWindow函数将其显示。
  3. 设置前置窗口 (SetForegroundWindow): 最后,使用SetForegroundWindow函数将目标窗口置于最前。

代码示例 (Java):

以下Java代码演示如何将焦点切换到标题为"微信"的窗口:

import com.sun.jna.Native;
import com.sun.jna.Platform;
import com.sun.jna.Pointer;
import com.sun.jna.win32.StdCallLibrary;
import com.sun.jna.win32.WinDef;

public class WindowSwitcher {

    public interface User32 extends StdCallLibrary {
        User32 INSTANCE = Native.load("user32", User32.class);

        WinDef.HWND FindWindow(String className, String windowTitle);
        boolean IsWindowVisible(WinDef.HWND hWnd);
        boolean ShowWindow(WinDef.HWND hWnd, int nCmdShow);
        boolean SetForegroundWindow(WinDef.HWND hWnd);
        int SW_SHOWNORMAL = 1;
        int SW_SHOWMAXIMIZED = 3;
        int SW_SHOWMINIMIZED = 2;

    }

    public static void main(String[] args) {
        switchToWindow("微信", 0); // 0: Normal, 1: Maximized, 2: Minimized
    }

    public static void switchToWindow(String windowTitle, int windowStat

e) { int state = windowState; switch (state) { case 1: state = User32.SW_SHOWMAXIMIZED; break; case 2: state = User32.SW_SHOWMINIMIZED; break; default: state = User32.SW_SHOWNORMAL; } User32 user32 = User32.INSTANCE; WinDef.HWND hWnd = user32.FindWindow(null, windowTitle); if (hWnd != null && user32.IsWindowVisible(hWnd)) { user32.ShowWindow(hWnd, state); user32.SetForegroundWindow(hWnd); } else { System.out.println("窗口未找到或不可见"); } } }

注意: 这段代码依赖于JNA库,需要在项目中添加相应的依赖。 此外,该代码仅适用于Windows系统。 windowState 参数控制窗口显示状态:0为正常,1为最大化,2为最小化。 如果目标窗口不存在或不可见,代码会打印错误信息。 使用前请确保已正确配置JNA库。