上传备份

master
王兵 3 weeks ago
parent 87b19bd943
commit 3e5b47a61c

@ -0,0 +1,149 @@
package xyz.wbsite.jmacro.util;
import com.sun.jna.Native;
import com.sun.jna.Pointer;
import com.sun.jna.platform.win32.WinDef;
import com.sun.jna.platform.win32.WinUser;
import com.sun.jna.win32.W32APIOptions;
/**
*
* <p>
*
*
*
* @author wangbing
* @version 0.0.1
* @since 1.8
*/
public class WindowsUtil {
/**
* User32
* <p>
* Windows API user32.dll
*/
public interface User32 extends com.sun.jna.Library {
/**
* user32.dll
*/
User32 INSTANCE = Native.load("user32", User32.class, W32APIOptions.DEFAULT_OPTIONS);
/**
*
*
* @param lpClassName
* @param lpWindowName
* @return
*/
WinDef.HWND FindWindow(String lpClassName, String lpWindowName);
/**
* (ANSI )
*
* @param lpClassName
* @param lpWindowName
* @return
*/
WinDef.HWND FindWindowA(String lpClassName, String lpWindowName);
/**
*
*
* @param lpEnumFunc
* @param arg
* @return
*/
boolean EnumWindows(WinUser.WNDENUMPROC lpEnumFunc, Pointer arg);
/**
*
*
* @param hWnd
* @param lpString
* @param nMaxCount
* @return
*/
int GetWindowTextW(WinDef.HWND hWnd, char[] lpString, int nMaxCount);
/**
*
*
* @param hWnd
* @param lpString
* @param nMaxCount
* @return
*/
int GetClassNameW(WinDef.HWND hWnd, char[] lpString, int nMaxCount);
/**
*
*
* @param hWnd
* @return
*/
boolean IsWindowVisible(WinDef.HWND hWnd);
/**
*
*
* @param hWnd
* @param rect
* @return
*/
boolean GetWindowRect(WinDef.HWND hWnd, WinDef.RECT rect);
}
/**
*
*/
public static void printWindowInfoAll() {
printWindowInfo("");
}
/**
*
*
* @param keyword
*/
public static void printWindowInfo(String keyword) {
User32.INSTANCE.EnumWindows((hWnd, data) -> {
// 跳过隐藏窗口
if (!User32.INSTANCE.IsWindowVisible(hWnd)) {
return true;
}
char[] windowText = new char[512];
User32.INSTANCE.GetWindowTextW(hWnd, windowText, 512);
String title = Native.toString(windowText);
char[] className = new char[512];
User32.INSTANCE.GetClassNameW(hWnd, className, 512);
String clazz = Native.toString(className);
// 匹配关键词
if (title.contains(keyword)) {
WinDef.RECT rect = new WinDef.RECT();
if (User32.INSTANCE.GetWindowRect(hWnd, rect)) {
int width = rect.right - rect.left;
int height = rect.bottom - rect.top;
System.out.println("窗口标题: " + title);
System.out.println("类名: " + clazz);
System.out.println("位置: (" + rect.left + ", " + rect.top + ")");
System.out.println("大小: " + width + " x " + height);
System.out.println("----------------------");
}
}
return true;
}, null);
}
public static WinDef.HWND findWindow(String className, String windowName) {
return User32.INSTANCE.FindWindow(className, windowName);
}
public static void main(String[] args) {
printWindowInfo("微信");
}
}
Loading…
Cancel
Save

Powered by TurnKey Linux.