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, TargetFROM Win32_ShortcutFileWHERE 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 閱讀(...) 評論(...) 編輯 收藏轉載于:https://www.cnblogs.com/ahdung/archive/2013/06/07/3123689.html
總結
以上是生活随笔為你收集整理的C#通过获取快捷方式指向目标的小示例触碰WMI的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Oracle通过OCI批量加载需要注意的
- 下一篇: 用libevent实现简易的telnet