Files
DE70/.svn/pristine/a5/a5d54292da01ac46c14be530d41aa98b4f6b6480.svn-base
2024-09-02 10:03:23 +07:00

130 lines
4.6 KiB
Plaintext

using Custom.CuCustomWndAPI;
using Microsoft.Extensions.Configuration;
using Newtonsoft.Json;
using SafeBagDE70.Admin;
using SafeBagDE70.Model;
using SafeBagDE70.StateMachine;
using Serilog;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Threading;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Forms;
using VirtualKeyboard.Wpf;
namespace SafeBagDE70
{
/// <summary>
/// Interaction logic for App.xaml
/// </summary>
public partial class App : System.Windows.Application
{
public static StateMachineConfig StateMachineConfig { get; private set; }
private static Mutex mutex;
public App()
{
}
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
CheckInstance();
LoadConfig();
LoadDualScreens();
}
private static void CheckInstance()
{
bool isNewInstance;
string mutexName = "9f5b55c9-c6eb-443a-8e28-027defa46fb5";
mutex = new Mutex(true, mutexName, out isNewInstance);
if (!isNewInstance)
{
// If an instance is already running, exit the application
System.Windows.MessageBox.Show("Ứng dụng đã khởi chạy");
System.Windows.Application.Current.Shutdown();
return;
}
}
private static void LoadConfig()
{
try
{
AppData.CurrentVersion = Assembly.GetExecutingAssembly().GetName().Version;
VKeyboard.Listen<System.Windows.Controls.TextBox>(e => e.Text);
var configuration = new ConfigurationBuilder()
.AddJsonFile("appsettings.json")
.Build();
Log.Logger = new LoggerConfiguration()
.ReadFrom.Configuration(configuration)
.WriteTo.Sink(new RealTimeLogSink())
.CreateLogger();
AppData.CDMPort = configuration["SerialPort:CDMPort"];
AppData.SensorPort = configuration["SerialPort:SensorPort"];
StateMachineConfig = new StateMachineConfig();
configuration.GetSection("StateMachine").Bind(StateMachineConfig);
Log.Information("START APP");
}
catch (Exception ex)
{
System.Windows.MessageBox.Show(ex.Message);
}
}
private void LoadDualScreens()
{
try
{
// Create instances of the windows you want to open
var mainWindow = new MainWindow();
// Show both windows
mainWindow.Show();
// Get all available screens
var screens = Screen.AllScreens;
// Open the Main Window on the primary screen
var primaryScreen = screens.FirstOrDefault(s => s.Primary) ?? screens.First();
PositionWindowOnScreen(mainWindow, primaryScreen);
mainWindow.Show();
// Open the Secondary Window on the secondary screen, if available
if (screens.Length > 1)
{
var adminWindow = new AdminWindow(); // Replace this with your actual window class
adminWindow.Show();
var secondaryScreen = screens.First(s => !s.Primary);
PositionWindowOnScreen(adminWindow, secondaryScreen);
adminWindow.Show();
}
}catch (Exception ex)
{
Log.Fatal(ex,"START APP");
}
}
private void PositionWindowOnScreen(Window window, Screen screen)
{
// Convert screen bounds to WPF units (96 DPI)
var screenLeft = screen.WorkingArea.Left / (double)Screen.PrimaryScreen.WorkingArea.Width * SystemParameters.PrimaryScreenWidth;
var screenTop = screen.WorkingArea.Top / (double)Screen.PrimaryScreen.WorkingArea.Height * SystemParameters.PrimaryScreenHeight;
// Set window position and state
window.WindowStartupLocation = WindowStartupLocation.Manual;
window.Left = screenLeft;
window.Top = screenTop;
window.Width = screen.WorkingArea.Width;
window.Height = screen.WorkingArea.Height;
}
}
}