ComputerInfoTool.cs 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430
  1. //************************************************************************
  2. // https://github.com/yuzhengyang
  3. // author: yuzhengyang
  4. // date: 2017.3.29 - 2017.7.13
  5. // desc: 计算机信息
  6. // Copyright (c) yuzhengyang. All rights reserved.
  7. //************************************************************************
  8. using System;
  9. using System.Collections.Generic;
  10. using System.IO;
  11. using System.Management;
  12. using System.Net.NetworkInformation;
  13. using System.Runtime.InteropServices;
  14. using Y.Utils.NetUtils.NetInfoUtils;
  15. namespace Y.Utils.WindowsUtils.InfoUtils
  16. {
  17. /// <summary>
  18. /// 计算机信息
  19. /// </summary>
  20. public static class ComputerInfoTool
  21. {
  22. const string UNKNOW = "unknow";
  23. /// <summary>
  24. /// CPU 信息
  25. /// 【序列号、型号】
  26. /// </summary>
  27. /// <returns></returns>
  28. public static Tuple<string, string> CpuInfo()
  29. {
  30. try
  31. {
  32. Tuple<string, string> result = null;
  33. ManagementObjectSearcher searcher = new ManagementObjectSearcher("select * from Win32_Processor");
  34. foreach (ManagementObject item in searcher.Get())
  35. {
  36. result = new Tuple<string, string>(
  37. item["ProcessorId"].ToString().Trim(),
  38. item["Name"].ToString().Trim());
  39. break;
  40. }
  41. return result;
  42. }
  43. catch (Exception e)
  44. {
  45. return null;
  46. }
  47. }
  48. /// <summary>
  49. /// 网卡信息
  50. /// 【名称、描述、物理地址(Mac)、Ip地址、网关地址】
  51. /// </summary>
  52. /// <returns></returns>
  53. public static List<Tuple<string, string, string, string, string>> NetworkCardInfo()
  54. {
  55. return NetCardInfoTool.GetNetworkCardInfo();
  56. }
  57. /// <summary>
  58. /// 显卡型号
  59. /// 【型号、RAM】
  60. /// </summary>
  61. /// <returns></returns>
  62. public static List<Tuple<string, ulong>> GraphicsCardInfo()
  63. {
  64. try
  65. {
  66. List<Tuple<string, ulong>> rs = new List<Tuple<string, ulong>>();
  67. ManagementObjectSearcher searcher = new ManagementObjectSearcher("select * from Win32_VideoController");
  68. foreach (ManagementObject item in searcher.Get())
  69. {
  70. string name = item["Name"].ToString().Trim();
  71. string ram = item["AdapterRAM"].ToString().Trim();
  72. ulong ramnumber;
  73. ulong.TryParse(ram, out ramnumber);
  74. rs.Add(new Tuple<string, ulong>(name, ramnumber));
  75. }
  76. return rs;
  77. }
  78. catch { return null; }
  79. }
  80. /// <summary>
  81. /// 声卡型号
  82. /// </summary>
  83. /// <returns></returns>
  84. public static List<string> SoundCardModel()
  85. {
  86. try
  87. {
  88. List<string> rs = new List<string>();
  89. ManagementObjectSearcher searcher = new ManagementObjectSearcher("select * from Win32_SoundDevice");
  90. foreach (ManagementObject item in searcher.Get())
  91. {
  92. rs.Add(item["Name"].ToString().Trim());
  93. }
  94. return rs;
  95. }
  96. catch
  97. { return null; }
  98. }
  99. /// <summary>
  100. /// 内存型号
  101. /// </summary>
  102. /// <returns></returns>
  103. public static List<string> RAMModel()
  104. {
  105. List<string> rs = new List<string>();
  106. try
  107. {
  108. ManagementClass mc = new ManagementClass("Win32_PhysicalMemory");
  109. ManagementObjectCollection moc = mc.GetInstances();
  110. foreach (ManagementObject mo in moc)
  111. {
  112. //string temp = "";
  113. //foreach (PropertyData m in mo.Properties)
  114. //{
  115. // try
  116. // {
  117. // temp += m.Name.ToString() + " : " + m.Value.ToString() + "&&&&";
  118. // }
  119. // catch { }
  120. //}
  121. //rs.Add(temp);
  122. try { rs.Add(mo["Manufacturer"].ToString().Trim() + " " + mo["PartNumber"].ToString().Trim()); } catch { }
  123. }
  124. }
  125. catch (Exception ex) { }
  126. return rs;
  127. }
  128. /// <summary>
  129. /// 物理内存
  130. /// </summary>
  131. /// <returns></returns>
  132. public static ulong TotalPhysicalMemory()
  133. {
  134. ulong size = 0;
  135. try
  136. {
  137. ManagementClass mc = new ManagementClass("Win32_ComputerSystem");
  138. ManagementObjectCollection moc = mc.GetInstances();
  139. foreach (ManagementObject mo in moc)
  140. {
  141. ulong.TryParse(mo["TotalPhysicalMemory"].ToString(), out size);
  142. break;
  143. }
  144. }
  145. catch { }
  146. return size;
  147. }
  148. /// <summary>
  149. /// 可用物理内存
  150. /// </summary>
  151. /// <returns></returns>
  152. public static ulong AvailablePhysicalMemory()
  153. {
  154. ulong size = 0;
  155. try
  156. {
  157. ManagementClass mc = new ManagementClass("Win32_OperatingSystem");
  158. ManagementObjectCollection moc = mc.GetInstances();
  159. foreach (ManagementObject mo in moc)
  160. {
  161. ulong.TryParse(mo["FreePhysicalMemory"].ToString(), out size);
  162. break;
  163. }
  164. }
  165. catch { }
  166. return size;
  167. }
  168. /// <summary>
  169. /// 硬盘信息
  170. /// 【序列号、型号】
  171. /// </summary>
  172. /// <returns></returns>
  173. public static List<Tuple<string, string>> HardDiskInfo()
  174. {
  175. List<Tuple<string, string>> result = new List<Tuple<string, string>>();
  176. try
  177. {
  178. ManagementClass mc = new ManagementClass("Win32_DiskDrive");
  179. ManagementObjectCollection moc = mc.GetInstances();
  180. foreach (ManagementObject mo in moc)
  181. {
  182. result.Add(new Tuple<string, string>(
  183. mo.Properties["SerialNumber"].Value.ToString().Trim(),
  184. mo.Properties["Model"].Value.ToString().Trim()));
  185. }
  186. return result;
  187. }
  188. catch (Exception e)
  189. {
  190. return result;
  191. }
  192. }
  193. /// <summary>
  194. /// 计算机名
  195. /// </summary>
  196. /// <returns></returns>
  197. public static string MachineName()
  198. {
  199. try
  200. {
  201. return Environment.MachineName;
  202. }
  203. catch
  204. { return UNKNOW; }
  205. }
  206. /// <summary>
  207. /// 主板信息
  208. /// 【制造商、型号、序列号】
  209. /// </summary>
  210. /// <returns></returns>
  211. public static Tuple<string, string, string> BoardInfo()
  212. {
  213. try
  214. {
  215. Tuple<string, string, string> result = null;
  216. ManagementObjectSearcher MySearcher = new ManagementObjectSearcher("SELECT * FROM Win32_BaseBoard");
  217. foreach (ManagementObject MyObject in MySearcher.Get())
  218. {
  219. result = new Tuple<string, string, string>(
  220. MyObject["Manufacturer"].ToString().Trim(),
  221. MyObject["Product"].ToString().Trim(),
  222. MyObject["SerialNumber"].ToString().Trim());
  223. break;
  224. }
  225. return result;
  226. }
  227. catch (Exception e)
  228. { return null; }
  229. }
  230. /// <summary>
  231. /// 操作系统信息
  232. /// 【系统名称、系统路劲、安装时间】
  233. /// </summary>
  234. /// <returns></returns>
  235. public static Tuple<string, string, DateTime> OsInfo()
  236. {
  237. try
  238. {
  239. Tuple<string, string, DateTime> result = null;
  240. ManagementObjectSearcher MySearcher = new ManagementObjectSearcher("SELECT * FROM Win32_OperatingSystem");
  241. foreach (ManagementObject MyObject in MySearcher.Get())
  242. {
  243. string caption = MyObject["Caption"].ToString().Trim();
  244. string windowsdirectory = MyObject["WindowsDirectory"].ToString().Trim();
  245. string installdate = MyObject["InstallDate"].ToString().Trim();
  246. DateTime dtinstalldate = DateTime.Parse("2001-10-25");//设置初始值为WindowsXP发布日期
  247. if (installdate.Length >= 14)
  248. {
  249. installdate = installdate.Substring(0, 14);
  250. installdate = installdate.Insert(12, ":");
  251. installdate = installdate.Insert(10, ":");
  252. installdate = installdate.Insert(8, " ");
  253. installdate = installdate.Insert(6, "-");
  254. installdate = installdate.Insert(4, "-");
  255. DateTime.TryParse(installdate, out dtinstalldate);
  256. }
  257. if (dtinstalldate.Year < 2001) dtinstalldate = DateTime.Parse("2001-10-25");
  258. result = new Tuple<string, string, DateTime>(
  259. caption, windowsdirectory, dtinstalldate);
  260. break;
  261. }
  262. return result;
  263. }
  264. catch (Exception e)
  265. { return null; }
  266. }
  267. /// <summary>
  268. /// 系统类型
  269. /// </summary>
  270. /// <returns></returns>
  271. public static string SystemType()
  272. {
  273. try
  274. {
  275. string result = "";
  276. ManagementClass mc = new ManagementClass("Win32_ComputerSystem");
  277. ManagementObjectCollection moc = mc.GetInstances();
  278. foreach (ManagementObject mo in moc)
  279. {
  280. result = mo["SystemType"].ToString();
  281. }
  282. return result;
  283. }
  284. catch
  285. { return UNKNOW; }
  286. }
  287. /// <summary>
  288. /// 当前用户名
  289. /// </summary>
  290. /// <returns></returns>
  291. public static string UserName()
  292. {
  293. return Environment.UserName;
  294. }
  295. /// <summary>
  296. /// 当前用户名
  297. /// </summary>
  298. /// <returns></returns>
  299. public static string UserName2()
  300. {
  301. try
  302. {
  303. string result = "";
  304. ManagementClass mc = new ManagementClass("Win32_ComputerSystem");
  305. ManagementObjectCollection moc = mc.GetInstances();
  306. foreach (ManagementObject mo in moc)
  307. {
  308. result = mo["UserName"].ToString();
  309. }
  310. return result;
  311. }
  312. catch
  313. { return UNKNOW; }
  314. }
  315. #region 获取所有用户名
  316. /// <summary>
  317. /// 所有用户名称
  318. /// </summary>
  319. /// <returns></returns>
  320. public static List<string> UserNames()
  321. {
  322. int EntriesRead;
  323. int TotalEntries;
  324. int Resume;
  325. IntPtr bufPtr;
  326. List<string> temp = new List<string>();
  327. NetUserEnum(null, 0, 2, out bufPtr, -1, out EntriesRead, out TotalEntries, out Resume);
  328. if (EntriesRead > 0)
  329. {
  330. USER_INFO_0[] Users = new USER_INFO_0[EntriesRead];
  331. IntPtr iter = bufPtr;
  332. for (int i = 0; i < EntriesRead; i++)
  333. {
  334. Users[i] = (USER_INFO_0)Marshal.PtrToStructure(iter, typeof(USER_INFO_0));
  335. iter = (IntPtr)((long)iter + Marshal.SizeOf(typeof(USER_INFO_0)));
  336. temp.Add(Users[i].Username);
  337. }
  338. NetApiBufferFree(bufPtr);
  339. }
  340. return temp;
  341. }
  342. [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
  343. private struct USER_INFO_0
  344. {
  345. public string Username;
  346. }
  347. [DllImport("Netapi32.dll ")]
  348. extern static int NetUserEnum([MarshalAs(UnmanagedType.LPWStr)] string servername, int level, int filter, out IntPtr bufptr, int prefmaxlen, out int entriesread, out int totalentries, out int resume_handle);
  349. [DllImport("Netapi32.dll ")]
  350. extern static int NetApiBufferFree(IntPtr Buffer);
  351. #endregion
  352. /// <summary>
  353. /// 域名
  354. /// </summary>
  355. /// <returns></returns>
  356. public static string UserDomainName()
  357. {
  358. try
  359. {
  360. return Environment.UserDomainName;
  361. }
  362. catch
  363. { return UNKNOW; }
  364. }
  365. /// <summary>
  366. /// 系统启动后的毫秒数
  367. /// </summary>
  368. /// <returns></returns>
  369. public static int TickCount()
  370. {
  371. return Environment.TickCount;
  372. }
  373. /// <summary>
  374. /// 处理器数
  375. /// </summary>
  376. /// <returns></returns>
  377. public static int ProcessorCount()
  378. {
  379. return Environment.ProcessorCount;
  380. }
  381. /// <summary>
  382. /// 平台标识和版本号
  383. /// </summary>
  384. /// <returns></returns>
  385. public static string OSVersion()
  386. {
  387. try
  388. {
  389. return Environment.OSVersion.ToString();
  390. }
  391. catch
  392. { return UNKNOW; }
  393. }
  394. /// <summary>
  395. /// 64位操作系统
  396. /// </summary>
  397. /// <returns></returns>
  398. public static bool Is64BitOperatingSystem()
  399. {
  400. return Environment.Is64BitOperatingSystem;
  401. }
  402. /// <summary>
  403. /// 获取系统盘总容量
  404. /// </summary>
  405. /// <returns></returns>
  406. public static long GetSystemDriveTotalSize()
  407. {
  408. try
  409. {
  410. DriveInfo Drive = new DriveInfo("C");//系统盘驱动器
  411. var osinfo = ComputerInfoTool.OsInfo();
  412. if (osinfo != null)
  413. {
  414. string drive = osinfo.Item2.Substring(0, 1);
  415. Drive = new DriveInfo(drive);
  416. }
  417. return Drive.TotalSize;
  418. }
  419. catch { }
  420. return 0;
  421. }
  422. }
  423. }