Java调用Win32实现操作其他程序窗口
来源:互联网 发布:2016淘宝好评返现规则 编辑:程序博客网 时间:2024/06/04 01:39
1、用到的包
①jna-4.4.0.jar和jna-platform-4.4.0(下载地址)
②JNative.jar(下载地址)
2、使用方式:向QQ输入文本为例
public class QQTest {public static void main(String[] args) {// 第一个参数是Windows窗体的窗体类,第二个参数是窗体的标题。HWND hwnd = User32.INSTANCE.FindWindow(null, "QQ");if (hwnd == null) {System.out.println("QQ is not running");} else {User32.INSTANCE.ShowWindow(hwnd, 9); // SW_RESTOREUser32.INSTANCE.SetForegroundWindow(hwnd); // bring to frontWinDef.RECT qqwin_rect = new WinDef.RECT();User32.INSTANCE.GetWindowRect(hwnd, qqwin_rect);int qqwin_width = qqwin_rect.right - qqwin_rect.left;int qqwin_height = qqwin_rect.bottom - qqwin_rect.top;User32.INSTANCE.MoveWindow(hwnd, 0, 0, qqwin_width, qqwin_height, true);User32.INSTANCE.PostMessage(hwnd, User32.WM_CLOSE, null, null);String username = "11111111111";for (Character c : username.toCharArray())sendChar(c);@formatter:offUser32.INSTANCE.GetForegroundWindow(); // 获取现在前台窗口WinDef.RECT qqwin_rect = new WinDef.RECT();User32.INSTANCE.GetWindowRect(hwnd, qqwin_rect);int qqwin_width = qqwin_rect.right - qqwin_rect.left;int qqwin_height = qqwin_rect.bottom - qqwin_rect.top;User32.INSTANCE.MoveWindow(hwnd, 700, 100, qqwin_width, qqwin_height, true);for (int i = 700; i > 100; i -= 10) {User32.INSTANCE.MoveWindow(hwnd, i, 100, qqwin_width, qqwin_height, true);try {Thread.sleep(10);} catch (Exception e) {}}User32.INSTANCE.PostMessage(hwnd, WinUser.WM_CLOSE, null, null);@formatter:on}}private static WinUser.INPUT input = new WinUser.INPUT();private static void sendChar(char ch) {input.type = new WinDef.DWORD(WinUser.INPUT.INPUT_KEYBOARD);input.input.setType("ki");input.input.ki.wScan = new WinDef.WORD(0);input.input.ki.time = new WinDef.DWORD(0);input.input.ki.dwExtraInfo = new BaseTSD.ULONG_PTR(0);// Pressinput.input.ki.wVk = new WinDef.WORD(Character.toUpperCase(ch)); // 0x41input.input.ki.dwFlags = new WinDef.DWORD(0); // keydownUser32.INSTANCE.SendInput(new WinDef.DWORD(1), (WinUser.INPUT[]) input.toArray(1), input.size());// Releaseinput.input.ki.wVk = new WinDef.WORD(Character.toUpperCase(ch)); // 0x41input.input.ki.dwFlags = new WinDef.DWORD(2); // keyupUser32.INSTANCE.SendInput(new WinDef.DWORD(1), (WinUser.INPUT[]) input.toArray(1), input.size());}}2、自定义User32接口发送文本(原Use32接口只允许十进制或十六进制数字)
public interface MyUser32 extends StdCallLibrary, WinUser {static MyUser32 INSTANCE = (MyUser32) Native.loadLibrary("user32", MyUser32.class, W32APIOptions.DEFAULT_OPTIONS);int SendMessage(HWND hWnd, int Msg, int wParam, String lParam);// http://msdn.microsoft.com/en-us/library/windows/desktop/ms633573(v=vs.85).aspxinterface WindowProc extends StdCallCallback {LRESULT callback(HWND hWnd, int uMsg, WPARAM wParam, LPARAM lParam);}// http://msdn.microsoft.com/en-us/library/windows/desktop/ms633591(v=vs.85).aspxWindowProc SetWindowLongPtr(HWND hWnd, int nIndex, WindowProc dwNewLong);// http://msdn.microsoft.com/en-us/library/windows/desktop/ms633584(v=vs.85).aspxWindowProc GetWindowLongPtr(HWND hWnd, int nIndex);}
阅读全文
0 0
- Java调用Win32实现操作其他程序窗口
- win32中C++隐藏窗口调用程序
- C#操作移动其他程序窗口
- C#操作移动其他程序窗口
- win32程序的变形窗口的实现
- python操作子进程,调用其他程序
- 在JAVA程序中调用其他程序
- Win32 Asm 窗口程序
- Win32程序窗口过程
- Win32窗口程序实例
- Win32窗口程序实例
- 捕捉Win32窗口操作
- QTP调用win32 API 实现窗口的最小最大化
- java通过runtime调用其他程序
- Java调用其他程序时waitFor()阻塞
- Java调用其他程序时waitFor()阻塞
- Java调用其他程序时waitFor()阻塞
- 程序调用其他程序
- oracle数据库sql语句03
- Spring Boot(五):如何在单元测试中自动回滚数据
- 【网络编程】TCP通讯时序详解(三次握手和四次挥手)
- JAVA集合类
- JavaScript对象——遍历
- Java调用Win32实现操作其他程序窗口
- Python 异常处理
- 玩够了 ,该学习了 不要再懒下去了
- 2017-10-19当前面临的主要问题及相关调整
- mac 安装nginx
- Ajax登录效果源码
- JAVA基础-语言
- linux下终端配置透明度
- Docker的革命性变革-宣布Docker企业版