我们在利用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. HTML绘制三角形的方法:

    <!DOCTYPE html> <html> <body> <style> #triangle-up { width: 0px; height: 0px ...

  2. ZOJ 3829 Known Notation 贪心 难度:0

    Known Notation Time Limit: 2 Seconds      Memory Limit: 65536 KB Do you know reverse Polish notation ...

  3. $(function(){})与(function($){})(jquery)

    $(function(){}) function中的代码在DOM加载完成后立即执行,比window.onload()更快,因为前者不需要等待图片加载完成. (function($){})(jquery ...

  4. 【设计模式】 模式PK:工厂模式VS建造者模式

    1.概述 工厂方法模式注重的是整体对象的创建方法,而建造者模式注重的是部件构建的过程,旨在通过一步一步地精确构造创建出一个复杂的对象.我们举个简单例子来说明两者的差异,如要制造一个超人,如果使用工厂方 ...

  5. .Net EF Core数据库使用SQL server 2008 R2分页报错How to avoid the “Incorrect syntax near 'OFFSET'. Invalid usage of the option NEXT in the FETCH statement.”

    一.  问题说明 最近.Net EF core 程序部署到服务器,服务器数据库安装的是SQL server 2008 R2,我本地用的的是SQL server 2014,在用到分页查询时报错如下: H ...

  6. vue 之 .$mount()

    $mount():手动挂载 当Vue实例没有el属性时,则该实例尚没有挂载到某个dom中: 假如需要延迟挂载,可以在之后手动调用vm.$mount()方法来挂载.例如: <div id=&quo ...

  7. OpenCV-bwLabel-实现图像连通组件标记与分析

    OpenCV实现图像连通组件标记与分析- matlab bwLabel; code: #include <opencv2/opencv.hpp> #include <iostream ...

  8. PR5

    修改字幕的两种方式

  9. hdu1224 dp(dp + 栈/父亲数组记录路径)

    题意:给定 n 个城市的有趣度,并给出可以从那些城市飞到那些城市.其中第一个城市即起始城市同样也作为终点城市,有趣度为 0,旅行途中只允许按有趣度从低到高旅行,问旅行的有趣度最大是多少,并输出旅行路径 ...

  10. 【JVM】jvm的jps命令

    jps -- Java Virtual Machine Process Status Tool 可以列出本机所有java进程的pid jps [ options ] [ hostid ] 选项 -q ...