using System;
using System.Drawing;
using System.Globalization;
using System.Windows.Forms;
using Microsoft.SqlServer.MessageBox;
using ReClassNET.Core;
using ReClassNET.Forms;
using ReClassNET.Logger;
using ReClassNET.Memory;
using ReClassNET.Native;
using ReClassNET.UI;
using ReClassNET.Util;
namespace ReClassNET
{
public static class Program
{
public static CommandLineArgs CommandLineArgs { get; private set; }
public static Settings Settings { get; private set; }
public static ILogger Logger { get; private set; }
public static Random GlobalRandom { get; } = new Random();
public static RemoteProcess RemoteProcess { get; private set; }
public static CoreFunctionsManager CoreFunctions => RemoteProcess.CoreFunctions;
public static MainForm MainForm { get; private set; }
public static bool DesignMode { get; private set; } = true;
public static FontEx MonoSpaceFont { get; private set; }
[STAThread]
static void Main(string[] args)
{
DesignMode = false; // The designer doesn't call Main()
CommandLineArgs = new CommandLineArgs(args);
try
{
DpiUtil.ConfigureProcess();
}
catch
{
}
MonoSpaceFont = new FontEx
{
Font = new Font("Courier New", DpiUtil.ScaleIntX(13), GraphicsUnit.Pixel),
Width = DpiUtil.ScaleIntX(8),
Height = DpiUtil.ScaleIntY(16)
};
NativeMethods.EnableDebugPrivileges();
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
CultureInfo.DefaultThreadCurrentCulture = CultureInfo.InvariantCulture;
Settings = SettingsSerializer.Load();
Logger = new GuiLogger();
#if DEBUG
using (var coreFunctions = new CoreFunctionsManager())
{
RemoteProcess = new RemoteProcess(coreFunctions);
MainForm = new MainForm();
Application.Run(MainForm);
RemoteProcess.Dispose();
}
#else
try
{
using (var coreFunctions = new CoreFunctionsManager())
{
RemoteProcess = new RemoteProcess(coreFunctions);
MainForm = new MainForm();
Application.Run(MainForm);
RemoteProcess.Dispose();
}
}
catch (Exception ex)
{
ShowException(ex);
}
#endif
SettingsSerializer.Save(Settings);
}
/// Shows the exception in a special form.
/// The exception.
public static void ShowException(Exception ex)
{
ex.HelpLink = Constants.HelpUrl;
var msg = new ExceptionMessageBox(ex)
{
ShowToolBar = true,
Symbol = ExceptionMessageBoxSymbol.Error
};
msg.Show(null);
}
}
}