using System.Windows; namespace AutoShutdown; internal static class Program { [STAThread] private static void Main(string[] args) { var app = new System.Windows.Application(); #if DEBUG if (args.Any(arg => arg.Equals("--capture-notification-settings-ui", StringComparison.OrdinalIgnoreCase))) { CaptureNotificationSettingsUiAndExit(app, args); return; } if (args.Any(arg => arg.Equals("--capture-ui", StringComparison.OrdinalIgnoreCase) || arg.StartsWith("--capture-ui=", StringComparison.OrdinalIgnoreCase))) { CaptureUiAndExit(app, args); return; } #endif app.Run(new MainWindow()); } #if DEBUG private static void CaptureUiAndExit(System.Windows.Application app, string[] args) { var size = ResolveCaptureSize(args); var window = new MainWindow(enableTray: false) { WindowStartupLocation = WindowStartupLocation.Manual, Left = -20000, Top = -20000, Width = size.Width, Height = size.Height, ShowInTaskbar = false }; window.ContentRendered += (_, _) => { window.Dispatcher.InvokeAsync(() => { var requestedPath = args .FirstOrDefault(arg => arg.StartsWith("--capture-ui=", StringComparison.OrdinalIgnoreCase)) ?.Split('=', 2)[1]; var path = Services.ScreenshotService.Capture(window, requestedPath); Console.WriteLine(path); window.Close(); }, System.Windows.Threading.DispatcherPriority.ApplicationIdle); }; app.Run(window); } private static void CaptureNotificationSettingsUiAndExit(System.Windows.Application app, string[] args) { var window = new NotificationSettingsWindow( Models.NotificationSettings.Default(), new Services.NotificationService(Models.NotificationSettings.Default())) { WindowStartupLocation = WindowStartupLocation.Manual, Left = -20000, Top = -20000, ShowInTaskbar = false }; window.ContentRendered += (_, _) => { window.Dispatcher.InvokeAsync(() => { var requestedPath = args .FirstOrDefault(arg => arg.StartsWith("--capture-ui=", StringComparison.OrdinalIgnoreCase)) ?.Split('=', 2)[1]; var path = Services.ScreenshotService.Capture(window, requestedPath); Console.WriteLine(path); window.Close(); }, System.Windows.Threading.DispatcherPriority.ApplicationIdle); }; app.Run(window); } private static System.Windows.Size ResolveCaptureSize(string[] args) { var sizeArg = args.FirstOrDefault(arg => arg.StartsWith("--capture-size=", StringComparison.OrdinalIgnoreCase)); if (sizeArg is null) { return new System.Windows.Size(1100, 760); } var raw = sizeArg.Split('=', 2)[1].ToLowerInvariant().Split('x', 2); return raw.Length == 2 && double.TryParse(raw[0], out var width) && double.TryParse(raw[1], out var height) ? new System.Windows.Size(width, height) : new System.Windows.Size(1100, 760); } #endif }