这次负责一个小模块,做一个本地服务程序获取本机的硬件信息,组装成XML文件。
语言:Java
平台:Windows 2003及以上的各版本Windows
因为在Windows系统上有非常强大的WMIC(Windows ManagementInstrumentation)工具, WMIC工具获得本计算机的相关信息。
WMIC
WMIC使用了别名机制,通过我们可以理解的语言来操作复杂的WMI命名空间。通过这个这个工具我们可以用简单的WQL(类似SQL)语句,通过一个简单的Get命令就可以得到我们需要的信息。
比如
wmic os get name. //得到操作系统的名称。wmic logicaldisk get caption //获得磁盘的逻辑分区信息
WMIC 的使用基本不需要教程,因为它的帮助功能非常方便。在任何一个分级都可以通过 /?选项获得详细的帮助消息。
比如
wmic os get /?
获取计算机信息
由于java是跑在jvm上的,因此想要调用wmic需要先获的runtime对象,然后获得运行后的process的输入流,然后通过java对流的处理来处理获得数据。
Process proc = runtime.exec("cmd /c" + {wmic语句});InputStream input = proc.getInputStream();
我主要用到的是get语句,其结果会以 title n n result的格式呈现,因此为了处理方便,可以封装成bufferReader,然后通过两次Readline去掉前两行,直接获得结果数据。
BufferReader br = new BufferedReader(newInputStreamReader(proc.getInputStream());<span style="white-space:pre"></span>for(int i = 0; i < 2; i ++) { //两次循环去掉标题栏,只获取结果数据 <span style="white-space:pre"></span>br.readLine();<span style="font-family: Arial, Helvetica, sans-serif;"> } </span><span style="white-space:pre"></span>result += br.readLine(); //结果数据只占一行,所以一次读完
另外wmic还有一个很重要的list语句,其使用同样可以通过list /? 得到帮助。一般对于某个alias可以先 wmic [alias] list brief 获得其主要参数,如果结果不满足需求还可以直接list full,这里的full是缺省参数。