// -------------------------------------------------------------------------------------------------------------------- // // This file is part of the HandBrake source code - It may be used under the terms of the GNU General Public License. // // // The System Information. // // -------------------------------------------------------------------------------------------------------------------- namespace HandBrake.ApplicationServices.Utilities { using System; using System.Collections.Generic; using System.Globalization; using System.Management; using System.Text.RegularExpressions; using System.Windows.Documents; using System.Windows.Forms; using HandBrake.Interop.HbLib; using Microsoft.Win32; /// /// The System Information. /// public class SystemInfo { /// /// Gets the total physical ram in a system /// /// The total memory in the system public static ulong TotalPhysicalMemory { get { Win32.MEMORYSTATUSEX memStat = new Win32.MEMORYSTATUSEX { dwLength = 64 }; Win32.GlobalMemoryStatusEx(ref memStat); ulong value = memStat.ullTotalPhys / 1024 / 1024; return value; } } /// /// Gets the number of CPU Cores /// /// Object public static object GetCpuCount { get { RegistryKey regKey = Registry.LocalMachine; regKey = regKey.OpenSubKey("HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0"); return regKey == null ? 0 : regKey.GetValue("ProcessorNameString"); } } /// /// Gets the System screen size information. /// /// System.Windows.Forms.Scree public static Screen ScreenBounds { get { return Screen.PrimaryScreen; } } /// /// Gets a value indicating whether is qsv available. /// public static bool IsQsvAvailable { get { try { if (!GeneralUtilities.IsLibHbPresent) { return false; // Feature is disabled. } return HBFunctions.hb_qsv_available() == 1; } catch (Exception) { // Silent failure. Typically this means the dll hasn't been built with --enable-qsv return false; } } } /// /// Gets a value indicating whether is hsw or newer. /// public static bool IsHswOrNewer { get { // TODO replace with a call to libhb string cpu = GetCpuCount.ToString(); if (cpu.Contains("Intel")) { Match match = Regex.Match(cpu, "([0-9]{4})"); if (match.Success) { string cpuId = match.Groups[0].ToString(); int cpuNumber; if (int.TryParse(cpuId, out cpuNumber)) { if (cpuNumber > 4000) { return true; } } } } return false; } } /// /// Gets the get gpu driver version. /// public static List GetGPUInfo { get { List gpuInfo = new List(); ManagementObjectSearcher searcher = new ManagementObjectSearcher( "select * from " + "Win32_VideoController"); foreach (ManagementObject share in searcher.Get()) { string gpu = string.Empty, version = string.Empty; foreach (PropertyData PC in share.Properties) { if (!string.IsNullOrEmpty(PC.Name) && PC.Value != null) { if (PC.Name.Equals("DriverVersion")) version = PC.Value.ToString(); if (PC.Name.Equals("Name")) gpu = PC.Value.ToString(); } } if (!string.IsNullOrEmpty(gpu) && !string.IsNullOrEmpty(version)) { gpuInfo.Add(string.Format("{0} - {1}", gpu, version)); } } return gpuInfo; } } } }