我们在利用C#开发桌面程序(Winform)程序的时候,经常需要获取一些跟系统相关的信息,例如用户名、MAC地址、IP地址、硬盘ID、CPU序列号、系统名称、物理内存等。

首先需要引入命名空间:

  1. using System.Management;
  1. /// 获取本机用户名、MAC地址、内网IP地址、公网IP地址、硬盘ID、CPU序列号、系统名称、物理内存。
  2. /// </summary>
  3. public class GetSystemInfo
  4. {
  5. /// <summary>
  6. /// 操作系统的登录用户名
  7. /// </summary>
  8. /// <returns>系统的登录用户名</returns>
  9. public static string GetUserName()
  10. {
  11. try
  12. {
  13. string strUserName = string.Empty;
  14. ManagementClass mc = new ManagementClass("Win32_ComputerSystem");
  15. ManagementObjectCollection moc = mc.GetInstances();
  16. foreach (ManagementObject mo in moc)
  17. {
  18. strUserName = mo["UserName"].ToString();
  19. }
  20. moc = null;
  21. mc = null;
  22. return strUserName;
  23. }
  24. catch
  25. {
  26. return "unknown";
  27. }
  28. }
  29. /// <summary>
  30. /// 获取本机MAC地址
  31. /// </summary>
  32. /// <returns>本机MAC地址</returns>
  33. public static string GetMacAddress()
  34. {
  35. try
  36. {
  37. string strMac = string.Empty;
  38. ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
  39. ManagementObjectCollection moc = mc.GetInstances();
  40. foreach (ManagementObject mo in moc)
  41. {
  42. if ((bool)mo["IPEnabled"] == true)
  43. {
  44. strMac = mo["MacAddress"].ToString();
  45. }
  46. }
  47. moc = null;
  48. mc = null;
  49. return strMac;
  50. }
  51. catch
  52. {
  53. return "unknown";
  54. }
  55. }
  56. /// <summary>
  57. /// 获取本机的物理地址
  58. /// </summary>
  59. /// <returns></returns>
  60. public static string getMacAddr_Local()
  61. {
  62. string madAddr = null;
  63. try
  64. {
  65. ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
  66. ManagementObjectCollection moc2 = mc.GetInstances();
  67. foreach (ManagementObject mo in moc2)
  68. {
  69. if (Convert.ToBoolean(mo["IPEnabled"]) == true)
  70. {
  71. madAddr = mo["MacAddress"].ToString();
  72. madAddr = madAddr.Replace(':', '-');
  73. }
  74. mo.Dispose();
  75. }
  76. if (madAddr == null)
  77. {
  78. return "unknown";
  79. }
  80. else
  81. {
  82. return madAddr;
  83. }
  84. }
  85. catch (Exception)
  86. {
  87. return "unknown";
  88. }
  89. }
  90. /// <summary>
  91. /// 获取客户端内网IPv6地址
  92. /// </summary>
  93. /// <returns>客户端内网IPv6地址</returns>
  94. public static string GetClientLocalIPv6Address()
  95. {
  96. string strLocalIP = string.Empty;
  97. try
  98. {
  99. IPHostEntry ipHost = Dns.GetHostEntry(Dns.GetHostName());
  100. IPAddress ipAddress = ipHost.AddressList[0];
  101. strLocalIP = ipAddress.ToString();
  102. return strLocalIP;
  103. }
  104. catch
  105. {
  106. return "unknown";
  107. }
  108. }
  109. /// <summary>
  110. /// 获取客户端内网IPv4地址
  111. /// </summary>
  112. /// <returns>客户端内网IPv4地址</returns>
  113. public static string GetClientLocalIPv4Address()
  114. {
  115. string strLocalIP = string.Empty;
  116. try
  117. {
  118. IPHostEntry ipHost = Dns.Resolve(Dns.GetHostName());
  119. IPAddress ipAddress = ipHost.AddressList[0];
  120. strLocalIP = ipAddress.ToString();
  121. return strLocalIP;
  122. }
  123. catch
  124. {
  125. return "unknown";
  126. }
  127. }
  128. /// <summary>
  129. /// 获取客户端内网IPv4地址集合
  130. /// </summary>
  131. /// <returns>返回客户端内网IPv4地址集合</returns>
  132. public static List<string> GetClientLocalIPv4AddressList()
  133. {
  134. List<string> ipAddressList = new List<string>();
  135. try
  136. {
  137. IPHostEntry ipHost = Dns.Resolve(Dns.GetHostName());
  138. foreach (IPAddress ipAddress in ipHost.AddressList)
  139. {
  140. if (!ipAddressList.Contains(ipAddress.ToString()))
  141. {
  142. ipAddressList.Add(ipAddress.ToString());
  143. }
  144. }
  145. }
  146. catch
  147. {
  148. }
  149. return ipAddressList;
  150. }
  151. /// <summary>
  152. /// 获取客户端外网IP地址
  153. /// </summary>
  154. /// <returns>客户端外网IP地址</returns>
  155. public static string GetClientInternetIPAddress()
  156. {
  157. string strInternetIPAddress = string.Empty;
  158. try
  159. {
  160. using (WebClient webClient = new WebClient())
  161. {
  162. strInternetIPAddress = webClient.DownloadString("http://www.coridc.com/ip");
  163. Regex r = new Regex("[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}");
  164. Match mth = r.Match(strInternetIPAddress);
  165. if (!mth.Success)
  166. {
  167. strInternetIPAddress = GetClientInternetIPAddress2();
  168. mth = r.Match(strInternetIPAddress);
  169. if (!mth.Success)
  170. {
  171. strInternetIPAddress = "unknown";
  172. }
  173. }
  174. return strInternetIPAddress;
  175. }
  176. }
  177. catch
  178. {
  179. return "unknown";
  180. }
  181. }
  182. /// <summary>
  183. /// 获取本机公网IP地址
  184. /// </summary>
  185. /// <returns>本机公网IP地址</returns>
  186. private static string GetClientInternetIPAddress2()
  187. {
  188. string tempip = "";
  189. try
  190. {
  191. //http://iframe.ip138.com/ic.asp 返回的是:您的IP是:[220.231.17.99] 来自:北京市 光环新网
  192. WebRequest wr = WebRequest.Create("http://iframe.ip138.com/ic.asp");
  193. Stream s = wr.GetResponse().GetResponseStream();
  194. StreamReader sr = new StreamReader(s, Encoding.Default);
  195. string all = sr.ReadToEnd(); //读取网站的数据
  196. int start = all.IndexOf("[") + 1;
  197. int end = all.IndexOf("]", start);
  198. tempip = all.Substring(start, end - start);
  199. sr.Close();
  200. s.Close();
  201. return tempip;
  202. }
  203. catch
  204. {
  205. return "unknown";
  206. }
  207. }
  208. /// <summary>
  209. /// 获取硬盘序号
  210. /// </summary>
  211. /// <returns>硬盘序号</returns>
  212. public static string GetDiskID()
  213. {
  214. try
  215. {
  216. string strDiskID = string.Empty;
  217. ManagementClass mc = new ManagementClass("Win32_DiskDrive");
  218. ManagementObjectCollection moc = mc.GetInstances();
  219. foreach (ManagementObject mo in moc)
  220. {
  221. strDiskID = mo.Properties["Model"].Value.ToString();
  222. }
  223. moc = null;
  224. mc = null;
  225. return strDiskID;
  226. }
  227. catch
  228. {
  229. return "unknown";
  230. }
  231. }
  232. /// <summary>
  233. /// 获取CpuID
  234. /// </summary>
  235. /// <returns>CpuID</returns>
  236. public static string GetCpuID()
  237. {
  238. try
  239. {
  240. string strCpuID = string.Empty;
  241. ManagementClass mc = new ManagementClass("Win32_Processor");
  242. ManagementObjectCollection moc = mc.GetInstances();
  243. foreach (ManagementObject mo in moc)
  244. {
  245. strCpuID = mo.Properties["ProcessorId"].Value.ToString();
  246. }
  247. moc = null;
  248. mc = null;
  249. return strCpuID;
  250. }
  251. catch
  252. {
  253. return "unknown";
  254. }
  255. }
  256. /// <summary>
  257. /// 获取操作系统类型
  258. /// </summary>
  259. /// <returns>操作系统类型</returns>
  260. public static string GetSystemType()
  261. {
  262. try
  263. {
  264. string strSystemType = string.Empty;
  265. ManagementClass mc = new ManagementClass("Win32_ComputerSystem");
  266. ManagementObjectCollection moc = mc.GetInstances();
  267. foreach (ManagementObject mo in moc)
  268. {
  269. strSystemType = mo["SystemType"].ToString();
  270. }
  271. moc = null;
  272. mc = null;
  273. return strSystemType;
  274. }
  275. catch
  276. {
  277. return "unknown";
  278. }
  279. }
  280. /// <summary>
  281. /// 获取操作系统名称
  282. /// </summary>
  283. /// <returns>操作系统名称</returns>
  284. public static string GetSystemName()
  285. {
  286. try
  287. {
  288. string strSystemName = string.Empty;
  289. ManagementObjectSearcher mos = new ManagementObjectSearcher("root\\CIMV2", "SELECT PartComponent FROM Win32_SystemOperatingSystem");
  290. foreach (ManagementObject mo in mos.Get())
  291. {
  292. strSystemName = mo["PartComponent"].ToString();
  293. }
  294. mos = new ManagementObjectSearcher("root\\CIMV2", "SELECT Caption FROM Win32_OperatingSystem");
  295. foreach (ManagementObject mo in mos.Get())
  296. {
  297. strSystemName = mo["Caption"].ToString();
  298. }
  299. return strSystemName;
  300. }
  301. catch
  302. {
  303. return "unknown";
  304. }
  305. }
  306. /// <summary>
  307. /// 获取物理内存信息
  308. /// </summary>
  309. /// <returns>物理内存信息</returns>
  310. public static string GetTotalPhysicalMemory()
  311. {
  312. try
  313. {
  314. string strTotalPhysicalMemory = string.Empty;
  315. ManagementClass mc = new ManagementClass("Win32_ComputerSystem");
  316. ManagementObjectCollection moc = mc.GetInstances();
  317. foreach (ManagementObject mo in moc)
  318. {
  319. strTotalPhysicalMemory = mo["TotalPhysicalMemory"].ToString();
  320. }
  321. moc = null;
  322. mc = null;
  323. return strTotalPhysicalMemory;
  324. }
  325. catch
  326. {
  327. return "unknown";
  328. }
  329. }
  330. /// <summary>
  331. /// 获取主板id
  332. /// </summary>
  333. /// <returns></returns>
  334. public static string GetMotherBoardID()
  335. {
  336. try
  337. {
  338. ManagementClass mc = new ManagementClass("Win32_BaseBoard");
  339. ManagementObjectCollection moc = mc.GetInstances();
  340. string strID = null;
  341. foreach (ManagementObject mo in moc)
  342. {
  343. strID = mo.Properties["SerialNumber"].Value.ToString();
  344. break;
  345. }
  346. return strID;
  347. }
  348. catch
  349. {
  350. return "unknown";
  351. }
  352. }
  353. /// <summary>
  354. /// 获取公用桌面路径
  1. public static string GetAllUsersDesktopFolderPath()
  2. {
  3. RegistryKey folders;
  4. folders = OpenRegistryPath(Registry.LocalMachine, @"/software/microsoft/windows/currentversion/explorer/shell folders");
  5. string desktopPath = folders.GetValue("Common Desktop").ToString();
  6. return desktopPath;
  7. }
  8. /// <summary>
  9. /// 获取公用启动项路径
  10. /// </summary>
  11. public static string GetAllUsersStartupFolderPath()
  12. {
  13. RegistryKey folders;
  14. folders = OpenRegistryPath(Registry.LocalMachine, @"/software/microsoft/windows/currentversion/explorer/shell folders");
  15. string Startup = folders.GetValue("Common Startup").ToString();
  16. return Startup;
  17. }
  18. private static RegistryKey OpenRegistryPath(RegistryKey root, string s)
  19. {
  20. s = s.Remove(0, 1) + @"/";
  21. while (s.IndexOf(@"/") != -1)
  22. {
  23. root = root.OpenSubKey(s.Substring(0, s.IndexOf(@"/")));
  24. s = s.Remove(0, s.IndexOf(@"/") + 1);
  25. }
  26. return root;
  27. }
  1. private void Test()
  2. {
  3. RegistryKey folders;
  4. folders = OpenRegistryPath(Registry.LocalMachine, @"/software/microsoft/windows/currentversion/explorer/shell folders");
  5. // Windows用户桌面路径
  6. string desktopPath = folders.GetValue("Common Desktop").ToString();
  7. // Windows用户字体目录路径
  8. string fontsPath = folders.GetValue("Fonts").ToString();
  9. // Windows用户网络邻居路径
  10. string nethoodPath = folders.GetValue("Nethood").ToString();
  11. // Windows用户我的文档路径
  12. string personalPath = folders.GetValue("Personal").ToString();
  13. // Windows用户开始菜单程序路径
  14. string programsPath = folders.GetValue("Programs").ToString();
  15. // Windows用户存放用户最近访问文档快捷方式的目录路径
  16. string recentPath = folders.GetValue("Recent").ToString();
  17. // Windows用户发送到目录路径
  18. string sendtoPath = folders.GetValue("Sendto").ToString();
  19. // Windows用户开始菜单目录路径
  20. string startmenuPath = folders.GetValue("Startmenu").ToString();
  21. // Windows用户开始菜单启动项目录路径
  22. string startupPath = folders.GetValue("Startup").ToString();
  23. // Windows用户收藏夹目录路径
  24. string favoritesPath = folders.GetValue("Favorites").ToString();
  25. // Windows用户网页历史目录路径
  26. string historyPath = folders.GetValue("History").ToString();
  27. // Windows用户Cookies目录路径
  28. string cookiesPath = folders.GetValue("Cookies").ToString();
  29. // Windows用户Cache目录路径
  30. string cachePath = folders.GetValue("Cache").ToString();
  31. // Windows用户应用程式数据目录路径
  32. string appdataPath = folders.GetValue("Appdata").ToString();
  33. // Windows用户打印目录路径
  34. string printhoodPath = folders.GetValue("Printhood").ToString();
  35. }</span>

来自小勇.NET博客:http://blog.csdn.net/xiaoyong_net



 
 

版权声明:本文为云勇原创文章,转载请注明来源于云勇博客

c#中如何获取本机MAC地址、IP地址、硬盘ID、CPU序列号等系统信息的更多相关文章

  1. js获取本机的网络IP地址

    JavaScript是一门脚本语言,是不能操作文件,读取本地信息的,所以想要获取IP,还需要借助后端技术.方法如下: //获取本机的网络ip地址 function jsonpCallback(res) ...

  2. LabVIEW 获取本机多个ip地址

    图 1   网上见了好多设置的,都没讲清楚,在这里整理一下本机ip地址的获取问题.关键在"字符串向ip地址转换"函数的设置上面,见下图2,选择多输出就能获取本机的多个ip地址,若不 ...

  3. C# 获取本机的所有ip地址,并过滤内网ip

    private void Initialization_Load(object sender, EventArgs e) { cboxip.Items.Add("请选择IP地址") ...

  4. c#中如何获取本机用户名、MAC地址、IP地址、硬盘ID、CPU序列号、系统名称、物理内存

    我们在利用C#开发桌面程序(Winform)程序的时候, 经常需要获取一些跟系统相关的信息, 以下这些代码获取能有些用处. c#中如何获取本机用户名.MAC地址.IP地址.硬盘ID.CPU序列号.系统 ...

  5. java获取本机名称、IP、MAC地址和网卡名称

    java获取本机名称.IP.MAC地址和网卡名称 摘自:https://blog.csdn.net/Dai_Haijiao/article/details/80364370 2018年05月18日 1 ...

  6. 脚本_获取本机 MAC 地址

    #!bin/bash#作者:liusingbon#功能:获取本机 MAC 地址ip a s |awk 'BEGIN{print "本机 MAC 地址信息如下:"}/^[0-9]/{ ...

  7. js获取本机mac地址,IP地址,计算机名

    <!DOCTYPE HTML> <html> <head> <title>js获取本机mac地址,IP地址,计算机名</title> < ...

  8. windows获取本机MAC地址并写入文件的bat

    windows获取本机MAC地址并写入文件的bat MAC(Media Access Control)地址,或称为 MAC地址.硬件地址,用来定义网络设备的位置. bat代码例如以下: @echo o ...

  9. Java获取本机MAC地址[转]

    原文地址:https://www.cnblogs.com/hxsyl/p/3422191.html Java获取本机MAC地址   为什么写这个呢?因为前几天看见网上有采用windows命令获取局域网 ...

随机推荐

  1. C++实现Vector容器的基本功能

    本文只实现了Vector的默认构造函数.赋值构造函数.赋值函数.析构函数.重置空间大小函数和插入函数,权当起到抛砖引玉的作用,其他函数功能的实现可在此基础之上进行拓展. #include <io ...

  2. bzoj1617

    题解: dp f[i]表示运i头奶牛需要的时间 f[i]=f[i-j]+a[i]+2*m 然后ans=f[n]-m(最后一次不用跑回来) 代码: #include<bits/stdc++.h&g ...

  3. python 加密 解密 签名 验证签名 公钥 私钥 非对称加密 RSA

    加密与解密,这很重要,我们已经可以用pypcap+npcap简单嗅探到网络中的数据包了.而这个工具其实可以嗅探到更多的数据.如果我们和别人之间传输的数据被别人嗅探到,那么信息泄漏,信息被篡改,将给我们 ...

  4. JS实现点击按钮,下载文件

    PS:本文说的,并非如何用js创建流.创建文件.实现下载功能. 而是说的:你已知一个下载文件的后端接口,前端如何请求该接口,实现点击按钮.下载文件到本地.(可以是zip啦.excel啦都是一样) 有两 ...

  5. mysql-5.6.17-win32安装

    下载免安装压缩文件http://dev.mysql.com/downloads/mysql/ 解压到自定义目录,我这里演示的是D:\wamp\mysql\   复制根目录下的my-default.in ...

  6. WebGL编程指南理论分析之物体层次模型(局部运动)

    书中340页,开始讲到层次模型(关节模型),也就是整个物体,可以自由控制其各部位单独运动,就像关节一样,互不干扰或者有一定关联. 就像图中,左右键控制整个物体(arm1和arm2)的Y轴旋转,上下键控 ...

  7. OC基础:属性.点语法.KVC 分类: ios学习 OC 2015-06-24 17:24 61人阅读 评论(0) 收藏

    属性:快速生成setter和getter 属性也包括:声明和实现 1.属性的声明写在.h中 格式:@property 数据类型 变量名; 如果实例变量一致的时候,属性的声明可以合并,每一个属性之间使用 ...

  8. HDU 2853 && HDU 3315

    http://acm.hdu.edu.cn/showproblem.php?pid=2853 题意:给一个n-m二分图,边权用一个n*m的矩阵表示,给出初始匹配,求二分图完美匹配相比初始匹配改变了几条 ...

  9. 20155237 2016-2017-2 《Java程序设计》第6周学习总结

    20155237 2016-2017-2 <Java程序设计>第6周学习总结 教材学习内容总结 第十章 输入与输出 InputStream与OutputStream 流(Stream)是对 ...

  10. js窗口拖动 模版

    <!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>& ...