diff --git a/v2rayN/v2rayN/Mode/EViewAction.cs b/v2rayN/v2rayN/Mode/EViewAction.cs index 39da1cf3..77324c6c 100644 --- a/v2rayN/v2rayN/Mode/EViewAction.cs +++ b/v2rayN/v2rayN/Mode/EViewAction.cs @@ -1,10 +1,7 @@ - -using System.ComponentModel; - -namespace v2rayN.Mode +namespace v2rayN.Mode { public enum EViewAction - { + { AdjustMainLvColWidth, ProfilesFocus diff --git a/v2rayN/v2rayN/Tool/Utils.cs b/v2rayN/v2rayN/Tool/Utils.cs index d7e0af75..3518455c 100644 --- a/v2rayN/v2rayN/Tool/Utils.cs +++ b/v2rayN/v2rayN/Tool/Utils.cs @@ -1177,47 +1177,44 @@ namespace v2rayN #region scan screen - public static string ScanScreen() + public static string ScanScreen(float dpiX, float dpiY) { try { - foreach (var screen in System.Windows.Forms.Screen.AllScreens) + var left = (int)(SystemParameters.WorkArea.Left); + var top = (int)(SystemParameters.WorkArea.Top); + var width = (int)(SystemParameters.WorkArea.Width / dpiX); + var height = (int)(SystemParameters.WorkArea.Height / dpiY); + + using Bitmap fullImage = new Bitmap(width, height); + using (Graphics g = Graphics.FromImage(fullImage)) { - var left = screen.Bounds.X; - var top = screen.Bounds.Y; - var width = screen.Bounds.Width; - var height = screen.Bounds.Height; + g.CopyFromScreen(left, top, 0, 0, fullImage.Size, CopyPixelOperation.SourceCopy); + } + int maxTry = 10; + for (int i = 0; i < maxTry; i++) + { + int marginLeft = (int)((double)fullImage.Width * i / 2.5 / maxTry); + int marginTop = (int)((double)fullImage.Height * i / 2.5 / maxTry); + Rectangle cropRect = new(marginLeft, marginTop, fullImage.Width - marginLeft * 2, fullImage.Height - marginTop * 2); + Bitmap target = new(width, height); - using Bitmap fullImage = new Bitmap(width, height); - using (Graphics g = Graphics.FromImage(fullImage)) + double imageScale = (double)width / (double)cropRect.Width; + using (Graphics g = Graphics.FromImage(target)) { - g.CopyFromScreen(left, top, 0, 0, fullImage.Size, CopyPixelOperation.SourceCopy); + g.DrawImage(fullImage, new Rectangle(0, 0, target.Width, target.Height), + cropRect, + GraphicsUnit.Pixel); } - int maxTry = 10; - for (int i = 0; i < maxTry; i++) + + BitmapLuminanceSource source = new(target); + BinaryBitmap bitmap = new(new HybridBinarizer(source)); + QRCodeReader reader = new(); + Result result = reader.decode(bitmap); + if (result != null) { - int marginLeft = (int)((double)fullImage.Width * i / 2.5 / maxTry); - int marginTop = (int)((double)fullImage.Height * i / 2.5 / maxTry); - Rectangle cropRect = new(marginLeft, marginTop, fullImage.Width - marginLeft * 2, fullImage.Height - marginTop * 2); - Bitmap target = new(width, height); - - double imageScale = (double)width / (double)cropRect.Width; - using (Graphics g = Graphics.FromImage(target)) - { - g.DrawImage(fullImage, new Rectangle(0, 0, target.Width, target.Height), - cropRect, - GraphicsUnit.Pixel); - } - - BitmapLuminanceSource source = new(target); - BinaryBitmap bitmap = new(new HybridBinarizer(source)); - QRCodeReader reader = new(); - Result result = reader.decode(bitmap); - if (result != null) - { - string ret = result.Text; - return ret; - } + string ret = result.Text; + return ret; } } } @@ -1228,6 +1225,14 @@ namespace v2rayN return string.Empty; } + public static Tuple GetDpiXY(Window window) + { + IntPtr hWnd = new WindowInteropHelper(window).EnsureHandle(); + Graphics g = Graphics.FromHwnd(hWnd); + + return new(96 / g.DpiX, 96 / g.DpiY); + } + #endregion diff --git a/v2rayN/v2rayN/ViewModels/MainWindowViewModel.cs b/v2rayN/v2rayN/ViewModels/MainWindowViewModel.cs index 8afdbfa9..785678e1 100644 --- a/v2rayN/v2rayN/ViewModels/MainWindowViewModel.cs +++ b/v2rayN/v2rayN/ViewModels/MainWindowViewModel.cs @@ -20,7 +20,6 @@ using v2rayN.Mode; using v2rayN.Resx; using v2rayN.Tool; using v2rayN.Views; -using Application = System.Windows.Application; namespace v2rayN.ViewModels @@ -924,9 +923,10 @@ namespace v2rayN.ViewModels { ShowHideWindow(false); + var dpiXY = Utils.GetDpiXY(Application.Current.MainWindow); string result = await Task.Run(() => { - return Utils.ScanScreen(); + return Utils.ScanScreen(dpiXY.Item1, dpiXY.Item2); }); ShowHideWindow(true); diff --git a/v2rayN/v2rayN/Views/MainWindow.xaml.cs b/v2rayN/v2rayN/Views/MainWindow.xaml.cs index ef8070a8..ea2fc4fd 100644 --- a/v2rayN/v2rayN/Views/MainWindow.xaml.cs +++ b/v2rayN/v2rayN/Views/MainWindow.xaml.cs @@ -1,7 +1,6 @@ using ReactiveUI; using Splat; using System.ComponentModel; -using System.Drawing; using System.Reactive.Disposables; using System.Windows; using System.Windows.Controls; @@ -420,11 +419,8 @@ namespace v2rayN.Views Height = _config.uiItem.mainHeight; } - //IntPtr hWnd = new WindowInteropHelper(this).EnsureHandle(); - //Graphics g = Graphics.FromHwnd(hWnd); - //var dip = 96; - var maxWidth = SystemParameters.WorkArea.Width;// * dip / g.DpiX; - var maxHeight = SystemParameters.WorkArea.Height;// * dip / g.DpiY; + var maxWidth = SystemParameters.WorkArea.Width; + var maxHeight = SystemParameters.WorkArea.Height; if (Width > maxWidth) Width = maxWidth; if (Height > maxHeight) Height = maxHeight; if (_config.uiItem.mainGirdHeight1 > 0 && _config.uiItem.mainGirdHeight2 > 0)