c#中如何获取本机MAC地址、IP地址、硬盘ID、CPU序列号等系统信息

时间:2021-10-19 10:39:27

我们在利用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



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