Windows.cs 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468
  1. using System;
  2. using System.Diagnostics;
  3. using System.Management;
  4. using System.Net;
  5. using System.Text;
  6. using System.Text.RegularExpressions;
  7. using System.Threading;
  8. using static System.String;
  9. namespace Masuit.Tools.Win32
  10. {
  11. /// <summary>
  12. /// Windows系统的系列方法
  13. /// </summary>
  14. public static class Windows
  15. {
  16. /// <summary>
  17. /// 获取当前使用的IP
  18. /// </summary>
  19. /// <returns></returns>
  20. public static string GetLocalUsedIP()
  21. {
  22. string result = RunApp("route", "print", true);
  23. Match m = Regex.Match(result, @"0.0.0.0\s+0.0.0.0\s+(\d+.\d+.\d+.\d+)\s+(\d+.\d+.\d+.\d+)");
  24. if (m.Success)
  25. {
  26. return m.Groups[2].Value;
  27. }
  28. try
  29. {
  30. string ip;
  31. using (System.Net.Sockets.TcpClient c = new System.Net.Sockets.TcpClient())
  32. {
  33. c.Connect("www.baidu.com", 80);
  34. ip = ((IPEndPoint)c.Client.LocalEndPoint).Address.ToString();
  35. }
  36. return ip;
  37. }
  38. catch (Exception)
  39. {
  40. return null;
  41. }
  42. }
  43. /// <summary>
  44. /// 运行一个控制台程序并返回其输出参数。
  45. /// </summary>
  46. /// <param name="filename">程序名</param>
  47. /// <param name="arguments">输入参数</param>
  48. /// <param name="recordLog">是否在控制台输出日志</param>
  49. /// <returns></returns>
  50. public static string RunApp(string filename, string arguments, bool recordLog)
  51. {
  52. try
  53. {
  54. if (recordLog)
  55. {
  56. Trace.WriteLine(filename + " " + arguments);
  57. }
  58. Process proc = new Process
  59. {
  60. StartInfo =
  61. {
  62. FileName = filename,
  63. CreateNoWindow = true,
  64. Arguments = arguments,
  65. RedirectStandardOutput = true,
  66. UseShellExecute = false
  67. }
  68. };
  69. proc.Start();
  70. using (System.IO.StreamReader sr = new System.IO.StreamReader(proc.StandardOutput.BaseStream, Encoding.Default))
  71. {
  72. //上面标记的是原文,下面是我自己调试错误后自行修改的
  73. Thread.Sleep(100); //貌似调用系统的nslookup还未返回数据或者数据未编码完成,程序就已经跳过直接执行
  74. //txt = sr.ReadToEnd()了,导致返回的数据为空,故睡眠令硬件反应
  75. if (!proc.HasExited) //在无参数调用nslookup后,可以继续输入命令继续操作,如果进程未停止就直接执行
  76. {
  77. //txt = sr.ReadToEnd()程序就在等待输入,而且又无法输入,直接掐住无法继续运行
  78. proc.Kill();
  79. }
  80. string txt = sr.ReadToEnd();
  81. if (recordLog)
  82. Trace.WriteLine(txt);
  83. return txt;
  84. }
  85. }
  86. catch (Exception ex)
  87. {
  88. Trace.WriteLine(ex);
  89. return ex.Message;
  90. }
  91. }
  92. }
  93. /// <summary>
  94. /// 服务器信息
  95. /// </summary>
  96. public class WindowsServer
  97. {
  98. /// <summary>
  99. /// CPUID
  100. /// </summary>
  101. public string CpuId; //CPU的ID
  102. /// <summary>
  103. /// CPU插槽数
  104. /// </summary>
  105. public int CpuCount; //CPU的个数
  106. /// <summary>
  107. /// CPU主频
  108. /// </summary>
  109. public string[] CpuMhz; //CPU频率 单位:hz
  110. /// <summary>
  111. /// mac地址
  112. /// </summary>
  113. public string MacAddress; //计算机的MAC地址
  114. /// <summary>
  115. /// 硬盘ID
  116. /// </summary>
  117. public string DiskId; //硬盘的ID
  118. /// <summary>
  119. /// 硬盘大小
  120. /// </summary>
  121. public string DiskSize; //硬盘大小 单位:bytes
  122. /// <summary>
  123. /// IP地址
  124. /// </summary>
  125. public string IpAddress; //计算机的IP地址
  126. /// <summary>
  127. /// 系统当前登录用户
  128. /// </summary>
  129. public string LoginUserName; //操作系统登录用户名
  130. /// <summary>
  131. /// 计算机名
  132. /// </summary>
  133. public string ComputerName; //计算机名
  134. /// <summary>
  135. /// 操作系统架构
  136. /// </summary>
  137. public string SystemType; //系统类型
  138. /// <summary>
  139. /// 物理内存,单位MB
  140. /// </summary>
  141. public string TotalPhysicalMemory; //总共的内存 单位:M
  142. private static WindowsServer _instance;
  143. /// <summary>
  144. /// 获取实例
  145. /// </summary>
  146. public static WindowsServer Instance
  147. {
  148. get
  149. {
  150. if (_instance == null) _instance = new WindowsServer();
  151. return _instance;
  152. }
  153. }
  154. /// <summary>
  155. /// 构造函数
  156. /// </summary>
  157. public WindowsServer()
  158. {
  159. CpuId = GetCpuID();
  160. CpuCount = GetCpuCount();
  161. CpuMhz = GetCpuMHZ();
  162. MacAddress = GetMacAddress();
  163. DiskId = GetDiskID();
  164. DiskSize = GetSizeOfDisk();
  165. IpAddress = GetIPAddress();
  166. LoginUserName = GetUserName();
  167. SystemType = GetSystemType();
  168. TotalPhysicalMemory = GetTotalPhysicalMemory();
  169. ComputerName = GetComputerName();
  170. }
  171. string GetCpuID()
  172. {
  173. try
  174. {
  175. //获取CPU序列号代码
  176. string cpuInfo = " "; //cpu序列号
  177. using (var mc = new ManagementClass("Win32_Processor"))
  178. {
  179. foreach (ManagementObject mo in mc.GetInstances())
  180. {
  181. using (mo)
  182. {
  183. cpuInfo = mo.Properties["ProcessorId"].Value.ToString();
  184. }
  185. }
  186. }
  187. return cpuInfo;
  188. }
  189. catch
  190. {
  191. return "unknow ";
  192. }
  193. }
  194. /// <summary>
  195. /// 获取CPU个数
  196. /// </summary>
  197. /// <returns></returns>
  198. public static int GetCpuCount()
  199. {
  200. try
  201. {
  202. using (var mCpu = new ManagementClass("Win32_Processor"))
  203. {
  204. using (ManagementObjectCollection cpus = mCpu.GetInstances())
  205. {
  206. return cpus.Count;
  207. }
  208. }
  209. }
  210. catch
  211. {
  212. // ignored
  213. }
  214. return -1;
  215. }
  216. /// <summary>
  217. /// 获取CPU主频
  218. /// </summary>
  219. /// <returns></returns>
  220. public static string[] GetCpuMHZ()
  221. {
  222. using (var mc = new ManagementClass("Win32_Processor"))
  223. {
  224. using (ManagementObjectCollection cpus = mc.GetInstances())
  225. {
  226. var mhz = new string[cpus.Count];
  227. int c = 0;
  228. using (var mySearch = new ManagementObjectSearcher("select * from Win32_Processor"))
  229. {
  230. foreach (ManagementObject mo in mySearch.Get())
  231. {
  232. using (mo)
  233. {
  234. mhz[c] = mo.Properties["CurrentClockSpeed"].Value.ToString();
  235. c++;
  236. }
  237. }
  238. }
  239. return mhz;
  240. }
  241. }
  242. }
  243. /// <summary>
  244. /// 获取磁盘大小
  245. /// </summary>
  246. /// <returns></returns>
  247. public static string GetSizeOfDisk()
  248. {
  249. using (var mc = new ManagementClass("Win32_DiskDrive"))
  250. {
  251. foreach (ManagementObject m in mc.GetInstances())
  252. {
  253. using (m)
  254. {
  255. return m.Properties["Size"].Value.ToString();
  256. }
  257. }
  258. }
  259. return "-1";
  260. }
  261. string GetMacAddress()
  262. {
  263. try
  264. {
  265. //获取网卡硬件地址
  266. string mac = " ";
  267. using (var mc = new ManagementClass("Win32_NetworkAdapterConfiguration"))
  268. {
  269. foreach (ManagementObject mo in mc.GetInstances())
  270. {
  271. using (mo)
  272. {
  273. if ((bool)mo["IPEnabled"])
  274. {
  275. mac = mo["MacAddress"].ToString();
  276. break;
  277. }
  278. }
  279. }
  280. }
  281. return mac;
  282. }
  283. catch
  284. {
  285. return "unknow ";
  286. }
  287. }
  288. string GetIPAddress()
  289. {
  290. try
  291. {
  292. //获取IP地址
  293. string st = Empty;
  294. using (var mc = new ManagementClass("Win32_NetworkAdapterConfiguration"))
  295. {
  296. foreach (ManagementObject mo in mc.GetInstances())
  297. {
  298. using (mo)
  299. {
  300. if ((bool)mo["IPEnabled"])
  301. {
  302. //st=mo[ "IpAddress "].ToString();
  303. Array ar;
  304. ar = (Array)(mo.Properties["IpAddress"].Value);
  305. st = ar.GetValue(0).ToString();
  306. break;
  307. }
  308. }
  309. }
  310. }
  311. return st;
  312. }
  313. catch
  314. {
  315. return "unknow ";
  316. }
  317. }
  318. string GetDiskID()
  319. {
  320. try
  321. {
  322. //获取硬盘ID
  323. string hdid = Empty;
  324. using (var mc = new ManagementClass("Win32_DiskDrive"))
  325. {
  326. foreach (ManagementObject mo in mc.GetInstances())
  327. {
  328. using (mo)
  329. {
  330. hdid = (string)mo.Properties["Model"].Value;
  331. }
  332. }
  333. }
  334. return hdid;
  335. }
  336. catch
  337. {
  338. return "unknow ";
  339. }
  340. }
  341. /// <summary>
  342. /// 操作系统的登录用户名
  343. /// </summary>
  344. /// <returns> </returns>
  345. string GetUserName()
  346. {
  347. try
  348. {
  349. string st = Empty;
  350. using (var mc = new ManagementClass("Win32_ComputerSystem"))
  351. {
  352. foreach (ManagementObject mo in mc.GetInstances())
  353. {
  354. using (mo)
  355. {
  356. st = mo["UserName"].ToString();
  357. }
  358. }
  359. }
  360. return st;
  361. }
  362. catch
  363. {
  364. return "unknow ";
  365. }
  366. }
  367. string GetSystemType()
  368. {
  369. try
  370. {
  371. string st = Empty;
  372. using (var mc = new ManagementClass("Win32_ComputerSystem"))
  373. {
  374. foreach (var o in mc.GetInstances())
  375. {
  376. using (o)
  377. {
  378. var mo = (ManagementObject)o;
  379. st = mo["SystemType"].ToString();
  380. }
  381. }
  382. }
  383. return st;
  384. }
  385. catch
  386. {
  387. return "unknow ";
  388. }
  389. }
  390. string GetTotalPhysicalMemory()
  391. {
  392. try
  393. {
  394. string st = Empty;
  395. using (var mc = new ManagementClass("Win32_ComputerSystem"))
  396. {
  397. using (ManagementObjectCollection moc = mc.GetInstances())
  398. {
  399. foreach (var o in moc)
  400. {
  401. var mo = (ManagementObject)o;
  402. st = mo["TotalPhysicalMemory"].ToString();
  403. }
  404. }
  405. }
  406. return st;
  407. }
  408. catch
  409. {
  410. return "unknow ";
  411. }
  412. }
  413. string GetComputerName()
  414. {
  415. try
  416. {
  417. return Environment.GetEnvironmentVariable("ComputerName");
  418. }
  419. catch
  420. {
  421. return "unknow ";
  422. }
  423. }
  424. }
  425. }