用途
使用java程序,操作windows窗口程序
依赖
<dependency>
<groupId>net.java.dev.jna</groupId>
<artifactId>jna-platform</artifactId>
<version>4.4.0</version>
</dependency>
官方文档
API
前置
// 导包
import com.sun.jna.platform.win32.User32;
import com.sun.jna.platform.win32.WinDef;
import com.sun.jna.platform.win32.WinUser;
import java.awt.*;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
// 静态属性
public static User32 instance = User32.INSTANCE;
private static String lpWindowName = "Wind金融终端..Everest";
查找窗口
使用
WinDef.HWND hwnd = instance.FindWindow(null, lpWindowName);
说明
HWND FindWindow(String lpClassName, String lpWindowName);
lpClassName 设为null
lpWindowName windows 窗口标题
HWND 返回值:窗体句柄
显示前置窗口
使用
// 显示窗口
log.info("显示窗口.");
instance.ShowWindow(hwnd, WinUser.SW_RESTORE);
// 前置窗口
instance.SetForegroundWindow(hwnd);
说明
显示窗口
boolean ShowWindow(HWND hWnd, int nCmdShow);
hWnd 窗体句柄
nCmdShow 控制窗口如何显示
boolean 返回值:方法是否调用成功
前置窗口
boolean SetForegroundWindow(HWND hWnd);
前置并激活窗口
获取窗口[矩形]及大小
使用
/**
* 获取矩形
*
* @param hwnd
* @return
*/
private static WinDef.RECT getRect(WinDef.HWND hwnd) {
WinDef.RECT winRect = new WinDef.RECT();
instance.GetWindowRect(hwnd, winRect);
return winRect;
}
/**
* 获取宽度
* @param rect
* @return
*/
private static int getWidth(WinDef.RECT rect) {
return rect.right - rect.left;
}
/**
* 获取高度
* @param rect
* @return
*/
private static int getHeight(WinDef.RECT rect) {
return rect.bottom - rect.top;
}
/**
* 获取宽度
* @param hwnd
* @return
*/
private static int getWidth(WinDef.HWND hwnd) {
WinDef.RECT rect = getRect(hwnd);
return getWidth(rect);
}
说明
可根据窗口宽度判断是真正否打开窗口
getWidth(hwnd) != 0
设置窗口大小
使用
log.info("设置窗口大小.");
instance.SetWindowPlacement(hwnd, new WinUser.WINDOWPLACEMENT());
instance.SetWindowPos(hwnd, null, 0, 0, 800, 900, 0x40);
说明
设置窗口特点状态
BOOL SetWindowPlacement(HWND hwnd, WINDOWPLACEMENT lpwndpl);
hwnd 窗体句柄
lpwndpl 恢复,最小化,最大化,暂不清除使用方式。
设置窗口位置
boolean SetWindowPos(HWND hWnd, HWND hWndInsertAfter, int X, int Y, int cx,
int cy, int uFlags);
hWnd 窗口句柄
hWndInsertAfter z层级上,在此参数窗口之前显示
X 左边距,坐标
Y 上边距,坐标
cx 宽度(像素)
cy 高度(像素)
uFlags 窗口大小和位置标志 SWP_SHOWWINDOW,0x0040 ,Displays the window.