ComputerInfoTool.cs 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401
  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 ulong TotalPhysicalMemory()
  104. {
  105. ulong size = 0;
  106. try
  107. {
  108. ManagementClass mc = new ManagementClass("Win32_ComputerSystem");
  109. ManagementObjectCollection moc = mc.GetInstances();
  110. foreach (ManagementObject mo in moc)
  111. {
  112. ulong.TryParse(mo["TotalPhysicalMemory"].ToString(), out size);
  113. break;
  114. }
  115. }
  116. catch { }
  117. return size;
  118. }
  119. /// <summary>
  120. /// 可用物理内存
  121. /// </summary>
  122. /// <returns></returns>
  123. public static ulong AvailablePhysicalMemory()
  124. {
  125. ulong size = 0;
  126. try
  127. {
  128. ManagementClass mc = new ManagementClass("Win32_OperatingSystem");
  129. ManagementObjectCollection moc = mc.GetInstances();
  130. foreach (ManagementObject mo in moc)
  131. {
  132. ulong.TryParse(mo["FreePhysicalMemory"].ToString(), out size);
  133. break;
  134. }
  135. }
  136. catch { }
  137. return size;
  138. }
  139. /// <summary>
  140. /// 硬盘信息
  141. /// 【序列号、型号】
  142. /// </summary>
  143. /// <returns></returns>
  144. public static List<Tuple<string, string>> HardDiskInfo()
  145. {
  146. List<Tuple<string, string>> result = new List<Tuple<string, string>>();
  147. try
  148. {
  149. ManagementClass mc = new ManagementClass("Win32_DiskDrive");
  150. ManagementObjectCollection moc = mc.GetInstances();
  151. foreach (ManagementObject mo in moc)
  152. {
  153. result.Add(new Tuple<string, string>(
  154. mo.Properties["SerialNumber"].Value.ToString().Trim(),
  155. mo.Properties["Model"].Value.ToString().Trim()));
  156. }
  157. return result;
  158. }
  159. catch (Exception e)
  160. {
  161. return result;
  162. }
  163. }
  164. /// <summary>
  165. /// 计算机名
  166. /// </summary>
  167. /// <returns></returns>
  168. public static string MachineName()
  169. {
  170. try
  171. {
  172. return Environment.MachineName;
  173. }
  174. catch
  175. { return UNKNOW; }
  176. }
  177. /// <summary>
  178. /// 主板信息
  179. /// 【制造商、型号、序列号】
  180. /// </summary>
  181. /// <returns></returns>
  182. public static Tuple<string, string, string> BoardInfo()
  183. {
  184. try
  185. {
  186. Tuple<string, string, string> result = null;
  187. ManagementObjectSearcher MySearcher = new ManagementObjectSearcher("SELECT * FROM Win32_BaseBoard");
  188. foreach (ManagementObject MyObject in MySearcher.Get())
  189. {
  190. result = new Tuple<string, string, string>(
  191. MyObject["Manufacturer"].ToString().Trim(),
  192. MyObject["Product"].ToString().Trim(),
  193. MyObject["SerialNumber"].ToString().Trim());
  194. break;
  195. }
  196. return result;
  197. }
  198. catch (Exception e)
  199. { return null; }
  200. }
  201. /// <summary>
  202. /// 操作系统信息
  203. /// 【系统名称、系统路劲、安装时间】
  204. /// </summary>
  205. /// <returns></returns>
  206. public static Tuple<string, string, DateTime> OsInfo()
  207. {
  208. try
  209. {
  210. Tuple<string, string, DateTime> result = null;
  211. ManagementObjectSearcher MySearcher = new ManagementObjectSearcher("SELECT * FROM Win32_OperatingSystem");
  212. foreach (ManagementObject MyObject in MySearcher.Get())
  213. {
  214. string caption = MyObject["Caption"].ToString().Trim();
  215. string windowsdirectory = MyObject["WindowsDirectory"].ToString().Trim();
  216. string installdate = MyObject["InstallDate"].ToString().Trim();
  217. DateTime dtinstalldate = DateTime.Parse("2001-10-25");//设置初始值为WindowsXP发布日期
  218. if (installdate.Length >= 14)
  219. {
  220. installdate = installdate.Substring(0, 14);
  221. installdate = installdate.Insert(12, ":");
  222. installdate = installdate.Insert(10, ":");
  223. installdate = installdate.Insert(8, " ");
  224. installdate = installdate.Insert(6, "-");
  225. installdate = installdate.Insert(4, "-");
  226. DateTime.TryParse(installdate, out dtinstalldate);
  227. }
  228. if (dtinstalldate.Year < 2001) dtinstalldate = DateTime.Parse("2001-10-25");
  229. result = new Tuple<string, string, DateTime>(
  230. caption, windowsdirectory, dtinstalldate);
  231. break;
  232. }
  233. return result;
  234. }
  235. catch (Exception e)
  236. { return null; }
  237. }
  238. /// <summary>
  239. /// 系统类型
  240. /// </summary>
  241. /// <returns></returns>
  242. public static string SystemType()
  243. {
  244. try
  245. {
  246. string result = "";
  247. ManagementClass mc = new ManagementClass("Win32_ComputerSystem");
  248. ManagementObjectCollection moc = mc.GetInstances();
  249. foreach (ManagementObject mo in moc)
  250. {
  251. result = mo["SystemType"].ToString();
  252. }
  253. return result;
  254. }
  255. catch
  256. { return UNKNOW; }
  257. }
  258. /// <summary>
  259. /// 当前用户名
  260. /// </summary>
  261. /// <returns></returns>
  262. public static string UserName()
  263. {
  264. return Environment.UserName;
  265. }
  266. /// <summary>
  267. /// 当前用户名
  268. /// </summary>
  269. /// <returns></returns>
  270. public static string UserName2()
  271. {
  272. try
  273. {
  274. string result = "";
  275. ManagementClass mc = new ManagementClass("Win32_ComputerSystem");
  276. ManagementObjectCollection moc = mc.GetInstances();
  277. foreach (ManagementObject mo in moc)
  278. {
  279. result = mo["UserName"].ToString();
  280. }
  281. return result;
  282. }
  283. catch
  284. { return UNKNOW; }
  285. }
  286. #region 获取所有用户名
  287. /// <summary>
  288. /// 所有用户名称
  289. /// </summary>
  290. /// <returns></returns>
  291. public static List<string> UserNames()
  292. {
  293. int EntriesRead;
  294. int TotalEntries;
  295. int Resume;
  296. IntPtr bufPtr;
  297. List<string> temp = new List<string>();
  298. NetUserEnum(null, 0, 2, out bufPtr, -1, out EntriesRead, out TotalEntries, out Resume);
  299. if (EntriesRead > 0)
  300. {
  301. USER_INFO_0[] Users = new USER_INFO_0[EntriesRead];
  302. IntPtr iter = bufPtr;
  303. for (int i = 0; i < EntriesRead; i++)
  304. {
  305. Users[i] = (USER_INFO_0)Marshal.PtrToStructure(iter, typeof(USER_INFO_0));
  306. iter = (IntPtr)((long)iter + Marshal.SizeOf(typeof(USER_INFO_0)));
  307. temp.Add(Users[i].Username);
  308. }
  309. NetApiBufferFree(bufPtr);
  310. }
  311. return temp;
  312. }
  313. [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
  314. private struct USER_INFO_0
  315. {
  316. public string Username;
  317. }
  318. [DllImport("Netapi32.dll ")]
  319. 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);
  320. [DllImport("Netapi32.dll ")]
  321. extern static int NetApiBufferFree(IntPtr Buffer);
  322. #endregion
  323. /// <summary>
  324. /// 域名
  325. /// </summary>
  326. /// <returns></returns>
  327. public static string UserDomainName()
  328. {
  329. try
  330. {
  331. return Environment.UserDomainName;
  332. }
  333. catch
  334. { return UNKNOW; }
  335. }
  336. /// <summary>
  337. /// 系统启动后的毫秒数
  338. /// </summary>
  339. /// <returns></returns>
  340. public static int TickCount()
  341. {
  342. return Environment.TickCount;
  343. }
  344. /// <summary>
  345. /// 处理器数
  346. /// </summary>
  347. /// <returns></returns>
  348. public static int ProcessorCount()
  349. {
  350. return Environment.ProcessorCount;
  351. }
  352. /// <summary>
  353. /// 平台标识和版本号
  354. /// </summary>
  355. /// <returns></returns>
  356. public static string OSVersion()
  357. {
  358. try
  359. {
  360. return Environment.OSVersion.ToString();
  361. }
  362. catch
  363. { return UNKNOW; }
  364. }
  365. /// <summary>
  366. /// 64位操作系统
  367. /// </summary>
  368. /// <returns></returns>
  369. public static bool Is64BitOperatingSystem()
  370. {
  371. return Environment.Is64BitOperatingSystem;
  372. }
  373. /// <summary>
  374. /// 获取系统盘总容量
  375. /// </summary>
  376. /// <returns></returns>
  377. public static long GetSystemDriveTotalSize()
  378. {
  379. try
  380. {
  381. DriveInfo Drive = new DriveInfo("C");//系统盘驱动器
  382. var osinfo = ComputerInfoTool.OsInfo();
  383. if (osinfo != null)
  384. {
  385. string drive = osinfo.Item2.Substring(0, 1);
  386. Drive = new DriveInfo(drive);
  387. }
  388. return Drive.TotalSize;
  389. }
  390. catch { }
  391. return 0;
  392. }
  393. }
  394. }