我试图使用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);
}
也许我以错误的方式解决这个问题?任何帮助将不胜感激。
答案 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