如何在JAVA程序中调用windows其他程序

虽然JAVA是平台无关性的,但是在企业中很多时候还是在为特定的系统在开发,会要求调用一些当前系统的其他程序或命令。最常见的是在WINDOWS中。其实JAVA是可以通过Runtime去调用系统中的一些程序的,下面是一个例子:

  try  {
            ps  =  Runtime.getRuntime().exec( " E:\\test.exe " );
             // ps = Runtime.getRuntime().exec("ipconfig");  ---- For execute windows commands
            
 // ps = Runtime.getRuntime().exec("E:\\test.bat"); ---- For run BAT files 
 
            BufferedReader in  =   new  BufferedReader( new    InputStreamReader(ps.getInputStream()));
            String inputLine; 
             while ((inputLine    =    in.readLine())    !=     null )  {  
                result    +=    inputLine + " \n " ;
            } 

            in.close();
            System.out.println( " Output: "   +  result);
            
        } 
catch (Exception ex)  {
            System.out.println( " Error "   +  ex.getMessage());
        }

上面的代码片断中后面一部分是在取返回的参数,如果不需要可以不取。不取的话可能也就不需要取得到Process了。用这个方法可以运行windows中的exe或者bat文件。

在vb中也可以通过句柄调用其他程序,因此可以在一个程序中调用其他程序。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Windows 11系统,应用窗口的标题格式为“应用名称 - 窗口标题”,因此可以通过遍历所有系统进程,查找指定应用的进程ID,然后获取该进程的主窗口句柄,最后调用Windows API获取窗口标题的方式来实现获取Windows 11应用窗口标题的功能。 具体实现步骤如下: 1. 获取指定应用的进程ID。可以使用Java的ProcessBuilder类执行命令行获取所有正在运行的进程列表,然后遍历列表查找指定应用的进程ID,例如: ```java public static int getProcessIdByName(String processName) throws IOException { Process process = Runtime.getRuntime().exec("tasklist"); BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream())); String line = null; while ((line = reader.readLine()) != null) { if (line.contains(processName)) { String[] parts = line.split("\\s+"); return Integer.parseInt(parts[1]); } } return -1; } ``` 2. 调用Windows API获取窗口标题。可以使用Java的JNI技术调用Windows API获取指定进程的主窗口句柄,然后调用GetWindowText API获取窗口标题,具体实现可参考以下C++代码: ```c++ #include <windows.h> #include <jni.h> JNIEXPORT jstring JNICALL Java_WindowTitleGetter_getWindowTitle(JNIEnv *env, jclass cls, jint pid) { HWND hwnd = NULL; char title[1024]; // 获取指定进程的窗口句柄 hwnd = GetTopWindow(NULL); while (hwnd != NULL) { DWORD processId; GetWindowThreadProcessId(hwnd, &processId); if (processId == pid) { DWORD style = GetWindowLong(hwnd, GWL_STYLE); if ((style & WS_VISIBLE) != 0) { break; } } hwnd = GetNextWindow(hwnd, GW_HWNDNEXT); } // 获取窗口标题 if (hwnd != NULL) { GetWindowTextA(hwnd, title, sizeof(title)); return env->NewStringUTF(title); } else { return env->NewStringUTF(""); } } ``` 3. 在Java调用getWindowTitle方法即可获取指定应用的窗口标题,例如: ```java String processName = "notepad.exe"; int pid = getProcessIdByName(processName); String title = WindowTitleGetter.getWindowTitle(pid); System.out.println(title); ``` 注意:该方法需要使用管理员权限运行程序

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值