ComputerInfoTool.cs 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373
  1. //************************************************************************
  2. // https://github.com/yuzhengyang
  3. // author: yuzhengyang
  4. // date: 2017.3.29 - 2017.7.12
  5. // desc: 计算机信息
  6. // Copyright (c) yuzhengyang. All rights reserved.
  7. //************************************************************************
  8. using System;
  9. using System.Collections.Generic;
  10. using System.Management;
  11. using System.Net.NetworkInformation;
  12. using System.Runtime.InteropServices;
  13. namespace Y.Utils.WindowsUtils.InfoUtils
  14. {
  15. /// <summary>
  16. /// 计算机信息
  17. /// </summary>
  18. public static class ComputerInfoTool
  19. {
  20. const string UNKNOW = "unknow";
  21. /// <summary>
  22. /// CPU 序列号
  23. /// </summary>
  24. /// <returns></returns>
  25. public static string CPUID()
  26. {
  27. ManagementClass mc = null;
  28. ManagementObjectCollection moc = null;
  29. string ProcessorId = "";
  30. try
  31. {
  32. mc = new ManagementClass("Win32_Processor");
  33. moc = mc.GetInstances();
  34. foreach (ManagementObject mo in moc)
  35. {
  36. ProcessorId = mo.Properties["ProcessorId"].Value.ToString();
  37. }
  38. return ProcessorId;
  39. }
  40. catch (Exception e)
  41. {
  42. return UNKNOW;
  43. }
  44. finally
  45. {
  46. if (moc != null) moc.Dispose();
  47. if (mc != null) mc.Dispose();
  48. }
  49. }
  50. /// <summary>
  51. /// CPU 型号
  52. /// </summary>
  53. /// <returns></returns>
  54. public static string CPUModel()
  55. {
  56. try
  57. {
  58. string result = "";
  59. ManagementObjectSearcher searcher = new ManagementObjectSearcher("select * from Win32_Processor");
  60. foreach (ManagementObject item in searcher.Get())
  61. {
  62. result = item["Name"].ToString();
  63. }
  64. return result;
  65. }
  66. catch
  67. { return UNKNOW; }
  68. }
  69. /// <summary>
  70. /// 显卡型号
  71. /// </summary>
  72. /// <returns></returns>
  73. public static List<string> GraphicsCardModel()
  74. {
  75. try
  76. {
  77. List<string> rs = new List<string>();
  78. ManagementObjectSearcher searcher = new ManagementObjectSearcher("select * from Win32_VideoController");
  79. foreach (ManagementObject item in searcher.Get())
  80. {
  81. rs.Add(item["Name"].ToString());
  82. }
  83. return rs;
  84. }
  85. catch { return null; }
  86. }
  87. /// <summary>
  88. /// 声卡型号
  89. /// </summary>
  90. /// <returns></returns>
  91. public static List<string> SoundCardModel()
  92. {
  93. try
  94. {
  95. List<string> rs = new List<string>();
  96. ManagementObjectSearcher searcher = new ManagementObjectSearcher("select * from Win32_SoundDevice");
  97. foreach (ManagementObject item in searcher.Get())
  98. {
  99. rs.Add(item["Name"].ToString());
  100. }
  101. return rs;
  102. }
  103. catch
  104. { return null; }
  105. }
  106. /// <summary>
  107. /// 物理内存
  108. /// </summary>
  109. /// <returns></returns>
  110. public static ulong TotalPhysicalMemory()
  111. {
  112. ulong size = 0;
  113. try
  114. {
  115. ManagementClass mc = new ManagementClass("Win32_ComputerSystem");
  116. ManagementObjectCollection moc = mc.GetInstances();
  117. foreach (ManagementObject mo in moc)
  118. {
  119. ulong.TryParse(mo["TotalPhysicalMemory"].ToString(), out size);
  120. }
  121. }
  122. catch { }
  123. return size;
  124. }
  125. /// <summary>
  126. /// 可用物理内存
  127. /// </summary>
  128. /// <returns></returns>
  129. public static ulong AvailablePhysicalMemory()
  130. {
  131. ulong size = 0;
  132. try
  133. {
  134. ManagementClass mc = new ManagementClass("Win32_OperatingSystem");
  135. ManagementObjectCollection moc = mc.GetInstances();
  136. foreach (ManagementObject mo in moc)
  137. {
  138. ulong.TryParse(mo["FreePhysicalMemory"].ToString(), out size);
  139. }
  140. }
  141. catch { }
  142. return size;
  143. }
  144. /// <summary>
  145. /// 硬盘型号
  146. /// </summary>
  147. /// <returns></returns>
  148. public static List<string> HardDiskModel()
  149. {
  150. try
  151. {
  152. List<string> rs = new List<string>();
  153. ManagementClass mc = new ManagementClass("Win32_DiskDrive");
  154. ManagementObjectCollection moc = mc.GetInstances();
  155. foreach (ManagementObject mo in moc)
  156. {
  157. rs.Add(mo.Properties["Model"].Value.ToString() + "--" + mo.Properties["SerialNumber"].Value.ToString());
  158. //result = (string);
  159. //if (!result.ToLower().Contains("usb"))
  160. // return result;
  161. }
  162. return rs;
  163. }
  164. catch { return null; }
  165. }
  166. #region 获取硬盘ID
  167. public static string GetHDiskID(string hdModel)
  168. {
  169. try
  170. {
  171. string result = "";
  172. ManagementClass mc = new ManagementClass("Win32_DiskDrive");
  173. ManagementObjectCollection moc = mc.GetInstances();
  174. foreach (ManagementObject mo in moc)
  175. {
  176. if (mo.Properties["Model"].Value.ToString().Contains(hdModel))
  177. {
  178. result = (string)mo.Properties["SerialNumber"].Value;
  179. }
  180. }
  181. return result.Trim();
  182. }
  183. catch
  184. { return UNKNOW; }
  185. }
  186. #endregion
  187. #region 获取操作系统
  188. public static string GetOS()
  189. {
  190. try
  191. {
  192. string result = "";
  193. ManagementObjectSearcher MySearcher = new ManagementObjectSearcher("SELECT * FROM Win32_OperatingSystem");
  194. foreach (ManagementObject MyObject in MySearcher.Get())
  195. {
  196. result = MyObject["Caption"].ToString();
  197. }
  198. return result;
  199. }
  200. catch
  201. { return UNKNOW; }
  202. }
  203. #endregion
  204. #region 获取系统类型
  205. public static string GetSystemType()
  206. {
  207. try
  208. {
  209. string result = "";
  210. ManagementClass mc = new ManagementClass("Win32_ComputerSystem");
  211. ManagementObjectCollection moc = mc.GetInstances();
  212. foreach (ManagementObject mo in moc)
  213. {
  214. result = mo["SystemType"].ToString();
  215. }
  216. return result;
  217. }
  218. catch
  219. { return UNKNOW; }
  220. }
  221. #endregion
  222. #region 获取系统安装日期
  223. public static string GetSystemInstallDate()
  224. {
  225. try
  226. {
  227. string result = "";
  228. ManagementObjectSearcher MySearcher = new ManagementObjectSearcher("SELECT * FROM Win32_OperatingSystem");
  229. foreach (ManagementObject MyObject in MySearcher.Get())
  230. {
  231. result = MyObject["InstallDate"].ToString().Substring(0, 14);
  232. result = result.Insert(12, ":");
  233. result = result.Insert(10, ":");
  234. result = result.Insert(8, " ");
  235. result = result.Insert(6, "-");
  236. result = result.Insert(4, "-");
  237. }
  238. return result;
  239. }
  240. catch
  241. { return UNKNOW; }
  242. }
  243. #endregion
  244. #region 获取登陆用户名
  245. public static string GetLoginUserName()
  246. {
  247. try
  248. {
  249. string result = "";
  250. ManagementClass mc = new ManagementClass("Win32_ComputerSystem");
  251. ManagementObjectCollection moc = mc.GetInstances();
  252. foreach (ManagementObject mo in moc)
  253. {
  254. result = mo["UserName"].ToString();
  255. }
  256. return result;
  257. }
  258. catch
  259. { return UNKNOW; }
  260. }
  261. #endregion
  262. #region 获取计算机名
  263. public static string GetComputerName()
  264. {
  265. try
  266. {
  267. string result = "";
  268. result = System.Environment.GetEnvironmentVariable("ComputerName");
  269. return result;
  270. }
  271. catch
  272. { return UNKNOW; }
  273. }
  274. #endregion
  275. #region 获取所有用户名
  276. public static List<string> GetSysUserNames()
  277. {
  278. int EntriesRead;
  279. int TotalEntries;
  280. int Resume;
  281. IntPtr bufPtr;
  282. List<string> temp = new List<string>();
  283. NetUserEnum(null, 0, 2, out bufPtr, -1, out EntriesRead, out TotalEntries, out Resume);
  284. if (EntriesRead > 0)
  285. {
  286. USER_INFO_0[] Users = new USER_INFO_0[EntriesRead];
  287. IntPtr iter = bufPtr;
  288. for (int i = 0; i < EntriesRead; i++)
  289. {
  290. Users[i] = (USER_INFO_0)Marshal.PtrToStructure(iter, typeof(USER_INFO_0));
  291. iter = (IntPtr)((long)iter + Marshal.SizeOf(typeof(USER_INFO_0)));
  292. temp.Add(Users[i].Username);
  293. }
  294. NetApiBufferFree(bufPtr);
  295. }
  296. return temp;
  297. }
  298. [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
  299. private struct USER_INFO_0
  300. {
  301. public string Username;
  302. }
  303. [DllImport("Netapi32.dll ")]
  304. extern static int NetUserEnum([MarshalAs(UnmanagedType.LPWStr)]
  305. string servername,
  306. int level,
  307. int filter,
  308. out IntPtr bufptr,
  309. int prefmaxlen,
  310. out int entriesread,
  311. out int totalentries,
  312. out int resume_handle);
  313. [DllImport("Netapi32.dll ")]
  314. extern static int NetApiBufferFree(IntPtr Buffer);
  315. #endregion
  316. #region 获取主板制造商
  317. public static string GetBoardManufacturer()
  318. {
  319. try
  320. {
  321. string result = "";
  322. ManagementObjectSearcher MySearcher = new ManagementObjectSearcher("SELECT * FROM Win32_BaseBoard");
  323. foreach (ManagementObject MyObject in MySearcher.Get())
  324. {
  325. result = MyObject["Manufacturer"].ToString();
  326. }
  327. return result;
  328. }
  329. catch
  330. { return UNKNOW; }
  331. }
  332. #endregion
  333. #region 获取主板型号
  334. public static string GetBoardProduct()
  335. {
  336. try
  337. {
  338. string result = "";
  339. ManagementObjectSearcher MySearcher = new ManagementObjectSearcher("SELECT * FROM Win32_BaseBoard");
  340. foreach (ManagementObject MyObject in MySearcher.Get())
  341. {
  342. result = MyObject["Product"].ToString();
  343. }
  344. return result;
  345. }
  346. catch
  347. { return UNKNOW; }
  348. }
  349. #endregion
  350. #region 获取主板序列号
  351. public static string GetBoardSerialNumber()
  352. {
  353. try
  354. {
  355. string result = "";
  356. ManagementObjectSearcher MySearcher = new ManagementObjectSearcher("SELECT * FROM Win32_BaseBoard");
  357. foreach (ManagementObject MyObject in MySearcher.Get())
  358. {
  359. result = MyObject["SerialNumber"].ToString();
  360. }
  361. return result;
  362. }
  363. catch
  364. { return UNKNOW; }
  365. }
  366. #endregion
  367. }
  368. }