ComputerInfoTool.cs 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485
  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 ComputerType() {
  290. return "UNKNOWN";
  291. }
  292. /// <summary>
  293. /// 当前用户名
  294. /// </summary>
  295. /// <returns></returns>
  296. public static string UserName()
  297. {
  298. return Environment.UserName;
  299. }
  300. /// <summary>
  301. /// 当前用户名
  302. /// </summary>
  303. /// <returns></returns>
  304. public static string UserName2()
  305. {
  306. try
  307. {
  308. string result = "";
  309. ManagementClass mc = new ManagementClass("Win32_ComputerSystem");
  310. ManagementObjectCollection moc = mc.GetInstances();
  311. foreach (ManagementObject mo in moc)
  312. {
  313. result = mo["UserName"].ToString();
  314. }
  315. return result;
  316. }
  317. catch
  318. { return UNKNOW; }
  319. }
  320. #region 获取所有用户名
  321. /// <summary>
  322. /// 所有用户名称
  323. /// </summary>
  324. /// <returns></returns>
  325. public static List<string> UserNames()
  326. {
  327. List<string> temp = new List<string>();
  328. try
  329. {
  330. IntPtr bufPtr;
  331. NetUserEnum(null, 0, 2, out bufPtr, -1, out int EntriesRead, out int TotalEntries, out int Resume);
  332. if (EntriesRead > 0)
  333. {
  334. USER_INFO_0[] Users = new USER_INFO_0[EntriesRead];
  335. IntPtr iter = bufPtr;
  336. for (int i = 0; i < EntriesRead; i++)
  337. {
  338. Users[i] = (USER_INFO_0)Marshal.PtrToStructure(iter, typeof(USER_INFO_0));
  339. iter = (IntPtr)((long)iter + Marshal.SizeOf(typeof(USER_INFO_0)));
  340. temp.Add(Users[i].Username);
  341. }
  342. NetApiBufferFree(bufPtr);
  343. }
  344. }
  345. catch { }
  346. return temp;
  347. }
  348. [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
  349. private struct USER_INFO_0
  350. {
  351. public string Username;
  352. }
  353. [DllImport("Netapi32.dll ")]
  354. 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);
  355. [DllImport("Netapi32.dll ")]
  356. extern static int NetApiBufferFree(IntPtr Buffer);
  357. #endregion
  358. /// <summary>
  359. /// 域名
  360. /// </summary>
  361. /// <returns></returns>
  362. public static string UserDomainName()
  363. {
  364. try
  365. {
  366. return Environment.UserDomainName;
  367. }
  368. catch
  369. { return UNKNOW; }
  370. }
  371. /// <summary>
  372. /// 系统启动后的毫秒数
  373. /// </summary>
  374. /// <returns></returns>
  375. public static int TickCount()
  376. {
  377. return Environment.TickCount;
  378. }
  379. /// <summary>
  380. /// 获取机器开机时间
  381. /// </summary>
  382. /// <returns></returns>
  383. public static DateTime StartTime()
  384. {
  385. DateTime time = DateTime.Now;
  386. try { time = time.AddMilliseconds(-Environment.TickCount); } catch { }
  387. return time;
  388. }
  389. /// <summary>
  390. /// 处理器数
  391. /// </summary>
  392. /// <returns></returns>
  393. public static int ProcessorCount()
  394. {
  395. return Environment.ProcessorCount;
  396. }
  397. /// <summary>
  398. /// 平台标识和版本号
  399. /// </summary>
  400. /// <returns></returns>
  401. public static string OSVersion()
  402. {
  403. try
  404. {
  405. return Environment.OSVersion.ToString();
  406. }
  407. catch
  408. { return UNKNOW; }
  409. }
  410. /// <summary>
  411. /// 64位操作系统
  412. /// </summary>
  413. /// <returns></returns>
  414. public static bool Is64BitOperatingSystem()
  415. {
  416. return Environment.Is64BitOperatingSystem;
  417. }
  418. /// <summary>
  419. /// 获取系统盘总容量(单位:KB)
  420. /// </summary>
  421. /// <returns></returns>
  422. public static long GetSystemDriveTotalSize()
  423. {
  424. try
  425. {
  426. DriveInfo Drive = new DriveInfo("C");//系统盘驱动器
  427. var osinfo = OsInfo();
  428. if (osinfo != null)
  429. {
  430. string drive = osinfo.Item2.Substring(0, 1);
  431. Drive = new DriveInfo(drive);
  432. }
  433. return Drive.TotalSize / 1024;
  434. }
  435. catch { }
  436. return 0;
  437. }
  438. /// <summary>
  439. /// 获取系统盘可用容量(单位:KB)
  440. /// </summary>
  441. /// <returns></returns>
  442. public static long GetSystemDriveAvailableSize()
  443. {
  444. long size = 0;
  445. try
  446. {
  447. var osinfo = OsInfo();
  448. if (osinfo != null)
  449. {
  450. string drive = osinfo.Item2.Substring(0, 1);
  451. DriveInfo Drive = new DriveInfo(drive);
  452. size = Drive.TotalFreeSpace / 1024;
  453. }
  454. }
  455. catch { }
  456. return size;
  457. }
  458. /// <summary>
  459. /// 获取磁盘上次格式化时间
  460. /// </summary>
  461. /// <param name="dstr"></param>
  462. /// <returns></returns>
  463. public static DateTime GetLastFormatTime(string dstr)
  464. {
  465. DateTime result = DateTime.Now;
  466. string volInfo = dstr + "System Volume Information";
  467. if (Directory.Exists(volInfo))
  468. {
  469. try
  470. {
  471. DirectoryInfo di = new DirectoryInfo(volInfo);
  472. result = di.CreationTime;
  473. }
  474. catch (Exception e) { }
  475. }
  476. return result;
  477. }
  478. }
  479. }