ComputerInfoTool.cs 13 KB

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