ComputerInfoTool.cs 12 KB

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