// -------------------------------------------------------------------------------------------------------------------- // // 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.Management; using System.Windows.Forms; using HandBrake.ApplicationServices.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 { return HBFunctions.hb_qsv_available() != 0; } catch (Exception) { // Silent failure. Typically this means the dll hasn't been built with --enable-qsv return false; } } } /// /// Gets a value indicating whether is qsv available. /// public static bool IsQsvAvailableH264 { get { try { return (HBFunctions.hb_qsv_available() & NativeConstants.HB_VCODEC_QSV_H264) != 0; } catch (Exception) { // Silent failure. Typically this means the dll hasn't been built with --enable-qsv return false; } } } /// /// Gets a value indicating whether is qsv available. /// public static bool IsQsvAvailableH265 { get { try { return (HBFunctions.hb_qsv_available() & NativeConstants.HB_VCODEC_QSV_H265) != 0; } catch (Exception) { // Silent failure. Typically this means the dll hasn't been built with --enable-qsv return false; } } } /// /// Gets the get gpu driver version. /// public static List GetGPUInfo { get { List gpuInfo = new List(); try { 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)); } } } catch (Exception) { // Do Nothing. We couldn't get GPU Information. } return gpuInfo; } } } }