用途:在內網中遠程獲得計算機的配置信息;
網絡環境:基於域管理的網絡環境;
開發環境:C# VSTO
客戶機要求:XP以上操作系統,同時啓動Windows Managerment服務,可以通過組策略開啓所有客戶機的該項服務。
* 由SharpDevelop創建。
* 用戶: eric
* 日期: 2012-02-24
* 時間: 11:07
*
* 要改變這種模板請點擊 工具|選項|代碼編寫|編輯標準頭文件
*/
using System;
using System.Collections.Generic;
using System.Management;
using System.Windows.Forms ;
namespace RomateComputerManagement
{
/// <summary>
/// Description of MyClass.
/// </summary>
public class RomateComputerManagement
{
public System.Management.ManagementScope Connection(System.Management.ManagementScope ms)
{
try
{
//設定生成的WMI所需的所有設置
System.Management.ConnectionOptions Conn = new ConnectionOptions ( ) ;
//設定用於WMI連接操作的用戶名
Conn.Username = AdminName ;
//設定用戶的口令
Conn.Password = Password ;
//設定用於執行WMI操作的範圍
ms = new ManagementScope ( "\\\\" + RomoteIp + "\\root\\cimv2" , Conn ) ;
ms.Connect();
if(ms.IsConnected)
return ms;
else
return null;
}
catch( Exception ee )
{
//MessageBox.Show ( "連接" + RomoteIp + "出錯,出錯信息爲:" + ee.Message ,"出現錯誤!" ) ;
return null;
}
}
public string GetProcessorInfo()
{
System.Management.ManagementScope ms=new System.Management.ManagementScope();
ms=Connection(ms);
if(ms == null)
return "ERR_CONNECTION";
string cpu="";
try
{
ObjectQuery Query = new ObjectQuery ( "select * from Win32_Processor" ) ;
//WQL語句,設定的WMI查詢內容和WMI的操作範圍,檢索WMI對象集合
ManagementObjectSearcher Searcher = new ManagementObjectSearcher ( ms , Query ) ;
//異步調用WMI查詢
ManagementObjectCollection ReturnCollection = Searcher.Get ( ) ;
//通過對產生的WMI的實例集合進行檢索,
foreach ( ManagementObject Return in ReturnCollection )
{
cpu=cpu + "CPU:" + Return["NAME"].ToString ( ).Trim() +" " ;
}
return cpu;
}
catch(Exception ee)
{
// MessageBox.Show ( "獲得CPU信息出錯,出錯信息爲:" + ee.Message ,"出現錯誤!" ) ;
return "ERR_GET";
}
}
public string GetBaseBoardInfo()
{
System.Management.ManagementScope ms=new System.Management.ManagementScope();
ms=Connection(ms);
if(ms == null)
return "ERR_CONNECTION";
string BaseBoard="";
try
{
ObjectQuery Query = new ObjectQuery ( "select * from Win32_BaseBoard" ) ;
//WQL語句,設定的WMI查詢內容和WMI的操作範圍,檢索WMI對象集合
ManagementObjectSearcher Searcher = new ManagementObjectSearcher ( ms , Query ) ;
//異步調用WMI查詢
ManagementObjectCollection ReturnCollection = Searcher.Get ( ) ;
//通過對產生的WMI的實例集合進行檢索,
foreach ( ManagementObject Return in ReturnCollection )
{
BaseBoard=( "主板:" + Return["SERIALNUMBER"].ToString ( ).Trim()+";"+Return["PRODUCT"].ToString ( ).Trim()+";"+Return["MANUFACTURER"].ToString ( ).Trim() ) ;
}
return BaseBoard;
}
catch(Exception ee)
{
// MessageBox.Show ( "獲得主板信息出錯,出錯信息爲:" + ee.Message ,"出現錯誤!" ) ;
return "ERR_GET";
}
}
public string GetDisplayConfigurationInfo()
{
System.Management.ManagementScope ms=new System.Management.ManagementScope();
ms=Connection(ms);
if(ms == null)
return "ERR_CONNECTION";
string Display="";
try
{
ObjectQuery Query = new ObjectQuery ( "select * from Win32_DisplayConfiguration" ) ;
//WQL語句,設定的WMI查詢內容和WMI的操作範圍,檢索WMI對象集合
ManagementObjectSearcher Searcher = new ManagementObjectSearcher ( ms , Query ) ;
//異步調用WMI查詢
ManagementObjectCollection ReturnCollection = Searcher.Get ( ) ;
//通過對產生的WMI的實例集合進行檢索,
foreach ( ManagementObject Return in ReturnCollection )
{
Display=Display + "顯卡:" + Return["Description"].ToString ( ).Trim()+" " ;
}
return Display;
}
catch(Exception ee)
{
// MessageBox.Show ( "獲得顯卡信息出錯,出錯信息爲:" + ee.Message ,"出現錯誤!" ) ;
return "ERR_GET";
}
}
public string GetMemoryInfo()
{
System.Management.ManagementScope ms=new System.Management.ManagementScope();
ms=Connection(ms);
if(ms == null)
return "ERR_CONNECTION";
string Memory="";
try
{
ObjectQuery Query = new ObjectQuery ( "select * from Win32_ComputerSystem" ) ;
//WQL語句,設定的WMI查詢內容和WMI的操作範圍,檢索WMI對象集合
ManagementObjectSearcher Searcher = new ManagementObjectSearcher ( ms , Query ) ;
//異步調用WMI查詢
ManagementObjectCollection ReturnCollection = Searcher.Get ( ) ;
//通過對產生的WMI的實例集合進行檢索,
foreach ( ManagementObject Return in ReturnCollection )
{
Memory= ( "內存:" + Return["TotalPhysicalMemory"].ToString ( ).Trim()) ;
}
return Memory;
}
catch(Exception ee)
{
// MessageBox.Show ( "獲得內存信息出錯,出錯信息爲:" + ee.Message ,"出現錯誤!" ) ;
return "ERR_GET";
}
}
public string GetNetworkAdapterInfo()
{
System.Management.ManagementScope ms=new System.Management.ManagementScope();
ms=Connection(ms);
if(ms == null)
return "ERR_CONNECTION";
string NetWorkAddpter="";
try
{
ObjectQuery Query = new ObjectQuery ( "select * from Win32_NetworkAdapterConfiguration" ) ;
//WQL語句,設定的WMI查詢內容和WMI的操作範圍,檢索WMI對象集合
ManagementObjectSearcher Searcher = new ManagementObjectSearcher ( ms , Query ) ;
//異步調用WMI查詢
ManagementObjectCollection ReturnCollection = Searcher.Get ( ) ;
//通過對產生的WMI的實例集合進行檢索,
foreach ( ManagementObject Return in ReturnCollection )
{
if ((bool)Return["IPEnabled"] == true)
{
NetWorkAddpter=NetWorkAddpter + "網卡:" + Return["MacAddress"].ToString ( ).Trim() +" " ;
}
}
return NetWorkAddpter;
}
catch(Exception ee)
{
// MessageBox.Show ( "獲得網卡信息出錯,出錯信息爲:" + ee.Message ,"出現錯誤!" ) ;
return "ERR_GET";
}
}
public string GetDiskDriveInfo()
{
System.Management.ManagementScope ms=new System.Management.ManagementScope();
ms=Connection(ms);
if(ms == null)
return "ERR_CONNECTION";
string DiskDrive="";
try
{
ObjectQuery Query = new ObjectQuery ( "select * from Win32_DiskDrive" ) ;
//WQL語句,設定的WMI查詢內容和WMI的操作範圍,檢索WMI對象集合
ManagementObjectSearcher Searcher = new ManagementObjectSearcher ( ms , Query ) ;
//異步調用WMI查詢
ManagementObjectCollection ReturnCollection = Searcher.Get ( ) ;
//通過對產生的WMI的實例集合進行檢索,
foreach ( ManagementObject Return in ReturnCollection )
{
DiskDrive=DiskDrive + "硬盤:" + Return["Model"].ToString ( ).Trim() +" " ;
}
return DiskDrive;
}
catch(Exception ee)
{
// MessageBox.Show ( "獲得硬盤信息出錯,出錯信息爲:" + ee.Message ,"出現錯誤!" ) ;
return "ERR_GET";
}
}
public string GetLoginUserInfo()
{
System.Management.ManagementScope ms=new System.Management.ManagementScope();
ms=Connection(ms);
if(ms == null)
return "ERR_CONNECTION";
string User="";
try
{
ObjectQuery Query = new ObjectQuery ( "select * from Win32_ComputerSystem" ) ;
//WQL語句,設定的WMI查詢內容和WMI的操作範圍,檢索WMI對象集合
ManagementObjectSearcher Searcher = new ManagementObjectSearcher ( ms , Query ) ;
//異步調用WMI查詢
ManagementObjectCollection ReturnCollection = Searcher.Get ( ) ;
//通過對產生的WMI的實例集合進行檢索,
foreach ( ManagementObject Return in ReturnCollection )
{
User="當前用戶:" + Return["UserName"].ToString ( ).Trim() +" " ;
}
return User;
}
catch(Exception ee)
{
// MessageBox.Show ( "獲得用戶信息出錯,出錯信息爲:" + ee.Message ,"出現錯誤!" ) ;
return "ERR_GET";
}
}
public string GetPCTypeInfo()
{
System.Management.ManagementScope ms=new System.Management.ManagementScope();
ms=Connection(ms);
if(ms == null)
return "ERR_CONNECTION";
string PCType="";
try
{
ObjectQuery Query = new ObjectQuery ( "select * from Win32_ComputerSystem" ) ;
//WQL語句,設定的WMI查詢內容和WMI的操作範圍,檢索WMI對象集合
ManagementObjectSearcher Searcher = new ManagementObjectSearcher ( ms , Query ) ;
//異步調用WMI查詢
ManagementObjectCollection ReturnCollection = Searcher.Get ( ) ;
//通過對產生的WMI的實例集合進行檢索,
foreach ( ManagementObject Return in ReturnCollection )
{
PCType="PC類型:" + Return["SystemType"].ToString ( ).Trim() +" " ;
}
return PCType;
}
catch(Exception ee)
{
// MessageBox.Show ( "獲得PC類型出錯,出錯信息爲:" + ee.Message ,"出現錯誤!" ) ;
return "ERR_GET";
}
}
public string GetDomainName()
{
System.Management.ManagementScope ms=new System.Management.ManagementScope();
ms=Connection(ms);
if(ms == null)
return "ERR_CONNECTION";
string DomainName="";
try
{
ObjectQuery Query = new ObjectQuery ( "select * from Win32_ComputerSystem" ) ;
//WQL語句,設定的WMI查詢內容和WMI的操作範圍,檢索WMI對象集合
ManagementObjectSearcher Searcher = new ManagementObjectSearcher ( ms , Query ) ;
//異步調用WMI查詢
ManagementObjectCollection ReturnCollection = Searcher.Get ( ) ;
//通過對產生的WMI的實例集合進行檢索,
foreach ( ManagementObject Return in ReturnCollection )
{
DomainName="域名稱:" + Return["Domain"].ToString ( ).Trim() +" " ;
}
return DomainName;
}
catch(Exception ee)
{
// MessageBox.Show ( "獲得域名稱出錯,出錯信息爲:" + ee.Message ,"出現錯誤!" ) ;
return "ERR_GET";
}
}
public string GetComputerName()
{
System.Management.ManagementScope ms=new System.Management.ManagementScope();
ms=Connection(ms);
if(ms == null)
return "ERR_CONNECTION";
string ComputerName="";
try
{
ObjectQuery Query = new ObjectQuery ( "select * from Win32_ComputerSystem" ) ;
//WQL語句,設定的WMI查詢內容和WMI的操作範圍,檢索WMI對象集合
ManagementObjectSearcher Searcher = new ManagementObjectSearcher ( ms , Query ) ;
//異步調用WMI查詢
ManagementObjectCollection ReturnCollection = Searcher.Get ( ) ;
//通過對產生的WMI的實例集合進行檢索,
foreach ( ManagementObject Return in ReturnCollection )
{
ComputerName="計算機名稱:" + Return["Name"].ToString ( ).Trim() +" " ;
}
return ComputerName;
}
catch(Exception ee)
{
// MessageBox.Show ( "獲得PC名稱出錯,出錯信息爲:" + ee.Message ,"出現錯誤!" ) ;
return "ERR_GET";
}
}
public string GetMonitorInfo()
{
System.Management.ManagementScope ms=new System.Management.ManagementScope();
ms=Connection(ms);
if(ms == null)
return "ERR_CONNECTION";
string Monitor="";
try
{
ObjectQuery Query = new ObjectQuery ( "select * from Win32_DesktopMonitor" ) ;
//WQL語句,設定的WMI查詢內容和WMI的操作範圍,檢索WMI對象集合
ManagementObjectSearcher Searcher = new ManagementObjectSearcher ( ms , Query ) ;
//異步調用WMI查詢
ManagementObjectCollection ReturnCollection = Searcher.Get ( ) ;
//通過對產生的WMI的實例集合進行檢索,
foreach ( ManagementObject Return in ReturnCollection )
{
Monitor="顯示器:" + Return["MonitorType"].ToString ( ).Trim() +" " + Return["MonitorManufacturer"].ToString ( ).Trim() + " " + Return["ScreenHeight"].ToString ( ).Trim() +"*" + Return["ScreenWidth"].ToString ( ).Trim() ;
}
return Monitor;
}
catch(Exception ee)
{
//MessageBox.Show ( "獲得顯示器信息出錯,出錯信息爲:" + ee.Message ,"出現錯誤!" ) ;
return "ERR_GET";
}
}
private string romoteIp;
public string RomoteIp {
get { return romoteIp; }
set { romoteIp = value; }
}
private string adminName;
public string AdminName {
get { return adminName; }
set { adminName = value; }
}
private string password;
public string Password {
get { return password; }
set { password = value; }
}
}
}
Computers:
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Office.Tools.Ribbon;
using Microsoft.Office.Interop.Excel;
using RomateComputerManagement;
using System.Threading;
using System.Windows.Forms;
namespace Computers
{
public partial class ExtandRibbon
{
private Thread threadOne;
private event EventHandler OnNumberClear;//數據刪除完成引發的事件
private void ExtandRibbon_Load(object sender, RibbonUIEventArgs e)
{
OnNumberClear += new EventHandler(ThreadDemo_OnNumberClear);
}
public void ThreadGetComputer()
{
//threadOne = new Thread(new ThreadStart(Run));
int i = 0;
Range rng2;
Range rng1;
Range rng3;
Range rng4;
Range rng5;
Range rng6;
Range rng7;
Range rng8;
Range rng9;
Range rng10;
Range rng11;
System.Management.ManagementScope ms=new System.Management.ManagementScope();
i = Globals.Computers.UsedRange.Cells.Rows.Count;
for (int j = 2; j <= i; j++)
{
rng2 = (Range)Globals.Computers.Cells[j, 1];
rng1 = (Range)Globals.Computers.Cells[j, 2]; //mac
rng3 = (Range)Globals.Computers.Cells[j, 3]; //user
rng4 = (Range)Globals.Computers.Cells[j, 4]; //pctype
rng5 = (Range)Globals.Computers.Cells[j, 5]; //disk
rng6 = (Range)Globals.Computers.Cells[j, 6]; //BASEBORD
rng7 = (Range)Globals.Computers.Cells[j, 7]; //DISPLAYCARD
rng8 = (Range)Globals.Computers.Cells[j, 8]; //DISPLAY Moniter
rng9 = (Range)Globals.Computers.Cells[j, 9]; //CPU
rng10 = (Range)Globals.Computers.Cells[j, 10]; //MOMERY
rng11 = (Range)Globals.Computers.Cells[j, 11]; //NETACDPTER
RomateComputerManagement.RomateComputerManagement rm = new RomateComputerManagement.RomateComputerManagement();
rm.RomoteIp = rng2.Text;
rm.AdminName = "Administrator"; //通過參數獲得
rm.Password = "Sina.com"; //通過參數獲得
ms = rm.Connection(ms);
if (ms!=null)
{
rng1.Value = rm.GetNetworkAdapterInfo();
rng3.Value = rm.GetLoginUserInfo();
rng4.Value = rm.GetPCTypeInfo();
rng5.Value = rm.GetDiskDriveInfo();
rng6.Value = rm.GetBaseBoardInfo();
rng7.Value = rm.GetDisplayConfigurationInfo();
rng8.Value = rm.GetMonitorInfo();
rng9.Value = rm.GetProcessorInfo();
rng10.Value = rm.GetMemoryInfo();
rng11.Value = rm.GetNetworkAdapterInfo();
}
else
rng1.Value = "ERROR";
}
OnNumberClear(this, new EventArgs());//引發完成事件
}
//執行完成之後,停止所有線程
void ThreadDemo_OnNumberClear(object sender, EventArgs e)
{
MessageBox.Show("導入完畢!");
threadOne.Abort();
}
private void GetComputer_Click(object sender, RibbonControlEventArgs e)
{
threadOne = new Thread(new ThreadStart(ThreadGetComputer));
threadOne.Start();
}
}
}