本文目录
- 代码提示ManagementClass 和ManagementObjectColle不存在怎么回事
- C#如何直接调用打印机
- ManagementObjectSearcher是什么意思求解
- 比如这个类:ManagementObjectSearcher,他在哪个命名空间组件在什么库
- 如何用C语言取得计算机的机器特征码
- C# 请教有方法可以读取硬盘大小么
- C#怎么读取主板和cpu序列号
- 外网如何获取内网的IP
- C#怎样得到打印机驱动的ip或端口号解决办法
代码提示ManagementClass 和ManagementObjectColle不存在怎么回事
此问题解决办法:
右键当前程序集下的“引用”,选择添加引用,在“.NET”选项卡中选择System.Management,点击确定即可!
这是虽然程序中写了using System.Management:,但是实际是没有添加.dll文件的引用。。。。
C#如何直接调用打印机
1.本地打印机
//添加引用并using System.Management;
public static void AvailablePrinters()
{
ManagementScope ms = new ManagementScope(ManagementPath.DefaultPath);
ms.Connect();
SelectQuery sq = new SelectQuery();
sq.QueryString = @“SELECT Name FROM Win32_Printer“;
ManagementObjectSearcher mos =
new ManagementObjectSearcher(ms, sq);
ManagementObjectCollection oObjectCollection = mos.Get();
foreach (ManagementObject mo in oObjectCollection)
MessageBox.Show(mo[“Name“].ToString());
}
2.网络打印机
via System.Drawing.Printing
foreach (String printer in PrinterSettings.InstalledPrinters)
{
Console.WriteLine(printer.ToString()+Environment.NewLine);
}
via WMI
public static void AvailablePrinters()
{
oManagementScope = new ManagementScope(ManagementPath.DefaultPath);
oManagementScope.Connect();
SelectQuery oSelectQuery = new SelectQuery();
oSelectQuery.QueryString = @“SELECT Name FROM Win32_Printer“;
ManagementObjectSearcher oObjectSearcher =
new ManagementObjectSearcher(oManagementScope, @oSelectQuery);
ManagementObjectCollection oObjectCollection = oObjectSearcher.Get();
foreach (ManagementObject oItem in oObjectCollection)
{
Console.WriteLine(“Name : “ + oItem[“Name“].ToString()+ Environment.NewLine);
}
}
via PowerShell
Get-WMIObject -class Win32_Printer -computer $printserver | Select Name,DriverName,PortName
ManagementObjectSearcher是什么意思求解
ManagementObjectSearcher主要是根据指定的查询检索WMI对象的集合。ManagementObjectSearcher组成成员也非常简单,其方法Get方法是非常重要的,ManagementObjectSearcher通过Get方法进行WMI查询,并把得到的结果集合。Get方法的返回值是一个ManagementObjectCollection实例,它包含匹配指定查询的对象。
比如这个类:ManagementObjectSearcher,他在哪个命名空间组件在什么库
在项目-》添加引用....里面引用System.Management 。 再using System.Management 就可以了。
下次遇到不知道在哪个命名空间的,就放入搜索引擎找下就可以找到答案了。
如何用C语言取得计算机的机器特征码
有的,我通过google的代码搜索,找到一些。
给你添加在这里,作为参考,具体你可以去哪里自己搜搜,应该会有你想要的。有不懂m我。
using System;
using System.Collections;
using System.Management;
namespace ProductInfo
{
public class SystemInfo
{
private static IList cpuId;
private static IList driveId;
private static IList networkAdapterId;
private static string operationSystemName;
private static string productId;
public static string OperationSystemName
{
get
{
if (string.IsNullOrEmpty(operationSystemName))
{
operationSystemName = GetOperationSystemInName();
}
return operationSystemName;
}
}
public static string MachineName
{
get { return Environment.MachineName; }
}
/// 《summary》
/// 获取系统名称
/// 《/summary》
/// 《returns》《/returns》
private static string GetOperationSystemInName()
{
OperatingSystem os = Environment.OSVersion;
string osName = “UNKNOWN“;
switch (os.Platform)
{
case PlatformID.Win32Windows:
switch (os.Version.Minor)
{
case 0:
osName = “Windows 95“;
break;
case 10:
osName = “Windows 98“;
break;
case 90:
osName = “Windows ME“;
break;
}
break;
case PlatformID.Win32NT:
switch (os.Version.Major)
{
case 3:
osName = “Windws NT 3.51“;
break;
case 4:
osName = “Windows NT 4“;
break;
case 5:
if (os.Version.Minor == 0)
{
osName = “Windows 2000“;
}
else if (os.Version.Minor == 1)
{
osName = “Windows XP“;
}
else if (os.Version.Minor == 2)
{
osName = “Windows Server 2003“;
}
break;
case 6:
osName = “Longhorn“;
break;
}
break;
}
return String.Format(“{0}-{1}“, osName, os.Version.ToString());
}
/// 《summary》
/// CPU序列号
/// 《/summary》
public static IList CpuId
{
get
{
if (cpuId == null)
{
try
{
string cpuInfo = ““;
ManagementClass cimobject = new ManagementClass(“Win32_Processor“);
ManagementObjectCollection moc = cimobject.GetInstances();
IList result = new ArrayList();
foreach (ManagementObject mo in moc)
{
cpuInfo = mo.Properties[“ProcessorId“].Value.ToString();
result.Add(cpuInfo);
}
cpuId = result;
}
catch (Exception ex)
{
IList result = new ArrayList();
result.Add(“--“);
cpuId = result;
}
}
return cpuId;
}
}
/// 《summary》
/// 硬盘序列号
/// 《/summary》
public static IList DriveId
{
get
{
if (driveId == null)
{
try
{
//获取硬盘ID
String HDid;
ManagementClass cimobject1 = new ManagementClass(“Win32_DiskDrive“);
ManagementObjectCollection moc1 = cimobject1.GetInstances();
IList result = new ArrayList();
foreach (ManagementObject mo in moc1)
{
HDid = (string) mo.Properties[“Model“].Value;
result.Add(HDid);
}
driveId = result;
}
catch (Exception ex)
{
IList result = new ArrayList();
result.Add(“--“);
driveId = result;
}
}
return driveId;
}
}
/// 《summary》
/// 获取网卡硬件地址
/// 《/summary》
public static IList NetworkAdapterId
{
get
{
if (networkAdapterId == null)
{
try
{
ManagementClass mc = new ManagementClass(“Win32_NetworkAdapterConfiguration“);
ManagementObjectCollection moc2 = mc.GetInstances();
IList result = new ArrayList();
foreach (ManagementObject mo in moc2)
{
if ((bool) mo[“IPEnabled“] == true)
result.Add(mo[“MacAddress“].ToString().Replace(“:“, “-“));
mo.Dispose();
}
networkAdapterId = result;
}
catch (Exception ex)
{
IList result = new ArrayList();
result.Add(“--“);
networkAdapterId = result;
}
}
return networkAdapterId;
}
}
}
}
C# 请教有方法可以读取硬盘大小么
只能遍历盘符,计算总容量!
除非被隐藏,否则相加得到的就是硬盘总容量啊,1000/1024这个转换差的问题相信你肯定不会忽略!
1.项目添加对 System.Management 的引用
2.新建hardDiskPartition.cs 盘符信息类
///
/// 盘符信息
///
public class HardDiskPartition
{
#region Data
private string _PartitionName;
private double _FreeSpace;
private double _SumSpace;
#endregion //Data
#region Properties
///
/// 空余大小
///
public double FreeSpace
{
get { return _FreeSpace; }
set { this._FreeSpace = value; }
}
///
/// 使用空间
///
public double UseSpace
{
get { return _SumSpace - _FreeSpace; }
}
///
/// 总空间
///
public double SumSpace
{
get { return _SumSpace; }
set { this._SumSpace = value; }
}
///
/// 分区名称
///
public string PartitionName
{
get { return _PartitionName; }
set { this._PartitionName = value; }
}
///
/// 是否主分区
///
public bool IsPrimary
{
get
{
//判断是否为系统安装分区
if (System.Environment.GetEnvironmentVariable(“windir“).Remove(2) == this._PartitionName)
{
return true;
}
else
{
return false;
}
}
}
#endregion //Properties
}
3.获取盘符空间信息:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Management;
using System.IO;
namespace ExPortToExcel
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void btnStart_Click(object sender, EventArgs e)
{
try
{
List《HardDiskPartition》 listInfo = GetDiskListInfo();
if (listInfo != null && listInfo.Count 》 0)
{
listBox1.Items.Clear();
foreach(HardDiskPartition disk in listInfo)
{
listBox1.Items.Add(string.Format(“{0} 总空间:{1} GB,剩余:{2} GB“,
disk.PartitionName, ManagerDoubleValue(disk.SumSpace,1),
ManagerDoubleValue(disk.FreeSpace,1)));
}
}
}
catch (Exception ex)
{
throw ex;
}
}
/// 《summary》
/// 处理Double值,精确到小数点后几位
/// 《/summary》
/// 《param name=“_value“》值《/param》
/// 《param name=“Length“》精确到小数点后几位《/param》
/// 《returns》返回值《/returns》
private double ManagerDoubleValue(double _value,int Length)
{
if (Length 《 0)
{
Length = 0;
}
return System.Math.Round(_value, Length);
}
/// 《summary》
/// 获取硬盘上所有的盘符空间信息列表
/// 《/summary》
/// 《returns》《/returns》
private List《HardDiskPartition》 GetDiskListInfo()
{
List《HardDiskPartition》 list = null;
//指定分区的容量信息
try
{
SelectQuery selectQuery = new SelectQuery(“select * from win32_logicaldisk“);
ManagementObjectSearcher searcher = new ManagementObjectSearcher(selectQuery);
ManagementObjectCollection diskcollection = searcher.Get();
if (diskcollection != null && diskcollection.Count 》 0)
{
list = new List《HardDiskPartition》();
HardDiskPartition harddisk = null;
foreach (ManagementObject disk in searcher.Get())
{
int nType = Convert.ToInt32(disk[“DriveType“]);
if (nType != Convert.ToInt32(DriveType.Fixed))
{
continue;
}
else
{
harddisk = new HardDiskPartition();
harddisk.FreeSpace = Convert.ToDouble(disk[“FreeSpace“]) / (1024 * 1024 * 1024);
harddisk.SumSpace = Convert.ToDouble(disk[“Size“]) / (1024 * 1024 * 1024);
harddisk.PartitionName = disk[“DeviceID“].ToString();
list.Add(harddisk);
}
}
}
}
catch (Exception)
{
}
return list;
}
}
}
C#怎么读取主板和cpu序列号
private void GetInfo()
{
string cpuInfo = ““;//cpu序列号
ManagementClass cimobject = new ManagementClass(“Win32_Processor“);
ManagementObjectCollection moc = cimobject.GetInstances();
foreach(ManagementObject mo in moc)
{
cpuInfo = mo.Properties[“ProcessorId“].Value.ToString();
Response.Write (“cpu序列号:“+cpuInfo.ToString ());
}
//获取硬盘ID
String HDid;
ManagementClass cimobject1 = new ManagementClass(“Win32_DiskDrive“);
ManagementObjectCollection moc1 = cimobject1.GetInstances();
foreach(ManagementObject mo in moc1)
{
HDid = (string)mo.Properties[“Model“].Value;
Response.Write (“硬盘序列号:“+HDid.ToString ());
}
//获取网卡硬件地址
9558821702001755616
ManagementClass mc = new ManagementClass(“Win32_NetworkAdapterConfiguration“);
ManagementObjectCollection moc2 = mc.GetInstances();
foreach(ManagementObject mo in moc2)
{
if((bool)mo[“IPEnabled“] == true)
Response.Write(“MAC address\t{0}“+mo[“MacAddress“].ToString());
mo.Dispose();
}
}
//主板
string strbNumber = string.Empty;
ManagementObjectSearcher mos = new ManagementObjectSearcher(“select * from Win32_baseboard“);
foreach (ManagementObject mo in mos.Get())
{
strbNumber=mo[“SerialNumber“].ToString();
break;
}
外网如何获取内网的IP
内网IP只能在内网局域网访问连接,在外网是不能认识内网IP不能访问的。有路由权限,且路由有固定公网IP,可以通过路由的端口映射,实现外网访问内网。如无路由,或路由无公网IP,需要借助第三方开放的nat123端口映射网络辅助实现外网访问内网。
端口映射网络辅助的好处是适用于任何网络环境,外网访问内网的实现过程:
1.在内网安装并启用nat123端口映射。添加映射,配置内外网映射信息,对应内网IP端口和外网自己的域名。外网地址可直接使用提示默认域名。
2.NAT映射后,通过域名访问,即可以连接内网对应IP应用。
C#怎样得到打印机驱动的ip或端口号解决办法
解决方案一 使用WMI获取打印机信息
WMI,全称Windows Management Instrumentation。是可伸缩的系统管理结构,它采用一个统一的、基于标准的、可扩展的面向对象接口。WMI 为您提供与系统管理信息和基础 WMI API 交互的标准方法。WMI 主要由系统管理应用程序开发人员和管理员用来访问和操作系统管理信息。
.Net Framework中System.Management类提供了对WMI的支持,其中ManagementObjectSearcher用于根据指定的查询或枚举检索 ManagementObject 或 ManagementClass 对象的集合。
/**//// 《summary》
/// Code 1:WMI搜索示例
/// 《summary》
/// 《param name=“strDrivername“》驱动名称《/param》
/// 《returns》返回找到的打印机列表《/returns》
/// 《remarks》strDrivername支持”%“以及”_“通配符查询,类似于SQL语句中的查询《remarks》
public StringCollection GetPrintsWithDrivername( string strDrivername )
{
StringCollection scPrinters = new StringCollection();
string strcheck = ““;
if( strDrivername !=““ && strDrivername != “*“ )
strcheck = “ where DriverName like \’“ + strDrivername + “\’“;
string searchQuery = “SELECT Name FROM Win32_Printer“ + strcheck;
ManagementObjectSearcher searchPrinters =
new ManagementObjectSearcher(searchQuery);
ManagementObjectCollection printerCollection = searchPrinters.Get();
foreach(ManagementObject printer in printerCollection)
{
string printname = printer.Properties[“Name“].Value.ToString();
scPrinters.Add(printname);
}
searchPrinters.Dispose();
printerCollection.Dispose();
return scPrinters;
}
问题看上去基本解决了,运行程序的确是获得了正确的打印机列表。可是用户用了一段时间后发现,有的时候打印机无法正确获得,看来DOTNET调用WMI稳定性的确有点问题啊。。。。。。
WMI本身功能还是相当强大的,通过VBS基本可以涵盖WINDOWS最基本的操作。详细可以参加MSDN的文档。