summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorsr55 <[email protected]>2016-04-19 21:52:27 +0100
committersr55 <[email protected]>2016-04-19 21:52:27 +0100
commit4284cf487665dd2013b8c95cf2195980ac8106df (patch)
tree9ed89bad39b89315a94adc7b09ad901d4af8f1ec
parent5e299e96599e191345f303623baa6ceda01c0916 (diff)
WinGui: Some initial work to make the HandBrake.ApplicationServices library more portable.
-rw-r--r--win/CS/HandBrake.ApplicationServices/HandBrake.ApplicationServices.csproj1
-rw-r--r--win/CS/HandBrake.ApplicationServices/Utilities/LanguageUtilities.cs27
-rw-r--r--win/CS/HandBrake.ApplicationServices/Utilities/SystemInfo.cs95
-rw-r--r--win/CS/HandBrake.sln16
-rw-r--r--win/CS/HandBrakeWPF/Converters/Video/VideoEncoderConverter.cs1
-rw-r--r--win/CS/HandBrakeWPF/HandBrakeWPF.csproj2
-rw-r--r--win/CS/HandBrakeWPF/Services/PrePostActionService.cs1
-rw-r--r--win/CS/HandBrakeWPF/Utilities/SystemInfo.cs114
-rw-r--r--win/CS/HandBrakeWPF/Utilities/Win32.cs (renamed from win/CS/HandBrake.ApplicationServices/Utilities/Win32.cs)398
-rw-r--r--win/CS/HandBrakeWPF/ViewModels/OptionsViewModel.cs1
10 files changed, 334 insertions, 322 deletions
diff --git a/win/CS/HandBrake.ApplicationServices/HandBrake.ApplicationServices.csproj b/win/CS/HandBrake.ApplicationServices/HandBrake.ApplicationServices.csproj
index 8d023b901..14ba10545 100644
--- a/win/CS/HandBrake.ApplicationServices/HandBrake.ApplicationServices.csproj
+++ b/win/CS/HandBrake.ApplicationServices/HandBrake.ApplicationServices.csproj
@@ -189,7 +189,6 @@
<Compile Include="Services\Logging\Model\LogMessageType.cs" />
<Compile Include="Utilities\SystemInfo.cs" />
<Compile Include="Utilities\VersionHelper.cs" />
- <Compile Include="Utilities\Win32.cs" />
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
diff --git a/win/CS/HandBrake.ApplicationServices/Utilities/LanguageUtilities.cs b/win/CS/HandBrake.ApplicationServices/Utilities/LanguageUtilities.cs
index 12665c062..49c1c488d 100644
--- a/win/CS/HandBrake.ApplicationServices/Utilities/LanguageUtilities.cs
+++ b/win/CS/HandBrake.ApplicationServices/Utilities/LanguageUtilities.cs
@@ -234,34 +234,9 @@ namespace HandBrake.ApplicationServices.Utilities
/// The user languages.
/// </param>
/// <returns>
- /// The <see cref="IList"/>.
- /// </returns>
- public static List<string> GetLanguageCodes(StringCollection userLanguages)
- {
- // Translate to Iso Codes
- List<string> iso6392Codes = new List<string>();
- foreach (var item in userLanguages)
- {
- string isoCode;
- if (LanguageUtilities.MapLanguages().TryGetValue(item, out isoCode))
- {
- iso6392Codes.Add(isoCode);
- }
- }
-
- return iso6392Codes;
- }
-
- /// <summary>
- /// The get language codes.
- /// </summary>
- /// <param name="userLanguages">
- /// The user languages.
- /// </param>
- /// <returns>
/// The <see cref="List"/>.
/// </returns>
- public static List<string> GetLanguageCodes(IList<string> userLanguages)
+ public static List<string> GetLanguageCodes(IEnumerable<string> userLanguages)
{
// Translate to Iso Codes
List<string> iso6392Codes = new List<string>();
diff --git a/win/CS/HandBrake.ApplicationServices/Utilities/SystemInfo.cs b/win/CS/HandBrake.ApplicationServices/Utilities/SystemInfo.cs
index ce5e5506f..8ccf04462 100644
--- a/win/CS/HandBrake.ApplicationServices/Utilities/SystemInfo.cs
+++ b/win/CS/HandBrake.ApplicationServices/Utilities/SystemInfo.cs
@@ -10,13 +10,8 @@
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;
+ using Interop.HbLib;
/// <summary>
/// The System Information.
@@ -24,45 +19,6 @@ namespace HandBrake.ApplicationServices.Utilities
public class SystemInfo
{
/// <summary>
- /// Gets the total physical ram in a system
- /// </summary>
- /// <returns>The total memory in the system</returns>
- 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;
- }
- }
-
- /// <summary>
- /// Gets the number of CPU Cores
- /// </summary>
- /// <returns>Object</returns>
- public static object GetCpuCount
- {
- get
- {
- RegistryKey regKey = Registry.LocalMachine;
- regKey = regKey.OpenSubKey("HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0");
- return regKey == null ? 0 : regKey.GetValue("ProcessorNameString");
- }
- }
-
- /// <summary>
- /// Gets the System screen size information.
- /// </summary>
- /// <returns>System.Windows.Forms.Scree</returns>
- public static Screen ScreenBounds
- {
- get { return Screen.PrimaryScreen; }
- }
-
- /// <summary>
/// Gets a value indicating whether is qsv available.
/// </summary>
public static bool IsQsvAvailable
@@ -118,54 +74,5 @@ namespace HandBrake.ApplicationServices.Utilities
}
}
}
-
- /// <summary>
- /// Gets the get gpu driver version.
- /// </summary>
- public static List<string> GetGPUInfo
- {
- get
- {
- List<string> gpuInfo = new List<string>();
-
- 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))
- {
- gpu = "Unknown GPU";
- }
-
- if (string.IsNullOrEmpty(version))
- {
- version = "Unknown Driver Version";
- }
-
- gpuInfo.Add(string.Format("{0} - {1}", gpu, version));
- }
- }
- catch (Exception)
- {
- // Do Nothing. We couldn't get GPU Information.
- }
-
- return gpuInfo;
- }
- }
}
}
diff --git a/win/CS/HandBrake.sln b/win/CS/HandBrake.sln
index 42054c746..7365a6202 100644
--- a/win/CS/HandBrake.sln
+++ b/win/CS/HandBrake.sln
@@ -1,7 +1,7 @@

Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio 2013
-VisualStudioVersion = 12.0.31101.0
+# Visual Studio 14
+VisualStudioVersion = 14.0.25123.0
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HandBrake.ApplicationServices", "HandBrake.ApplicationServices\HandBrake.ApplicationServices.csproj", "{087A2BA8-BAC2-4577-A46F-07FF9D420016}"
EndProject
@@ -14,24 +14,36 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Debug|ARM = Debug|ARM
Debug|x64 = Debug|x64
Debug|x86 = Debug|x86
+ Release|Any CPU = Release|Any CPU
+ Release|ARM = Release|ARM
Release|x64 = Release|x64
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {087A2BA8-BAC2-4577-A46F-07FF9D420016}.Debug|Any CPU.ActiveCfg = Debug|x86
+ {087A2BA8-BAC2-4577-A46F-07FF9D420016}.Debug|ARM.ActiveCfg = Debug|x86
{087A2BA8-BAC2-4577-A46F-07FF9D420016}.Debug|x64.ActiveCfg = Debug|x64
{087A2BA8-BAC2-4577-A46F-07FF9D420016}.Debug|x64.Build.0 = Debug|x64
{087A2BA8-BAC2-4577-A46F-07FF9D420016}.Debug|x86.ActiveCfg = Debug|x86
{087A2BA8-BAC2-4577-A46F-07FF9D420016}.Debug|x86.Build.0 = Debug|x86
+ {087A2BA8-BAC2-4577-A46F-07FF9D420016}.Release|Any CPU.ActiveCfg = Release|x86
+ {087A2BA8-BAC2-4577-A46F-07FF9D420016}.Release|ARM.ActiveCfg = Release|x86
{087A2BA8-BAC2-4577-A46F-07FF9D420016}.Release|x64.ActiveCfg = Release|x64
{087A2BA8-BAC2-4577-A46F-07FF9D420016}.Release|x64.Build.0 = Release|x64
{087A2BA8-BAC2-4577-A46F-07FF9D420016}.Release|x86.ActiveCfg = Release|x86
{087A2BA8-BAC2-4577-A46F-07FF9D420016}.Release|x86.Build.0 = Release|x86
+ {DADE66CB-0E12-4959-ADE5-0ACD31D27C59}.Debug|Any CPU.ActiveCfg = Debug|x86
+ {DADE66CB-0E12-4959-ADE5-0ACD31D27C59}.Debug|ARM.ActiveCfg = Debug|x86
{DADE66CB-0E12-4959-ADE5-0ACD31D27C59}.Debug|x64.ActiveCfg = Debug|x64
{DADE66CB-0E12-4959-ADE5-0ACD31D27C59}.Debug|x64.Build.0 = Debug|x64
{DADE66CB-0E12-4959-ADE5-0ACD31D27C59}.Debug|x86.ActiveCfg = Debug|x86
{DADE66CB-0E12-4959-ADE5-0ACD31D27C59}.Debug|x86.Build.0 = Debug|x86
+ {DADE66CB-0E12-4959-ADE5-0ACD31D27C59}.Release|Any CPU.ActiveCfg = Release|x86
+ {DADE66CB-0E12-4959-ADE5-0ACD31D27C59}.Release|ARM.ActiveCfg = Release|x86
{DADE66CB-0E12-4959-ADE5-0ACD31D27C59}.Release|x64.ActiveCfg = Release|x64
{DADE66CB-0E12-4959-ADE5-0ACD31D27C59}.Release|x64.Build.0 = Release|x64
{DADE66CB-0E12-4959-ADE5-0ACD31D27C59}.Release|x86.ActiveCfg = Release|x86
diff --git a/win/CS/HandBrakeWPF/Converters/Video/VideoEncoderConverter.cs b/win/CS/HandBrakeWPF/Converters/Video/VideoEncoderConverter.cs
index 489b787b1..b89125674 100644
--- a/win/CS/HandBrakeWPF/Converters/Video/VideoEncoderConverter.cs
+++ b/win/CS/HandBrakeWPF/Converters/Video/VideoEncoderConverter.cs
@@ -23,6 +23,7 @@ namespace HandBrakeWPF.Converters.Video
using EncodeTask = HandBrakeWPF.Services.Encode.Model.EncodeTask;
using OutputFormat = HandBrakeWPF.Services.Encode.Model.Models.OutputFormat;
+ using SystemInfo = HandBrake.ApplicationServices.Utilities.SystemInfo;
/// <summary>
/// Video Encoder Converter
diff --git a/win/CS/HandBrakeWPF/HandBrakeWPF.csproj b/win/CS/HandBrakeWPF/HandBrakeWPF.csproj
index 5869f24bb..358c1109c 100644
--- a/win/CS/HandBrakeWPF/HandBrakeWPF.csproj
+++ b/win/CS/HandBrakeWPF/HandBrakeWPF.csproj
@@ -253,6 +253,8 @@
<Compile Include="Utilities\Output\CsvHelper.cs" />
<Compile Include="Utilities\PropertyChangedBase.cs" />
<Compile Include="Utilities\DirectoryUtilities.cs" />
+ <Compile Include="Utilities\SystemInfo.cs" />
+ <Compile Include="Utilities\Win32.cs" />
<Compile Include="Utilities\Win7.cs" />
<Compile Include="ViewModels\AudioDefaultsViewModel.cs" />
<Compile Include="ViewModels\CountdownAlertViewModel.cs" />
diff --git a/win/CS/HandBrakeWPF/Services/PrePostActionService.cs b/win/CS/HandBrakeWPF/Services/PrePostActionService.cs
index 1d54d1e6f..4e3f4f30f 100644
--- a/win/CS/HandBrakeWPF/Services/PrePostActionService.cs
+++ b/win/CS/HandBrakeWPF/Services/PrePostActionService.cs
@@ -20,6 +20,7 @@ namespace HandBrakeWPF.Services
using HandBrakeWPF.EventArgs;
using HandBrakeWPF.Services.Interfaces;
using HandBrakeWPF.Services.Queue.Interfaces;
+ using HandBrakeWPF.Utilities;
using HandBrakeWPF.ViewModels.Interfaces;
using EncodeCompletedEventArgs = HandBrakeWPF.Services.Encode.EventArgs.EncodeCompletedEventArgs;
diff --git a/win/CS/HandBrakeWPF/Utilities/SystemInfo.cs b/win/CS/HandBrakeWPF/Utilities/SystemInfo.cs
new file mode 100644
index 000000000..9ed362e32
--- /dev/null
+++ b/win/CS/HandBrakeWPF/Utilities/SystemInfo.cs
@@ -0,0 +1,114 @@
+// --------------------------------------------------------------------------------------------------------------------
+// <copyright file="SystemInfo.cs" company="HandBrake Project (http://handbrake.fr)">
+// This file is part of the HandBrake source code - It may be used under the terms of the GNU General Public License.
+// </copyright>
+// <summary>
+// The System Information.
+// </summary>
+// --------------------------------------------------------------------------------------------------------------------
+
+namespace HandBrakeWPF.Utilities
+{
+ using System;
+ using System.Collections.Generic;
+ using System.Management;
+ using System.Windows.Forms;
+
+ using HandBrake.ApplicationServices.Interop.HbLib;
+
+ using Microsoft.Win32;
+
+ /// <summary>
+ /// The System Information.
+ /// </summary>
+ public class SystemInfo
+ {
+ /// <summary>
+ /// Gets the total physical ram in a system
+ /// </summary>
+ /// <returns>The total memory in the system</returns>
+ 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;
+ }
+ }
+
+ /// <summary>
+ /// Gets the number of CPU Cores
+ /// </summary>
+ /// <returns>Object</returns>
+ public static object GetCpuCount
+ {
+ get
+ {
+ RegistryKey regKey = Registry.LocalMachine;
+ regKey = regKey.OpenSubKey("HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0");
+ return regKey == null ? 0 : regKey.GetValue("ProcessorNameString");
+ }
+ }
+
+ /// <summary>
+ /// Gets the System screen size information.
+ /// </summary>
+ /// <returns>System.Windows.Forms.Scree</returns>
+ public static Screen ScreenBounds
+ {
+ get { return Screen.PrimaryScreen; }
+ }
+
+ /// <summary>
+ /// Gets the get gpu driver version.
+ /// </summary>
+ public static List<string> GetGPUInfo
+ {
+ get
+ {
+ List<string> gpuInfo = new List<string>();
+
+ 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))
+ {
+ gpu = "Unknown GPU";
+ }
+
+ if (string.IsNullOrEmpty(version))
+ {
+ version = "Unknown Driver Version";
+ }
+
+ gpuInfo.Add(string.Format("{0} - {1}", gpu, version));
+ }
+ }
+ catch (Exception)
+ {
+ // Do Nothing. We couldn't get GPU Information.
+ }
+
+ return gpuInfo;
+ }
+ }
+ }
+}
diff --git a/win/CS/HandBrake.ApplicationServices/Utilities/Win32.cs b/win/CS/HandBrakeWPF/Utilities/Win32.cs
index 8a870adfb..a65a5e09d 100644
--- a/win/CS/HandBrake.ApplicationServices/Utilities/Win32.cs
+++ b/win/CS/HandBrakeWPF/Utilities/Win32.cs
@@ -1,199 +1,199 @@
-// --------------------------------------------------------------------------------------------------------------------
-// <copyright file="Win32.cs" company="HandBrake Project (http://handbrake.fr)">
-// This file is part of the HandBrake source code - It may be used under the terms of the GNU General Public License.
-// </copyright>
-// <summary>
-// Win32 API calls
-// </summary>
-// <auto-generated>Disable Stylecop for this file </auto-generated>
-// --------------------------------------------------------------------------------------------------------------------
-
-namespace HandBrake.ApplicationServices.Utilities
-{
- using System;
- using System.Runtime.InteropServices;
- using System.Windows.Threading;
-
- /// <summary>
- /// Win32 API calls
- /// </summary>
- public class Win32
- {
- /// <summary>
- /// Used to force UI Thread.
- /// </summary>
- private static Action<Action> executor = action => action();
-
- /// <summary>
- /// Set the Forground Window
- /// </summary>
- /// <param name="hWnd">
- /// The h wnd.
- /// </param>
- /// <returns>
- /// A Boolean true when complete.
- /// </returns>
- [DllImport("user32.dll")]
- public static extern bool SetForegroundWindow(int hWnd);
-
- /// <summary>
- /// Lock the workstation
- /// </summary>
- [DllImport("user32.dll")]
- public static extern void LockWorkStation();
-
- /// <summary>
- /// Exit Windows
- /// </summary>
- /// <param name="uFlags">
- /// The u flags.
- /// </param>
- /// <param name="dwReason">
- /// The dw reason.
- /// </param>
- /// <returns>
- /// an integer
- /// </returns>
- [DllImport("user32.dll")]
- public static extern int ExitWindowsEx(int uFlags, int dwReason);
-
- /// <summary>
- /// Memory Status EX Struct
- /// </summary>
- public struct MEMORYSTATUSEX
- {
- public int dwLength;
-
- public int dwMemoryLoad;
-
- public ulong ullTotalPhys;
-
- public ulong ullAvailPhys;
-
- public ulong ullTotalPageFile;
-
- public ulong ullAvailPageFile;
-
- public ulong ullTotalVirtual;
-
- public ulong ullAvailVirtual;
-
- public ulong ullAvailExtendedVirtual;
- }
-
- /// <summary>
- /// Get the System Memory information
- /// </summary>
- /// <param name="lpBuffer">
- /// The lp buffer.
- /// </param>
- /// <returns>
- /// A boolean.
- /// </returns>
- [DllImport("kernel32.dll", SetLastError = true)]
- public static extern bool GlobalMemoryStatusEx(ref MEMORYSTATUSEX lpBuffer);
-
- /// <summary>
- /// Generate a Console Ctrl Event
- /// </summary>
- /// <param name="sigevent">
- /// The sigevent.
- /// </param>
- /// <param name="dwProcessGroupId">
- /// The dw process group id.
- /// </param>
- /// <returns>
- /// Bool true is sucess
- /// </returns>
- [DllImport("kernel32.dll", SetLastError = true)]
- public static extern bool GenerateConsoleCtrlEvent(ConsoleCtrlEvent sigevent, int dwProcessGroupId);
-
- /// <summary>
- /// Console Ctrl Event
- /// </summary>
- public enum ConsoleCtrlEvent
- {
- /// <summary>
- /// Ctrl - C
- /// </summary>
- CTRL_C = 0,
-
- /// <summary>
- /// Ctrl - Break
- /// </summary>
- CTRL_BREAK = 1,
-
- /// <summary>
- /// Ctrl - Close
- /// </summary>
- CTRL_CLOSE = 2,
- }
-
- [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
- private static extern EXECUTION_STATE SetThreadExecutionState(EXECUTION_STATE esFlags);
-
- /// <summary>
- /// Execution State
- /// </summary>
- [Flags]
- public enum EXECUTION_STATE : uint
- {
- ES_SYSTEM_REQUIRED = 0x00000001,
-
- ES_CONTINUOUS = 0x80000000,
-
- ES_AWAYMODE_REQUIRED = 0x00000040
- }
-
- /// <summary>
- /// Initializes static members of the <see cref="Win32"/> class.
- /// </summary>
- static Win32()
- {
- InitializeWithDispatcher();
- }
-
- /// <summary>
- /// Prevent the system from sleeping
- /// </summary>
- public static void PreventSleep()
- {
- executor(
- () => SetThreadExecutionState(
- EXECUTION_STATE.ES_CONTINUOUS | EXECUTION_STATE.ES_SYSTEM_REQUIRED
- | EXECUTION_STATE.ES_AWAYMODE_REQUIRED));
- }
-
- /// <summary>
- /// Allow the system to sleep.
- /// </summary>
- public static void AllowSleep()
- {
- executor(() => SetThreadExecutionState(EXECUTION_STATE.ES_CONTINUOUS));
- }
-
- /// <summary>
- /// Initializes the framework using the current dispatcher.
- /// </summary>
- public static void InitializeWithDispatcher()
- {
- var dispatcher = Dispatcher.CurrentDispatcher;
-
- SetUIThreadMarshaller(action =>
- {
- if (dispatcher.CheckAccess())
- action();
- else dispatcher.Invoke(action);
- });
- }
-
- /// <summary>
- /// Sets a custom UI thread marshaller.
- /// </summary>
- /// <param name="marshaller">The marshaller.</param>
- public static void SetUIThreadMarshaller(Action<Action> marshaller)
- {
- executor = marshaller;
- }
- }
-}
+// --------------------------------------------------------------------------------------------------------------------
+// <copyright file="Win32.cs" company="HandBrake Project (http://handbrake.fr)">
+// This file is part of the HandBrake source code - It may be used under the terms of the GNU General Public License.
+// </copyright>
+// <summary>
+// Win32 API calls
+// </summary>
+// <auto-generated>Disable Stylecop for this file </auto-generated>
+// --------------------------------------------------------------------------------------------------------------------
+
+namespace HandBrakeWPF.Utilities
+{
+ using System;
+ using System.Runtime.InteropServices;
+ using System.Windows.Threading;
+
+ /// <summary>
+ /// Win32 API calls
+ /// </summary>
+ public class Win32
+ {
+ /// <summary>
+ /// Used to force UI Thread.
+ /// </summary>
+ private static Action<Action> executor = action => action();
+
+ /// <summary>
+ /// Set the Forground Window
+ /// </summary>
+ /// <param name="hWnd">
+ /// The h wnd.
+ /// </param>
+ /// <returns>
+ /// A Boolean true when complete.
+ /// </returns>
+ [DllImport("user32.dll")]
+ public static extern bool SetForegroundWindow(int hWnd);
+
+ /// <summary>
+ /// Lock the workstation
+ /// </summary>
+ [DllImport("user32.dll")]
+ public static extern void LockWorkStation();
+
+ /// <summary>
+ /// Exit Windows
+ /// </summary>
+ /// <param name="uFlags">
+ /// The u flags.
+ /// </param>
+ /// <param name="dwReason">
+ /// The dw reason.
+ /// </param>
+ /// <returns>
+ /// an integer
+ /// </returns>
+ [DllImport("user32.dll")]
+ public static extern int ExitWindowsEx(int uFlags, int dwReason);
+
+ /// <summary>
+ /// Memory Status EX Struct
+ /// </summary>
+ public struct MEMORYSTATUSEX
+ {
+ public int dwLength;
+
+ public int dwMemoryLoad;
+
+ public ulong ullTotalPhys;
+
+ public ulong ullAvailPhys;
+
+ public ulong ullTotalPageFile;
+
+ public ulong ullAvailPageFile;
+
+ public ulong ullTotalVirtual;
+
+ public ulong ullAvailVirtual;
+
+ public ulong ullAvailExtendedVirtual;
+ }
+
+ /// <summary>
+ /// Get the System Memory information
+ /// </summary>
+ /// <param name="lpBuffer">
+ /// The lp buffer.
+ /// </param>
+ /// <returns>
+ /// A boolean.
+ /// </returns>
+ [DllImport("kernel32.dll", SetLastError = true)]
+ public static extern bool GlobalMemoryStatusEx(ref MEMORYSTATUSEX lpBuffer);
+
+ /// <summary>
+ /// Generate a Console Ctrl Event
+ /// </summary>
+ /// <param name="sigevent">
+ /// The sigevent.
+ /// </param>
+ /// <param name="dwProcessGroupId">
+ /// The dw process group id.
+ /// </param>
+ /// <returns>
+ /// Bool true is sucess
+ /// </returns>
+ [DllImport("kernel32.dll", SetLastError = true)]
+ public static extern bool GenerateConsoleCtrlEvent(ConsoleCtrlEvent sigevent, int dwProcessGroupId);
+
+ /// <summary>
+ /// Console Ctrl Event
+ /// </summary>
+ public enum ConsoleCtrlEvent
+ {
+ /// <summary>
+ /// Ctrl - C
+ /// </summary>
+ CTRL_C = 0,
+
+ /// <summary>
+ /// Ctrl - Break
+ /// </summary>
+ CTRL_BREAK = 1,
+
+ /// <summary>
+ /// Ctrl - Close
+ /// </summary>
+ CTRL_CLOSE = 2,
+ }
+
+ [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
+ private static extern EXECUTION_STATE SetThreadExecutionState(EXECUTION_STATE esFlags);
+
+ /// <summary>
+ /// Execution State
+ /// </summary>
+ [Flags]
+ public enum EXECUTION_STATE : uint
+ {
+ ES_SYSTEM_REQUIRED = 0x00000001,
+
+ ES_CONTINUOUS = 0x80000000,
+
+ ES_AWAYMODE_REQUIRED = 0x00000040
+ }
+
+ /// <summary>
+ /// Initializes static members of the <see cref="Win32"/> class.
+ /// </summary>
+ static Win32()
+ {
+ InitializeWithDispatcher();
+ }
+
+ /// <summary>
+ /// Prevent the system from sleeping
+ /// </summary>
+ public static void PreventSleep()
+ {
+ executor(
+ () => SetThreadExecutionState(
+ EXECUTION_STATE.ES_CONTINUOUS | EXECUTION_STATE.ES_SYSTEM_REQUIRED
+ | EXECUTION_STATE.ES_AWAYMODE_REQUIRED));
+ }
+
+ /// <summary>
+ /// Allow the system to sleep.
+ /// </summary>
+ public static void AllowSleep()
+ {
+ executor(() => SetThreadExecutionState(EXECUTION_STATE.ES_CONTINUOUS));
+ }
+
+ /// <summary>
+ /// Initializes the framework using the current dispatcher.
+ /// </summary>
+ public static void InitializeWithDispatcher()
+ {
+ var dispatcher = Dispatcher.CurrentDispatcher;
+
+ SetUIThreadMarshaller(action =>
+ {
+ if (dispatcher.CheckAccess())
+ action();
+ else dispatcher.Invoke(action);
+ });
+ }
+
+ /// <summary>
+ /// Sets a custom UI thread marshaller.
+ /// </summary>
+ /// <param name="marshaller">The marshaller.</param>
+ public static void SetUIThreadMarshaller(Action<Action> marshaller)
+ {
+ executor = marshaller;
+ }
+ }
+}
diff --git a/win/CS/HandBrakeWPF/ViewModels/OptionsViewModel.cs b/win/CS/HandBrakeWPF/ViewModels/OptionsViewModel.cs
index c28eea1f8..a60be1aef 100644
--- a/win/CS/HandBrakeWPF/ViewModels/OptionsViewModel.cs
+++ b/win/CS/HandBrakeWPF/ViewModels/OptionsViewModel.cs
@@ -31,6 +31,7 @@ namespace HandBrakeWPF.ViewModels
using Ookii.Dialogs.Wpf;
using Execute = Caliburn.Micro.Execute;
+ using SystemInfo = HandBrake.ApplicationServices.Utilities.SystemInfo;
/// <summary>
/// The Options View Model