From e94e2ed8e29ce64c193479cda2df6fccec068b54 Mon Sep 17 00:00:00 2001 From: oskar3123 Date: Wed, 21 Aug 2019 07:33:35 +0200 Subject: [PATCH] Add AutoLobby tab --- GTAOnlineCasinoHelper/App.xaml | 1 + GTAOnlineCasinoHelper/Assets/GTA5.ico | Bin 0 -> 16958 bytes GTAOnlineCasinoHelper/Assets/GTA5.png | Bin 0 -> 4842 bytes .../Extensions/ImageExtension.cs | 39 +++ .../GTAOnlineCasinoHelper.csproj | 17 +- GTAOnlineCasinoHelper/MainWindow.xaml | 7 + GTAOnlineCasinoHelper/MainWindow.xaml.cs | 6 +- .../Properties/AssemblyInfo.cs | 4 +- .../Properties/Resources.Designer.cs | 10 + .../Properties/Resources.resx | 76 ++++++ GTAOnlineCasinoHelper/Views/AutoLobby.xaml | 87 ++++++ GTAOnlineCasinoHelper/Views/AutoLobby.xaml.cs | 249 ++++++++++++++++++ GTAOnlineCasinoHelper/Views/LuckyWheel.xaml | 30 +-- .../Views/LuckyWheel.xaml.cs | 2 +- .../Views/Settings/ThemeView.xaml | 2 +- GTAOnlineCasinoHelper/Views/TestTwo.xaml | 40 --- GTAOnlineCasinoHelper/Views/TestTwo.xaml.cs | 28 -- 17 files changed, 503 insertions(+), 95 deletions(-) create mode 100644 GTAOnlineCasinoHelper/Assets/GTA5.ico create mode 100644 GTAOnlineCasinoHelper/Assets/GTA5.png create mode 100644 GTAOnlineCasinoHelper/Extensions/ImageExtension.cs create mode 100644 GTAOnlineCasinoHelper/Views/AutoLobby.xaml create mode 100644 GTAOnlineCasinoHelper/Views/AutoLobby.xaml.cs delete mode 100644 GTAOnlineCasinoHelper/Views/TestTwo.xaml delete mode 100644 GTAOnlineCasinoHelper/Views/TestTwo.xaml.cs diff --git a/GTAOnlineCasinoHelper/App.xaml b/GTAOnlineCasinoHelper/App.xaml index 6eac5f5..f62b993 100644 --- a/GTAOnlineCasinoHelper/App.xaml +++ b/GTAOnlineCasinoHelper/App.xaml @@ -2,6 +2,7 @@ xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:GTAOnlineCasinoHelper" + xmlns:system="clr-namespace:System;assembly=mscorlib" StartupUri="MainWindow.xaml"> diff --git a/GTAOnlineCasinoHelper/Assets/GTA5.ico b/GTAOnlineCasinoHelper/Assets/GTA5.ico new file mode 100644 index 0000000000000000000000000000000000000000..7dccb717ad5d692109f43485054b58468af5dd0c GIT binary patch literal 16958 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 bjSR;%4Wptu`xf6nEO8F~di+8FAF2Ew_vYM{ literal 0 HcmV?d00001 diff --git a/GTAOnlineCasinoHelper/Assets/GTA5.png b/GTAOnlineCasinoHelper/Assets/GTA5.png new file mode 100644 index 0000000000000000000000000000000000000000..fa36d49cd3887f3e69bfd02aea9634eba91727a0 GIT binary patch literal 4842 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 literal 0 HcmV?d00001 diff --git a/GTAOnlineCasinoHelper/Extensions/ImageExtension.cs b/GTAOnlineCasinoHelper/Extensions/ImageExtension.cs new file mode 100644 index 0000000..7f15644 --- /dev/null +++ b/GTAOnlineCasinoHelper/Extensions/ImageExtension.cs @@ -0,0 +1,39 @@ +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Linq; +using System.Runtime.InteropServices; +using System.Text; +using System.Threading.Tasks; +using System.Windows; +using System.Windows.Media.Imaging; + +namespace GTAOnlineCasinoHelper.Extensions +{ + public static class ImageExtension + { + + [DllImport("gdi32.dll")] + [return: MarshalAs(UnmanagedType.Bool)] + internal static extern bool DeleteObject(IntPtr value); + + public static BitmapSource GetBitmapSource(this Image image) + { + Bitmap bitmap = new Bitmap(image); + IntPtr bmpPt = bitmap.GetHbitmap(); + BitmapSource bitmapSource = + System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap( + bmpPt, + IntPtr.Zero, + Int32Rect.Empty, + BitmapSizeOptions.FromEmptyOptions()); + + //freeze bitmapSource and clear memory to avoid memory leaks + bitmapSource.Freeze(); + DeleteObject(bmpPt); + + return bitmapSource; + } + + } +} diff --git a/GTAOnlineCasinoHelper/GTAOnlineCasinoHelper.csproj b/GTAOnlineCasinoHelper/GTAOnlineCasinoHelper.csproj index 5463fb7..ebe88a2 100644 --- a/GTAOnlineCasinoHelper/GTAOnlineCasinoHelper.csproj +++ b/GTAOnlineCasinoHelper/GTAOnlineCasinoHelper.csproj @@ -37,6 +37,9 @@ prompt 4 + + Assets\GTA5.ico + ..\packages\ControlzEx.4.0.1\lib\net45\ControlzEx.dll @@ -60,6 +63,7 @@ + @@ -78,11 +82,12 @@ MSBuild:Compile Designer + ThemeView.xaml - - TestTwo.xaml + + AutoLobby.xaml LuckyWheel.xaml @@ -105,7 +110,7 @@ MSBuild:UpdateDesignTimeXaml - + MSBuild:UpdateDesignTimeXaml Designer @@ -144,6 +149,12 @@ + + + + + + diff --git a/GTAOnlineCasinoHelper/MainWindow.xaml b/GTAOnlineCasinoHelper/MainWindow.xaml index a16bddc..6a5e291 100644 --- a/GTAOnlineCasinoHelper/MainWindow.xaml +++ b/GTAOnlineCasinoHelper/MainWindow.xaml @@ -37,6 +37,13 @@ + + + + + \ No newline at end of file diff --git a/GTAOnlineCasinoHelper/Views/AutoLobby.xaml.cs b/GTAOnlineCasinoHelper/Views/AutoLobby.xaml.cs new file mode 100644 index 0000000..fdf77b9 --- /dev/null +++ b/GTAOnlineCasinoHelper/Views/AutoLobby.xaml.cs @@ -0,0 +1,249 @@ +using MahApps.Metro.Controls; +using MahApps.Metro.Controls.Dialogs; +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using System.Runtime.InteropServices; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using System.Windows; +using System.Windows.Controls; + +namespace GTAOnlineCasinoHelper.Views +{ + + public partial class AutoLobby : UserControl + { + + [Flags] + public enum ThreadAccess : int + { + TERMINATE = (0x0001), + SUSPEND_RESUME = (0x0002), + GET_CONTEXT = (0x0008), + SET_CONTEXT = (0x0010), + SET_INFORMATION = (0x0020), + QUERY_INFORMATION = (0x0040), + SET_THREAD_TOKEN = (0x0080), + IMPERSONATE = (0x0100), + DIRECT_IMPERSONATION = (0x0200) + } + + [DllImport("kernel32.dll")] + static extern IntPtr OpenThread(ThreadAccess dwDesiredAccess, bool bInheritHandle, uint dwThreadId); + [DllImport("kernel32.dll")] + static extern uint SuspendThread(IntPtr hThread); + [DllImport("kernel32.dll")] + static extern int ResumeThread(IntPtr hThread); + [DllImport("kernel32", CharSet = CharSet.Auto, SetLastError = true)] + static extern bool CloseHandle(IntPtr handle); + + private const int SECONDS = 8; + private const int TIMER_INTERVAL = 50; + private const string PROCESS_NAME = "GTA5"; + + private int Seconds + { + get + { + if (CheckBox_OverrideTimeout.IsChecked.HasValue && CheckBox_OverrideTimeout.IsChecked.Value && int.TryParse(TextBox_TimeoutSeconds.Text, out int seconds)) + { + return seconds; + } + else + { + return SECONDS; + } + } + } + private string ProcessName + { + get + { + return (CheckBox_OverrideProcessName.IsChecked.HasValue && CheckBox_OverrideProcessName.IsChecked.Value) ? TextBox_ProcessName.Text : PROCESS_NAME; + } + } + private bool IsSuspended + { + get + { + return suspendedProcesses != null && suspendedProcesses.Length > 0; + } + } + private Process[] suspendedProcesses = new Process[0]; + private Timer timer; + private DateTimeOffset timestamp = DateTimeOffset.MinValue; + + public AutoLobby() + { + this.InitializeComponent(); + this.TextBox_ProcessName.Text = PROCESS_NAME; + this.TextBox_TimeoutSeconds.Text = SECONDS.ToString(); + this.timer = new Timer(Timer_Tick, this, Timeout.Infinite, TIMER_INTERVAL); + } + + private double GetMilliseconds() + { + return DateTime.Now.ToUniversalTime().Subtract( + new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc) + ).TotalMilliseconds; + } + + private void Timer_Tick(object state) + { + Dispatcher.Invoke(() => + { + if (!IsSuspended) + { + TextBlock_Status.Text = ""; + this.timer.Change(Timeout.Infinite, 50); + } + TimeSpan timeSpan = timestamp - DateTimeOffset.Now; + if (timeSpan.TotalMilliseconds < 0) + { + ResumeGTA(); + TextBlock_Status.Text = ""; + return; + } + TextBlock_Status.Text = $"{timeSpan.TotalSeconds.ToString("F3")}s"; + }); + } + + private void CheckBox_OverrideProcessName_Checked(object sender, RoutedEventArgs e) + { + TextBox_ProcessName.Visibility = Visibility.Visible; + } + + private void CheckBox_OverrideProcessName_Unchecked(object sender, RoutedEventArgs e) + { + TextBox_ProcessName.Visibility = Visibility.Collapsed; + } + + private void CheckBox_OverrideTimeout_Checked(object sender, RoutedEventArgs e) + { + TextBox_TimeoutSeconds.Visibility = Visibility.Visible; + } + + private void CheckBox_OverrideTimeout_Unchecked(object sender, RoutedEventArgs e) + { + TextBox_TimeoutSeconds.Visibility = Visibility.Collapsed; + } + + private async void Button_AutoLobby_Click(object sender, RoutedEventArgs e) + { + if (IsSuspended) + { + await MainWindow.Instance.ShowMessageAsync("GTA V is already suspended", $"GTA V ({ProcessName}.exe) is already suspended"); + return; + } + if (!SuspendGTA()) + { + await MainWindow.Instance.ShowMessageAsync("GTA V is not running", $"GTA V ({ProcessName}.exe) is not running"); + return; + } + timestamp = DateTimeOffset.Now + new TimeSpan(0, 0, Seconds); + TextBlock_Status.Text = $"{Seconds}.000s"; + timer.Change(TIMER_INTERVAL, TIMER_INTERVAL); + } + + private async void Button_Suspend_Click(object sender, RoutedEventArgs e) + { + if (IsSuspended) + { + await MainWindow.Instance.ShowMessageAsync("GTA V is already suspended", $"GTA V ({ProcessName}.exe) is already suspended"); + return; + } + SuspendGTA(); + TextBlock_Status.Text = "Suspended"; + } + + private async void Button_Resume_Click(object sender, RoutedEventArgs e) + { + if (!IsSuspended) + { + await MainWindow.Instance.ShowMessageAsync("GTA V is not suspended", $"GTA V ({ProcessName}.exe) is not suspended"); + return; + } + ResumeGTA(); + TextBlock_Status.Text = ""; + } + + private static void SuspendProcess(int pid) + { + var process = Process.GetProcessById(pid); + + if (process.ProcessName == string.Empty) + return; + + foreach (ProcessThread pT in process.Threads) + { + IntPtr pOpenThread = OpenThread(ThreadAccess.SUSPEND_RESUME, false, (uint)pT.Id); + + if (pOpenThread == IntPtr.Zero) + { + continue; + } + + SuspendThread(pOpenThread); + + CloseHandle(pOpenThread); + } + } + + public static void ResumeProcess(int pid) + { + var process = Process.GetProcessById(pid); + + if (process.ProcessName == string.Empty) + return; + + foreach (ProcessThread pT in process.Threads) + { + IntPtr pOpenThread = OpenThread(ThreadAccess.SUSPEND_RESUME, false, (uint)pT.Id); + + if (pOpenThread == IntPtr.Zero) + { + continue; + } + + var suspendCount = 0; + do + { + suspendCount = ResumeThread(pOpenThread); + } while (suspendCount > 0); + + CloseHandle(pOpenThread); + } + } + + private bool SuspendGTA() + { + suspendedProcesses = Process.GetProcessesByName(ProcessName); + if (suspendedProcesses.Length < 1) + { + return false; + } + foreach (Process process in suspendedProcesses) + { + SuspendProcess(process.Id); + } + //labelState.Text = "Suspended"; + return true; + } + + private void ResumeGTA() + { + timer.Change(Timeout.Infinite, TIMER_INTERVAL); + foreach (var process in suspendedProcesses) + { + ResumeProcess(process.Id); + } + suspendedProcesses = new Process[0]; + TextBlock_Status.Text = ""; + } + + } + +} \ No newline at end of file diff --git a/GTAOnlineCasinoHelper/Views/LuckyWheel.xaml b/GTAOnlineCasinoHelper/Views/LuckyWheel.xaml index d88cd88..3e647b4 100644 --- a/GTAOnlineCasinoHelper/Views/LuckyWheel.xaml +++ b/GTAOnlineCasinoHelper/Views/LuckyWheel.xaml @@ -9,7 +9,7 @@ xmlns:GTAOnlineCasinoHelper="clr-namespace:GTAOnlineCasinoHelper"> - 0 5 0 0 + 5 @@ -20,46 +20,40 @@ - -