AhDung

/*追求代码质量的野生码农*/

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

.Net本身没有封装对快捷方式的操作类,所以要在C#中操作快捷方式,需要借助“外力”。市面上常见的方法是通过Windows Script Host Object Model这个COM组件来完成。这种方法的缺憾是你的程序必须带上Interop.IWshRuntimeLibrary.dll这个文件(不过也许可以把这个dll并入exe中再动态加载什么的)。

Anyway~今天说的是另一个途径——WMI(Windows Management Instrumentation),这个东东我了解不深,只知道很强大,几乎涉及win系统软硬件资源的方方面面,使用一种叫WQL的查询语言(SQL它妹)获取资源信息,我也是现学现用,抛砖引玉,告知还不知道的童鞋们除了Win32 API,还有WMI这货可以解决某些.Net解决不了的问题,所以~WMI大牛撸过即可。

小二~上代码: 

using System;
using System.Management;//需先引用System.Management.dll程序集

class Program
{
    static void Main(string[] args)
    {
        string scope = @"\\.\root\cimv2";//指定WMI的命名空间,如果不指定,默认就是这货,不区分大小写

         string wql = @"SELECT Name, Target
                       FROM Win32_ShortcutFile
                       WHERE Name = 'C:\\Users\\Administrator\\Desktop\\newemax参数.xlsx.lnk'";
        //构建WQL语句,我说是SQL它妹不是乱盖,WQL只有SELECT和WHERE,还有个GROUP,但似乎跟SQL的GROUP BY不是一回事

         ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, wql);//构建一个查询器
         ManagementObjectCollection objs = searcher.Get();//调用查询器的Get方法以执行查询,并将查询结果装入一个对象集合

         //遗憾的是该集合不支持[]下标索引,要获取里面的对象必须foreach,即使你明确知道里面只有1个对象,操蛋~
        foreach (ManagementBaseObject obj in objs)
        {
           //通过对象["属性名"]的方式获取该属性的值,可以理解为上述WQL语句中SELECT后的字段名
             Console.WriteLine("{0} 指向的目标:{1}", obj["name"], obj["Target"]);
        }

        Console.ReadKey();
    }
}

WMI的世界自成一体,也有命名空间,类,对象/实例,属性,方法等概念。我目前倾向用数据库的结构来理解它:WMI就好比一个SQL实例,不同的命名空间就是SQL实例上不同的库,而WMI的类就是库里面的表,类的属性就是表里的字段,其余的方法什么的我目前还没概念,就不妄言了。

最后,推荐几个WMI工具:

1、系统自带。运行wbemtest

2、WMI Explorer。http://www.ks-soft.net/hostmon.eng/wmi/index.htm

3、还是WMI Explorer,只是主人不同,来自脚本工具大家人户SAPIEN,但目前在它官网找不到该工具的下载入口,好在这儿可以下:http://www.softpedia.com/get/System/System-Info/SAPIEN-WMI-Explorer.shtml

posted on 2013-06-07 13:40  ahdung  阅读(1597)  评论(1编辑  收藏  举报