通过java调用关闭win10资源管理器指定的文件夹窗口

问题描述

通过java关闭win10资源管理器指定的文件夹窗口

问题出现的环境背景及自己尝试过哪些方法

程序遍历当前win10资源管理器中所有的句柄,匹配上地址栏(指定的文件夹)如果窗口被打开,则关闭

相关代码

// 请把代码文本粘贴到下方(请勿用图片代替代码)
package com.yuntech.encryption;

import com.sun.jna.Native;
import com.sun.jna.Pointer;
import com.sun.jna.platform.win32.WinDef.HWND;
import com.sun.jna.platform.win32.WinUser;
import com.sun.jna.platform.win32.WinUser.WNDENUMPROC;
import com.sun.jna.win32.StdCallLibrary;
 
public class TryWithHWND {
   public interface User32 extends StdCallLibrary {
      User32 INSTANCE = (User32) Native.loadLibrary("user32", User32.class);
      boolean EnumWindows(WinUser.WNDENUMPROC lpEnumFunc, Pointer arg);
      int GetWindowTextA(HWND hWnd, byte[] lpString, int nMaxCount);
   }
 
   public static void main(String[] args) {
      final User32 user32 = User32.INSTANCE;
      user32.EnumWindows(new WNDENUMPROC() {
         int count = 0;
         @Override
         public boolean callback(HWND hWnd, Pointer arg1) {
            byte[] windowText = new byte[512];
            user32.GetWindowTextA(hWnd, windowText, 512);
            String wText = Native.toString(windowText);
 
            // get rid of this if block if you want all windows regardless of whether
            // or not they have text
            if (wText.isEmpty()) {
               return true;
            }
            if(wText.contains("test")) {
                System.out.println("testFolder:"+ wText);
            }
            System.out.println("Found window with text " + hWnd + ", total " + ++count
                  + " Text: " + wText);
            return true;
         }
      }, null);
   }
}


你期待的结果是什么?实际看到的错误信息又是什么?

阅读 4.3k
1 个回答
✓ 已被采纳新手上路,请多包涵

最终解决方式: 务必注意 引入包的版本 jna-platform-5.5.0.jar jna-5.5.0.jar JKD1.8

    /**
    * 
    * Func:通过窗口标题获取窗口句柄
    * Data: 2020-03-23
    * @param windowName
    * @return
    */
    public static void closewindow(String windowName){
        //通过窗口标题获取窗口句柄
        WinDef.HWND hWnd = com.sun.jna.platform.win32.User32.INSTANCE.FindWindow("CabinetWClass" ,windowName);
        if (hWnd==null)   //throw new RuntimeException("窗口不存在,请先运行程序");
            System.out.println("窗口不存在,请继续等待");
        else {
            // 0x10 关闭窗口信号    lresult 0 关闭成功
            LRESULT lresult= com.sun.jna.platform.win32.User32.INSTANCE.SendMessage(hWnd, 0X10, null, null);
            System.out.println("lresult:"+lresult);
        }
    }
推荐问题