有個朋友在處理列印時,獲得印表機資訊和列印任務隊列時遇到了點麻煩。本想用API實現,回去粗略研究了下 System.Management 命名空間,發現這裡面有相當多有用的功能,省去了調用API的麻煩。
WMI中的Win32類監控和管理系統的硬體和特徵資訊,這些類一般在root/cimv2 WMI 命名空間中。
Win32類主要有一下幾類:
·Computer System Hardware Classes
·Operating System Classes
·Installed Applications Classes
·WMI Service Management Classes
·Performance Counters Classes
·Security Descriptor Helper Class
下面列出了常用資訊的類:
Win32_Processor // CPU 處理器Win32_PhysicalMemory // 實體記憶體Win32_Keyboard // 鍵盤Win32_PointingDevice // 點輸入裝置,如滑鼠Win32_DiskDrive // 硬碟Win32_CDROMDrive // 光碟片磁碟機Win32_BaseBoard // 主板Win32_BIOS // BIOS 晶片Win32_ParallelPort // 並口Win32_SerialPort // 串口Win32_SoundDevice // 多媒體設定Win32_USBController // USB 控制器Win32_NetworkAdapter // 網路介面卡Win32_NetworkAdapterConfiguration // 網路介面卡設定Win32_Printer // 印表機Win32_PrinterConfiguration // 印表機設定Win32_PrintJob // 印表機任務Win32_TCPIPPrinterPort // 印表機連接埠Win32_POTSModem // MODEM Win32_POTSModemToSerialPort // MODEM 連接埠Win32_DesktopMonitor // 顯示器Win32_VideoController // 顯卡細節。Win32_VideoSettings // 顯卡支援的顯示模式。Win32_TimeZone // 時區Win32_SystemDriver // 驅動程式Win32_DiskPartition // 磁碟分割Win32_LogicalDisk // 邏輯磁碟Win32_LogicalMemoryConfiguration // 邏輯記憶體配置Win32_PageFile // 系統頁檔案資訊Win32_PageFileSetting // 頁檔案設定Win32_BootConfiguration // 系統啟動配置Win32_OperatingSystem // 作業系統資訊Win32_StartupCommand // 系統自動啟動程式Win32_Service // 系統安裝的服務Win32_Group // 系統管理組Win32_GroupUser // 系統組帳號Win32_UserAccount // 使用者帳號Win32_Process // 系統進程Win32_Thread // 系統線程Win32_Share // 共用Win32_NetworkClient // 已安裝的網路用戶端Win32_NetworkProtocol // 已安裝的網路通訊協定
以獲得列印工作為例示範一下其使用方法:
Win32_PrintJob類的屬性欄位為:
class Win32_PrintJob : CIM_Job{ string Caption; string Color; string DataType; string Description; string Document; string DriverName; DateTime ElapsedTime; string HostPrintQueue; DateTime InstallDate; uint JobId; string JobStatus; string Name; string Notify; string Owner; uint PagesPrinted; uint PaperLength; string PaperSize; uint PaperWidth; string Parameters; string PrintProcessor; uint Priority; uint Size; DateTime StartTime; string Status; uint StatusMask; DateTime TimeSubmitted; uint TotalPages; DateTime UntilTime;
}
該類的方法有:
Pause();
Resume();
1.SQL語句檢索方法:
using System;using System.Management; class TestWMI{ public static void Main() { ManagementObjectSearcher s = new ManagementObjectSearcher("SELECT * FROM Win32_PrintJob"); foreach (ManagementObject m in s.Get()) { foreach (PropertyData p in m.Properties) { Console.WriteLine(p.Name + "--------" + p.Value); } } Console.ReadKey(); }}
2.執行個體化ManagementClass,獲得ManagementObjectCollection方法:
using System;using System.Management; class TestWMI{ public static void Main() { ManagementClass c = new ManagementClass("Win32_PrintJob"); ManagementObjectCollection co = c.GetInstances(); foreach (ManagementObject m in co) { foreach (PropertyData p in m.Properties) { Console.WriteLine(p.Name + "--------" + p.Value); } } }}
.NET對Win32 WMI進行了精彩的封裝,.NET 中 WMI 的編程模型出奇的一致,大大減少了編碼量和編程難度。
WMI Win32類的完整資訊及詳細列表請參考MSDN:
http://msdn2.microsoft.com/en-us/library/aa394084(VS.85).aspx