zoukankan      html  css  js  c++  java
  • C#通过获取快捷方式指向目标的小示例触碰WMI

    .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

  • 相关阅读:
    洛谷 P2421 [NOI2002]荒岛野人
    POJ 2115 C Looooops
    POJ 3292 Semi-prime H-numbers
    [网络流24题]负载平衡问题(费用流)
    [网络流24题]骑士共存问题
    POJ 3281 Dining
    洛谷 1306斐波那契公约数
    ELK+Filebeat 安装配置入门
    一个JS内存泄露实例分析
    Node.js 事件循环
  • 原文地址:https://www.cnblogs.com/ahdung/p/3123689.html
Copyright © 2011-2022 走看看