在Java中执行WMIC命令行参数

时间:2015-02-20 17:55:17

标签: java netbeans interface cmd wmic

我试图使用WMIC命令' DESKTOP'在应用程序中通过从接口实现的方法。在cmd中使用WMIC命令之前,首先输入WMIC'然后按回车键,因为我确定你们都知道。我可以这么做,但是在命令行进入WMIC模式后,我需要随后输入DESKTOP命令或任何其他WMIC命令(参见列表:http://ss64.com/nt/wmic.html)。这是我目前用于进入WMIC模式的被覆盖的方法代码:

@覆盖     public void Desktop(){

    try {
        Runtime rt = Runtime.getRuntime();
        String cmd = "cmd /c WMIC";

        Process pr = rt.exec(cmd);

}

也许我以错误的方式解决这个问题?任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

您需要获取您启动的流程的输出流并写入。

OutputStream os = pr.getOutputStream();
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(os));
bw.write("DESKTOP");
bw.newLine();
bw.flush();

如果你需要查看你开始的进程的输出/错误,你需要使用getInputStream()和getErrorStream()方法来获取输出/错误流并从中读取。

检查Process的javadoc以获取更多详细信息。

http://docs.oracle.com/javase/7/docs/api/java/lang/Process.html

特别注意这部分 -

  

默认情况下,创建的子进程没有自己的终端或   安慰。所有标准I / O(即stdin,stdout,stderr)操作   将被重定向到父进程,在那里可以访问它们   通过使用方法getOutputStream()获得的流,   getInputStream()和getErrorStream()。父进程使用这些   stream将输入提供给子进程并从子进程获取输出。因为   某些本机平台仅为标准提供有限的缓冲区大小   输入和输出流,无法及时写入输入流   或者读取子进程的输出流可能会导致子进程   阻止,甚至死锁。

答案 1 :(得分:0)

这是一个相当愚蠢的答案。

WMIC通常用于非交互模式。

wmic desktop get

但是你是一名程序员。因此你应该编程。

这是执行此操作的vbs脚本。帮助中包含C,VB,VBS和JScript中的示例脚本。

Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")

Set colItems = objWMIService.ExecQuery("Select * From Win32_Desktop")

For Each objItem in colItems
    msgbox objItem.Name & " " & objItem.Wallpaper
Next