.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