diff --git a/DS4Windows/Program.cs b/DS4Windows/Program.cs index 33e2dc9..9c1fb62 100644 --- a/DS4Windows/Program.cs +++ b/DS4Windows/Program.cs @@ -5,16 +5,13 @@ using System.Runtime.InteropServices; using System.Diagnostics; using System.ComponentModel; using System.Globalization; +using System.Runtime; using Microsoft.Win32.TaskScheduler; namespace DS4Windows { static class Program { - [DllImport("user32.dll")] - [return: MarshalAs(UnmanagedType.Bool)] - static extern bool SetForegroundWindow(IntPtr hWnd); - // Add "global\" in front of the EventName, then only one instance is allowed on the // whole system, including other users. But the application can not be brought // into view, of course. @@ -24,6 +21,7 @@ namespace DS4Windows public static ControlService rootHub; private static Thread testThread; private static Thread controlThread; + private static DS4Form ds4form; /// /// The main entry point for the application. @@ -71,7 +69,7 @@ namespace DS4Windows } } - System.Runtime.GCSettings.LatencyMode = System.Runtime.GCLatencyMode.LowLatency; + GCSettings.LatencyMode = GCLatencyMode.LowLatency; try { @@ -107,7 +105,8 @@ namespace DS4Windows rootHub.CreateHidGuardKey(); //rootHub = new ControlService(); Application.EnableVisualStyles(); - Application.Run(new DS4Form(args)); + ds4form = new DS4Form(args); + Application.Run(ds4form); rootHub.removeHidGuardKey(); //mutex.ReleaseMutex(); //} @@ -131,30 +130,26 @@ namespace DS4Windows private static void CreateTempWorkerThread() { - testThread = new Thread(singleAppComThread_DoWork); + testThread = new Thread(SingleAppComThread_DoWork); testThread.Priority = ThreadPriority.Lowest; testThread.IsBackground = true; testThread.Start(); } - private static void singleAppComThread_DoWork() + private static void SingleAppComThread_DoWork() { - //WaitHandle[] waitHandles = new WaitHandle[] { threadComEvent }; - while (!exitComThread) { - // check every second for a signal. - //if (WaitHandle.WaitAny(waitHandles) == 0) + // check for a signal. if (threadComEvent.WaitOne()) { threadComEvent.Reset(); // The user tried to start another instance. We can't allow that, // so bring the other instance back into view and enable that one. // That form is created in another thread, so we need some thread sync magic. - if (!exitComThread && Application.OpenForms.Count > 0) + if (!exitComThread) { - Form mainForm = Application.OpenForms[0]; - mainForm?.Invoke(new SetFormVisableDelegate(ThreadFormVisable), mainForm); + ds4form?.Invoke(new SetFormVisableDelegate(ThreadFormVisable), ds4form); } } } @@ -168,24 +163,13 @@ namespace DS4Windows private delegate void SetFormVisableDelegate(Form frm); static private void ThreadFormVisable(Form frm) { - if (frm != null) + if (frm is DS4Form) { - if (frm is DS4Form) - { - // display the form and bring to foreground. - frm.WindowState = FormWindowState.Normal; - frm.Focus(); - } - else - { - WinProgs wp = (WinProgs)frm; - wp.form.mAllowVisible = true; - wp.ShowMainWindow(); - SetForegroundWindow(wp.form.Handle); - } + // display the form and bring to foreground. + frm.WindowState = FormWindowState.Normal; + frm.Focus(); + frm.Activate(); } - - SetForegroundWindow(frm.Handle); } } } \ No newline at end of file