ComputerInfoTool.cs 16 KB

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