使用 Java 获取应用名称 运行
Get the Apps name running using Java
我使用
获取所有进程
import java.io.*;
public class test {
/**
* Creates a new instance of <code>test</code>.
*/
public test() {
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
String line;
try {
Process p = Runtime.getRuntime().exec("tasklist.exe");
BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));
while ((line = input.readLine()) != null)
{
System.out.println(line);
}
input.close();
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
}
但我只需要在 windows 上列出应用程序 运行 的名称。
例如Teamviewer、GoogleChrome等
是否可以使用此 Java 流程?我该怎么做?
假设您要在 "Applications" 中的任务管理器中查找任务的名称。应用程序的名称是 tasklist 命令结果中的那些条目,它们具有 "Window Title",您只能在详细模式 运行 tasklist
中获得
tasklist.exe /V
如果您希望结果更容易解析,您应该使用 /NH
标志生成 CSV 输出以省略 header:
的显示
tasklist.exe /V /NH /FO CSV
现在您可以提取每行的第 9 个元素
String[] elements = line.split(",");
if (!"\"N/A\"".equals(elements[8])){
System.out.println(elements[8]);
}
也许您需要对 tasklist 命令应用一些过滤以获得准确的应用程序,tasklist /?
将为您提供详细信息。
我发现使用 vbscript 的效果最好。从任务列表中过滤结果似乎很棘手。尝试创建一个扩展名为 vbs 的文件,内容如下:
Set Word = CreateObject("Word.Application")
Set Tasks = Word.Tasks
Set fso = CreateObject ("Scripting.FileSystemObject")
Set stdout = fso.GetStandardStream (1)
For Each Task in Tasks
If Task.Visible Then
stdout.WriteLine Task.Name
End If
Next
Word.Quit
现在只需将您的代码更改为 运行 cscript 而不是 tasklist:
Process p = Runtime.getRuntime().exec("cscript C:\<path to your vbsfile>\test.vbs");
更正: 从 if 语句中删除了 Tasks(Task).WindowState=1。此过滤器过滤掉除最大化 windows.
之外的所有内容
注意:输出仍然与任务管理器不同。但这是微软定义获取应用程序列表的方式:https://technet.microsoft.com/en-us/library/ff405673.aspx
我使用
获取所有进程import java.io.*;
public class test {
/**
* Creates a new instance of <code>test</code>.
*/
public test() {
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
String line;
try {
Process p = Runtime.getRuntime().exec("tasklist.exe");
BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));
while ((line = input.readLine()) != null)
{
System.out.println(line);
}
input.close();
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
}
但我只需要在 windows 上列出应用程序 运行 的名称。
例如Teamviewer、GoogleChrome等
是否可以使用此 Java 流程?我该怎么做?
假设您要在 "Applications" 中的任务管理器中查找任务的名称。应用程序的名称是 tasklist 命令结果中的那些条目,它们具有 "Window Title",您只能在详细模式 运行 tasklist
中获得tasklist.exe /V
如果您希望结果更容易解析,您应该使用 /NH
标志生成 CSV 输出以省略 header:
tasklist.exe /V /NH /FO CSV
现在您可以提取每行的第 9 个元素
String[] elements = line.split(",");
if (!"\"N/A\"".equals(elements[8])){
System.out.println(elements[8]);
}
也许您需要对 tasklist 命令应用一些过滤以获得准确的应用程序,tasklist /?
将为您提供详细信息。
我发现使用 vbscript 的效果最好。从任务列表中过滤结果似乎很棘手。尝试创建一个扩展名为 vbs 的文件,内容如下:
Set Word = CreateObject("Word.Application")
Set Tasks = Word.Tasks
Set fso = CreateObject ("Scripting.FileSystemObject")
Set stdout = fso.GetStandardStream (1)
For Each Task in Tasks
If Task.Visible Then
stdout.WriteLine Task.Name
End If
Next
Word.Quit
现在只需将您的代码更改为 运行 cscript 而不是 tasklist:
Process p = Runtime.getRuntime().exec("cscript C:\<path to your vbsfile>\test.vbs");
更正: 从 if 语句中删除了 Tasks(Task).WindowState=1。此过滤器过滤掉除最大化 windows.
之外的所有内容注意:输出仍然与任务管理器不同。但这是微软定义获取应用程序列表的方式:https://technet.microsoft.com/en-us/library/ff405673.aspx