Add project files.
This commit is contained in:
@@ -0,0 +1,129 @@
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user