From 0766dc4ac6ee8d112dbce6ce106bca0a92c50c57 Mon Sep 17 00:00:00 2001 From: Shawn Date: Wed, 8 Jan 2025 20:58:33 +0800 Subject: [PATCH 1/4] feat: close #830 --- Installer/Package.appxmanifest | 2 +- Ui/View/Host/TabWindowView.xaml | 12 +----------- 2 files changed, 2 insertions(+), 12 deletions(-) diff --git a/Installer/Package.appxmanifest b/Installer/Package.appxmanifest index 9f7e6a00..6c308cbd 100644 --- a/Installer/Package.appxmanifest +++ b/Installer/Package.appxmanifest @@ -12,7 +12,7 @@ + Version="1.0.97.0" /> 1Remote diff --git a/Ui/View/Host/TabWindowView.xaml b/Ui/View/Host/TabWindowView.xaml index 72a861a7..a15e4c0d 100644 --- a/Ui/View/Host/TabWindowView.xaml +++ b/Ui/View/Host/TabWindowView.xaml @@ -43,19 +43,9 @@ - + - From d0a11a4de973e5c6e0ef8f0eedb4131da4dc1b87 Mon Sep 17 00:00:00 2001 From: Shawn Date: Tue, 14 Jan 2025 22:42:00 +0800 Subject: [PATCH 2/4] feat: add `Ctrl + Alt + Del` button to the tab header menu button. #831 --- .../Host/ProtocolHosts/AxMsRdpClient09Host.xaml.cs | 14 ++++++++++++++ Ui/View/Host/ProtocolHosts/HostBase.cs | 2 +- Ui/View/Host/ProtocolHosts/VncHost.xaml.cs | 2 +- 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/Ui/View/Host/ProtocolHosts/AxMsRdpClient09Host.xaml.cs b/Ui/View/Host/ProtocolHosts/AxMsRdpClient09Host.xaml.cs index ccb7f1a1..b7c459cb 100644 --- a/Ui/View/Host/ProtocolHosts/AxMsRdpClient09Host.xaml.cs +++ b/Ui/View/Host/ProtocolHosts/AxMsRdpClient09Host.xaml.cs @@ -88,6 +88,20 @@ private AxMsRdpClient09Host(RDP rdp, int width = 0, int height = 0) : base(rdp, { InitializeComponent(); + + MenuItems.Add(new System.Windows.Controls.Separator()); + MenuItems.Add(new System.Windows.Controls.MenuItem() + { + Header = "Ctrl + Alt + Del", + Command = new RelayCommand((o) => + { + _rdpClient?.Focus(); + new MsRdpClientNonScriptableWrapper(_rdpClient.GetOcx()).SendKeys( + new int[] { 0x1d, 0x38, 0x53, 0x53, 0x38, 0x1d }, + new bool[] { false, false, false, true, true, true, }); + }, o => HasConnected) + }); + GridMessageBox.Visibility = Visibility.Collapsed; GridLoading.Visibility = Visibility.Visible; diff --git a/Ui/View/Host/ProtocolHosts/HostBase.cs b/Ui/View/Host/ProtocolHosts/HostBase.cs index 89fe088c..0d35aa3c 100644 --- a/Ui/View/Host/ProtocolHosts/HostBase.cs +++ b/Ui/View/Host/ProtocolHosts/HostBase.cs @@ -104,7 +104,7 @@ protected HostBase(ProtocolBase protocolServer, bool canFullScreen = false) }); } - MenuItems.Add(new Separator()); + MenuItems.Add(new System.Windows.Controls.Separator()); { var subMenu = new System.Windows.Controls.MenuItem() diff --git a/Ui/View/Host/ProtocolHosts/VncHost.xaml.cs b/Ui/View/Host/ProtocolHosts/VncHost.xaml.cs index 698fc619..8b3b5a68 100644 --- a/Ui/View/Host/ProtocolHosts/VncHost.xaml.cs +++ b/Ui/View/Host/ProtocolHosts/VncHost.xaml.cs @@ -40,7 +40,7 @@ private VncHost(VNC vnc) : base(vnc, false) _vncBase = vnc; - MenuItems.Clear(); + MenuItems.Add(new System.Windows.Controls.Separator()); MenuItems.Add(new System.Windows.Controls.MenuItem() { Header = "Ctrl + Alt + Del", From 28e720a8dfce8532da7b86fc29bb989d1f585991 Mon Sep 17 00:00:00 2001 From: Shawn Date: Wed, 15 Jan 2025 21:11:45 +0800 Subject: [PATCH 3/4] fix: try fix #827 --- Ui/View/Host/TabWindowView.xaml_timer.cs | 83 ++++++++++++++++++++---- 1 file changed, 70 insertions(+), 13 deletions(-) diff --git a/Ui/View/Host/TabWindowView.xaml_timer.cs b/Ui/View/Host/TabWindowView.xaml_timer.cs index 26704329..2c193521 100644 --- a/Ui/View/Host/TabWindowView.xaml_timer.cs +++ b/Ui/View/Host/TabWindowView.xaml_timer.cs @@ -4,6 +4,7 @@ using System.Windows; using System.Windows.Forms; using _1RM.Model.Protocol; +using _1RM.View.Host.ProtocolHosts; using Shawn.Utils; using Stylet; using ProtocolHostType = _1RM.View.Host.ProtocolHosts.ProtocolHostType; @@ -35,12 +36,13 @@ private void TimerDispose() } private IntPtr _lastActivatedWindowHandle = IntPtr.Zero; + private void Timer4CheckForegroundWindowOnElapsed(object? sender, ElapsedEventArgs e) { _timer4CheckForegroundWindow.Stop(); try { - RunForRdp(); + RunForRdpV2(); RunForIntegrate(); } catch (Exception ex) @@ -59,6 +61,7 @@ private void Timer4CheckForegroundWindowOnElapsed(object? sender, ElapsedEventAr [DllImport("user32.dll")] private static extern IntPtr GetForegroundWindow(); + [DllImport("user32.dll")] private static extern bool SetForegroundWindow(IntPtr hWnd); @@ -89,12 +92,13 @@ private void RunForIntegrate() _lastActivatedWindowHandle = nowActivatedWindowHandle; } - /**** + /**** * THE PURPOSE OF THIS FUNCTION IS TO: * - LET YOUR LOCAL DESKTOP WINDOW GET FOCUS WHEN YOU MOVE THE CURSOR OUT OF THE RDP WINDOW * - LET THE RDP WINDOW GET FOCUS WHEN YOU MOVE THE CURSOR INTO THE RDP WINDOW * - CAUTION: PAY ATTENTION TO THE RESIZE OF THE RDP WINDOW, IT MAY CAUSE THE CURSOR TO MOVE OUT OF THE RDP WINDOW, SO WE NEED TO CHECK IF THE LEFT MOUSE BUTTON IS PRESSED OR NOT - ***/ + ***/ + #region RunForRdp [StructLayout(LayoutKind.Sequential)] @@ -103,15 +107,18 @@ internal struct Win32Point public Int32 X; public Int32 Y; }; + [DllImport("user32.dll")] [return: MarshalAs(UnmanagedType.Bool)] internal static extern bool GetCursorPos(ref Win32Point pt); + private static Point GetMousePosition() { var w32Mouse = new Win32Point(); GetCursorPos(ref w32Mouse); return new Point(w32Mouse.X, w32Mouse.Y); } + [DllImport("user32.dll")] private static extern IntPtr GetDesktopWindow(); @@ -143,17 +150,17 @@ private void RunForRdp() if (Vm?.SelectedItem?.Content?.Status != ProtocolHosts.ProtocolHostStatus.Connected) return; - // Fix the resizing bug introduced by #648, see https://github.com/1Remote/1Remote/issues/797 for more details - bool isMousePressed = System.Windows.Forms.Control.MouseButtons == MouseButtons.Left - || System.Windows.Forms.Control.MouseButtons == MouseButtons.Right - || System.Windows.Forms.Control.MouseButtons == MouseButtons.Middle; - if (isMousePressed) - { + // Fix the resizing bug introduced by #648, see https://github.com/1Remote/1Remote/issues/797 for more details + bool isMousePressed = System.Windows.Forms.Control.MouseButtons == MouseButtons.Left + || System.Windows.Forms.Control.MouseButtons == MouseButtons.Right + || System.Windows.Forms.Control.MouseButtons == MouseButtons.Middle; + if (isMousePressed) + { #if DEBUG - SimpleLogHelper.Debug("Tab focus: Mouse is pressed, do nothing"); + SimpleLogHelper.Debug("Tab focus: Mouse is pressed, do nothing"); #endif - return; - } + return; + } var nowActivatedWindowHandle = GetForegroundWindow(); var desktopHandle = GetDesktopWindow(); @@ -194,6 +201,56 @@ private void RunForRdp() _rdpStage = 1; } } - #endregion + + + private void RunForRdpV2() + { + if (Vm?.SelectedItem?.Content?.ProtocolServer.Protocol != RDP.ProtocolName) + return; + //if (Vm?.SelectedItem?.Content is not IntegrateHostForWinFrom ihfw) + // return; + if (Vm?.SelectedItem?.Content?.Status != ProtocolHosts.ProtocolHostStatus.Connected) + return; + + // Fix the resizing bug introduced by #648, see https://github.com/1Remote/1Remote/issues/797 for more details + bool isMousePressed = System.Windows.Forms.Control.MouseButtons == MouseButtons.Left + || System.Windows.Forms.Control.MouseButtons == MouseButtons.Right + || System.Windows.Forms.Control.MouseButtons == MouseButtons.Middle; + if (isMousePressed) + { + //SimpleLogHelper.Debug("Tab focus: Mouse is pressed, do nothing"); + return; + } + + var nowActivatedWindowHandle = GetForegroundWindow(); + var desktopHandle = GetDesktopWindow(); + IntPtr rdpHandle = IntPtr.Zero; + if (Vm?.SelectedItem?.Content is AxMsRdpClient09Host rdpHost) + { + rdpHandle = _myHandle; + } + else + { + //rdpHandle = ihfw.GetHostHwnd(); + throw new NotImplementedException(); + } + + bool isMouseInside = IsMouseInside(this); +//#if DEBUG +// SimpleLogHelper.Debug($"Tab focus: isMouseInside = {isMouseInside}, rdpHandle = {rdpHandle}, nowActivatedWindowHandle = {nowActivatedWindowHandle}, desktopHandle = {desktopHandle}"); +//#endif + if (!isMouseInside && rdpHandle == nowActivatedWindowHandle) + { + // 1 - RDP has focus AND mouse is not inside the tab window, then switch focus to desktop, user input will not be sent to RDP + SetForegroundWindow(desktopHandle); + } + else if (isMouseInside && (nowActivatedWindowHandle == desktopHandle || nowActivatedWindowHandle == IntPtr.Zero)) + { + // 2 - desktop has focus + SetForegroundWindow(rdpHandle); + } + + #endregion + } } } \ No newline at end of file From 3bdaada0be4be6f35d8efbb95da02bac6551e845 Mon Sep 17 00:00:00 2001 From: Shawn Date: Thu, 16 Jan 2025 00:14:17 +0800 Subject: [PATCH 4/4] fix: Add a switch for feature #648, close #835 --- Ui/AppVersion.cs | 2 +- Ui/Resources/Languages/cs-cz.xaml | 2 +- Ui/Resources/Languages/de-de.xaml | 2 +- Ui/Resources/Languages/en-us.xaml | 2 +- Ui/Resources/Languages/fr-fr.xaml | 2 +- Ui/Resources/Languages/gl-es.xaml | 2 +- Ui/Resources/Languages/glossary.csv | 1 + .../Languages/glossary_translated_by_google.csv | 2 +- Ui/Resources/Languages/ja-jp.xaml | 2 +- Ui/Resources/Languages/pl-pl.xaml | 2 +- Ui/Resources/Languages/pt-br.xaml | 2 +- Ui/Resources/Languages/ru-ru.xaml | 2 +- Ui/Resources/Languages/zh-cn.xaml | 2 +- Ui/Resources/Languages/zh-tw.xaml | 2 +- Ui/Service/ConfigurationService.cs | 5 +++++ .../Host/ProtocolHosts/AxMsRdpClient09Host.xaml.cs | 1 + Ui/View/Host/TabWindowView.xaml_timer.cs | 4 ++++ Ui/View/Settings/General/GeneralSettingView.xaml | 8 ++++++++ Ui/View/Settings/General/GeneralSettingViewModel.cs | 12 ++++++++++++ readme.md | 2 +- 20 files changed, 45 insertions(+), 14 deletions(-) diff --git a/Ui/AppVersion.cs b/Ui/AppVersion.cs index 74b6f7ae..2c99fee5 100644 --- a/Ui/AppVersion.cs +++ b/Ui/AppVersion.cs @@ -6,7 +6,7 @@ public static class AppVersion { public const uint Major = 1; public const uint Minor = 1; - public const uint Patch = 0; + public const uint Patch = 1; public const uint Build = 0; public const string BuildDate = ""; public const string PreRelease = ""; // e.g. "alpha" "beta.2" diff --git a/Ui/Resources/Languages/cs-cz.xaml b/Ui/Resources/Languages/cs-cz.xaml index bef5f31d..ce1b0329 100644 --- a/Ui/Resources/Languages/cs-cz.xaml +++ b/Ui/Resources/Languages/cs-cz.xaml @@ -105,7 +105,6 @@ Databáze Varování: vaše data budou uložena nešifrovaná! Zpracovávají se data. Nezavírejte aplikaci! - Databáze: odepřeno oprávnění pro čtení nebo soubor není databází, případně je šifrovaná! Databáze: Odepřeno oprávnění pro čtení! Zkontrolujte správnost svého hesla nebo přítomnost souboru. Zduplikovat Zkopírovat název stroje do schránky @@ -322,4 +321,5 @@ No Kliknutím na ikonu výše ji změníte na svůj vlastní obrázek Vždy otevřít v novém okně + Nastavte fokus na místní plochu, když se myš přesune mimo plochu RDP \ No newline at end of file diff --git a/Ui/Resources/Languages/de-de.xaml b/Ui/Resources/Languages/de-de.xaml index b594fb1d..b5e88d55 100644 --- a/Ui/Resources/Languages/de-de.xaml +++ b/Ui/Resources/Languages/de-de.xaml @@ -105,7 +105,6 @@ Datenbank Achtung: Ihre Daten werden unverschlüsselt gespeichert Datenverarbeitung, Programm bitte nicht schließen. - Datei ist keine Datenbank oder Datei ist eine verschlüsselte Datenbank! Datenbank: Berechtigung zum Lesen verweigert! Bitte überprüfen Sie Ihr Passwort der Datei. Duplizieren Hostname in die Zwischenablage kopieren @@ -322,4 +321,5 @@ No Klicken Sie auf das Symbol oben, um es in Ihr eigenes Bild zu ändern Immer in neuem Fenster öffnen + Den Fokus auf den lokalen Desktop setzen, wenn die Maus aus dem RDP-Desktop bewegt wird. \ No newline at end of file diff --git a/Ui/Resources/Languages/en-us.xaml b/Ui/Resources/Languages/en-us.xaml index a840fefc..7ef13ad0 100644 --- a/Ui/Resources/Languages/en-us.xaml +++ b/Ui/Resources/Languages/en-us.xaml @@ -105,7 +105,6 @@ Database Caution: Your data will be saved unencrypted! Processing data. Do not close the app! - Database: Permission denied for reading or the file is not a database or the file is an encrypted database! Database: Permission denied for reading! Please check your password of db or the file occupation. Duplicate Copy hostname to clipboard @@ -322,4 +321,5 @@ No Click on the icon above to change it to your own image Always open in new window + Set focus to local desktop when the mouse is moved out of RDP desktop \ No newline at end of file diff --git a/Ui/Resources/Languages/fr-fr.xaml b/Ui/Resources/Languages/fr-fr.xaml index b8a323ea..4eb93391 100644 --- a/Ui/Resources/Languages/fr-fr.xaml +++ b/Ui/Resources/Languages/fr-fr.xaml @@ -105,7 +105,6 @@ Base de données Mise en garde : vos données seront enregistrées non cryptées ! Traitement des données, ne fermez pas l'application. - Base de données : autorisation de lecture refusée ou le fichier n'est pas une base de données ou le fichier est une base de données cryptée ! Base de données : autorisation de lecture refusée! Veuillez vérifier le mot de passe du fichier. Dupliquer Copier nom d'hôte dans le presse-papiers @@ -322,4 +321,5 @@ No Cliquez sur l'icône ci-dessus pour la remplacer par votre propre image Toujours ouvrir dans une nouvelle fenêtre + Définir le focus sur le bureau local lorsque la souris est déplacée hors du bureau RDP \ No newline at end of file diff --git a/Ui/Resources/Languages/gl-es.xaml b/Ui/Resources/Languages/gl-es.xaml index d6fdb200..6533f2fb 100644 --- a/Ui/Resources/Languages/gl-es.xaml +++ b/Ui/Resources/Languages/gl-es.xaml @@ -105,7 +105,6 @@ Base de datos Atención: os teus datos gardaranse sen cifrar. Procesando datos. Non peches a aplicación! - Base de datos: Permiso denegado para ler o arquivo ou o arquivo non é una base de datos ou o arquivo está encriptado Base de datos: Permiso denegado para ler! Por favor, comproba a chave de paso da base de datos Duplicar Copiar o nome do host ao portapapeis @@ -322,4 +321,5 @@ No Fai clic na icona de arriba para cambiala á túa propia imaxe Abrir sempre nunha ventá nova + Establece o foco no escritorio local cando se move o rato fóra do escritorio RDP \ No newline at end of file diff --git a/Ui/Resources/Languages/glossary.csv b/Ui/Resources/Languages/glossary.csv index 442313a5..1f47a861 100644 --- a/Ui/Resources/Languages/glossary.csv +++ b/Ui/Resources/Languages/glossary.csv @@ -361,3 +361,4 @@ Yes;Yes;是;;;;;はい;;;; No;No;否;;;;;いいえ;;;; Click on the icon above to change it to your own image;Click on the icon above to change it to your own image;点击图标可选择本地图片;;;;;上のアイコンをクリックしてお持ちの画像に変更できます;;;; Always open in new window;Always open in new window;总在新窗口打开;;;;;常に新しいウィンドウで開く;;;; +Set focus to local desktop when the mouse is moved out of RDP desktop;Set focus to local desktop when the mouse is moved out of RDP desktop;当鼠标移出RDP桌面时将焦点设定到本地桌面;;Den Fokus auf den lokalen Desktop setzen, wenn die Maus aus dem RDP-Desktop bewegt wird.;Définir le focus sur le bureau local lorsque la souris est déplacée hors du bureau RDP;;RDPデスクトップからマウスが移動されたときに、フォーカスをローカルデスクトップに設定します;;;;Установите фокус на локальный рабочий стол, когда мышь выходит за пределы рабочего стола RDP diff --git a/Ui/Resources/Languages/glossary_translated_by_google.csv b/Ui/Resources/Languages/glossary_translated_by_google.csv index 7c1c2320..5684979e 100644 --- a/Ui/Resources/Languages/glossary_translated_by_google.csv +++ b/Ui/Resources/Languages/glossary_translated_by_google.csv @@ -104,7 +104,6 @@ system_options_quick_launcher_hotkey;Hot key;快捷键;Klávesová zkratka;Hotke system_options_data_security_database;Database;数据库;Databáze;Datenbank;Base de données;Base de dados;データベース;資料庫;Base de datos;Baza danych;База данных Caution: Your data will be saved unencrypted!;Caution: Your data will be saved unencrypted!;导出数据将以明文显示,请妥善保管!;Varování: vaše data budou uložena nešifrovaná!;Achtung: Ihre Daten werden unverschlüsselt gespeichert;Mise en garde : vos données seront enregistrées non cryptées !;Atenção: Seus dados serão salvos sem criptografia!;注意: データは暗号化されずに保存されます;注意:您的數據將以未加密的方式保存!;Atención: os teus datos gardaranse sen cifrar.;Uwaga: Twoje dane nie będą kodowane!;Внимание: ваши данные будут сохранены в незашифрованном виде! system_options_data_security_info_data_processing;Processing data. Do not close the app!;数据处理中,请勿关闭程序。;Zpracovávají se data. Nezavírejte aplikaci!;Datenverarbeitung, Programm bitte nicht schließen.;Traitement des données, ne fermez pas l'application.;Processando dados. Não feche o aplicativo!;データを処理しています。アプリを閉じないでください。;正在處理資料,請勿關閉應用程式。;Procesando datos. Non peches a aplicación!;Przetwarzanie danych. Nie zamykaj aplikacji!;Обработка данных. Не закрывайте приложение! -system_options_data_security_error_can_not_open;Database: Permission denied for reading or the file is not a database or the file is an encrypted database!;数据库:所选文件已被占用或不是数据库或该数据库已被加密!;Databáze: odepřeno oprávnění pro čtení nebo soubor není databází, případně je šifrovaná!;Datei ist keine Datenbank oder Datei ist eine verschlüsselte Datenbank!;Base de données : autorisation de lecture refusée ou le fichier n'est pas une base de données ou le fichier est une base de données cryptée !;Banco de dados: Permissão negada para leitura. Ou o arquivo não é um banco de dados ou o arquivo é um banco de dados criptografado!;データベースを開けません;資料庫:選擇的檔案不是資料庫格式,或是正在被其他應用程式占用,或者資料已被加密!;Base de datos: Permiso denegado para ler o arquivo ou o arquivo non é una base de datos ou o arquivo está encriptado;Baza danych: Odmowa dostępu do odczytu lub plik nie jest bazą danych lub plik jest zaszyfrowany!;База данных: разрешение на чтение отклонено, либо файл не является базой данных, либо файл является зашифрованной базой данных! string_database_error_permission_denied;Database: Permission denied for reading! Please check your password of db or the file occupation.;数据库:没有足够的权限读取,或数据库已被占用!;Databáze: Odepřeno oprávnění pro čtení! Zkontrolujte správnost svého hesla nebo přítomnost souboru.;Datenbank: Berechtigung zum Lesen verweigert! Bitte überprüfen Sie Ihr Passwort der Datei.;Base de données : autorisation de lecture refusée! Veuillez vérifier le mot de passe du fichier.;Banco de dados: Permissão negada para leitura! Por favor, verifique sua senha de db ou o local do arquivo.;データベースの読み書きが許可されていません;資料庫:沒有存取權限,或者正在被其他應用程式占用!;Base de datos: Permiso denegado para ler! Por favor, comproba a chave de paso da base de datos;Baza danych: odmowa dostępu do odczytu! Sprawdź hasło pliku albo plik jest w użyciu.;База данных: доступ к чтению запрещен! Пожалуйста, проверьте свой пароль БД. Или файл может быть использован в другом приложении. server_card_operate_duplicate;Duplicate;创建副本;Zduplikovat;Duplizieren;Dupliquer;Duplicado;複製;建立副本;Duplicar;Duplikuj;Дублировать server_card_operate_copy_address;Copy hostname to clipboard;复制地址到剪贴板;Zkopírovat název stroje do schránky;Hostname in die Zwischenablage kopieren;Copier nom d'hôte dans le presse-papiers;Copie o nome do host para a área de transferência;ホスト名をクリップボードにコピー;複製主機名稱或網址到剪貼簿;Copiar o nome do host ao portapapeis;Kopiuj nazwę komputera do schowka;Скопировать имя хоста в буфер обмена @@ -366,3 +365,4 @@ Yes;Yes;是;Yes;Yes;Yes;Yes;はい;是;Yes;Yes;Yes No;No;否;No;No;No;No;いいえ;否;No;No;No Click on the icon above to change it to your own image;Click on the icon above to change it to your own image;点击图标可选择本地图片;Kliknutím na ikonu výše ji změníte na svůj vlastní obrázek;Klicken Sie auf das Symbol oben, um es in Ihr eigenes Bild zu ändern;Cliquez sur l'icône ci-dessus pour la remplacer par votre propre image;Clique no ícone acima para alterá-lo para sua própria imagem;上のアイコンをクリックしてお持ちの画像に変更できます;點擊上面的圖標將其更改為您自己的圖像;Fai clic na icona de arriba para cambiala á túa propia imaxe;Kliknij powyższą ikonę, aby zmienić ją na swój własny obraz;Нажмите на значок выше, чтобы изменить его на свое собственное изображение. Always open in new window;Always open in new window;总在新窗口打开;Vždy otevřít v novém okně;Immer in neuem Fenster öffnen;Toujours ouvrir dans une nouvelle fenêtre;Sempre abrir em uma nova janela;常に新しいウィンドウで開く;始終在新視窗中打開;Abrir sempre nunha ventá nova;Zawsze otwieraj w nowym oknie;Всегда открывать в новом окне +Set focus to local desktop when the mouse is moved out of RDP desktop;Set focus to local desktop when the mouse is moved out of RDP desktop;当鼠标移出RDP桌面时将焦点设定到本地桌面;Nastavte fokus na místní plochu, když se myš přesune mimo plochu RDP;Den Fokus auf den lokalen Desktop setzen, wenn die Maus aus dem RDP-Desktop bewegt wird.;Définir le focus sur le bureau local lorsque la souris est déplacée hors du bureau RDP;Defina o foco para a área de trabalho local quando o mouse for movido para fora da área de trabalho RDP;RDPデスクトップからマウスが移動されたときに、フォーカスをローカルデスクトップに設定します;當滑鼠移出 RDP 桌面時將焦點設定到本機桌面;Establece o foco no escritorio local cando se move o rato fóra do escritorio RDP;Ustaw fokus na pulpicie lokalnym, gdy mysz zostanie przeniesiona poza pulpit RDP;Установите фокус на локальный рабочий стол, когда мышь выходит за пределы рабочего стола RDP diff --git a/Ui/Resources/Languages/ja-jp.xaml b/Ui/Resources/Languages/ja-jp.xaml index 6e8de196..abf1400b 100644 --- a/Ui/Resources/Languages/ja-jp.xaml +++ b/Ui/Resources/Languages/ja-jp.xaml @@ -105,7 +105,6 @@ データベース 注意: データは暗号化されずに保存されます データを処理しています。アプリを閉じないでください。 - データベースを開けません データベースの読み書きが許可されていません 複製 ホスト名をクリップボードにコピー @@ -322,4 +321,5 @@ いいえ 上のアイコンをクリックしてお持ちの画像に変更できます 常に新しいウィンドウで開く + RDPデスクトップからマウスが移動されたときに、フォーカスをローカルデスクトップに設定します \ No newline at end of file diff --git a/Ui/Resources/Languages/pl-pl.xaml b/Ui/Resources/Languages/pl-pl.xaml index 2abaee5c..bf19dba2 100644 --- a/Ui/Resources/Languages/pl-pl.xaml +++ b/Ui/Resources/Languages/pl-pl.xaml @@ -105,7 +105,6 @@ Baza danych Uwaga: Twoje dane nie będą kodowane! Przetwarzanie danych. Nie zamykaj aplikacji! - Baza danych: Odmowa dostępu do odczytu lub plik nie jest bazą danych lub plik jest zaszyfrowany! Baza danych: odmowa dostępu do odczytu! Sprawdź hasło pliku albo plik jest w użyciu. Duplikuj Kopiuj nazwę komputera do schowka @@ -322,4 +321,5 @@ No Kliknij powyższą ikonę, aby zmienić ją na swój własny obraz Zawsze otwieraj w nowym oknie + Ustaw fokus na pulpicie lokalnym, gdy mysz zostanie przeniesiona poza pulpit RDP \ No newline at end of file diff --git a/Ui/Resources/Languages/pt-br.xaml b/Ui/Resources/Languages/pt-br.xaml index 68f50f4d..c94092b1 100644 --- a/Ui/Resources/Languages/pt-br.xaml +++ b/Ui/Resources/Languages/pt-br.xaml @@ -105,7 +105,6 @@ Base de dados Atenção: Seus dados serão salvos sem criptografia! Processando dados. Não feche o aplicativo! - Banco de dados: Permissão negada para leitura. Ou o arquivo não é um banco de dados ou o arquivo é um banco de dados criptografado! Banco de dados: Permissão negada para leitura! Por favor, verifique sua senha de db ou o local do arquivo. Duplicado Copie o nome do host para a área de transferência @@ -322,4 +321,5 @@ No Clique no ícone acima para alterá-lo para sua própria imagem Sempre abrir em uma nova janela + Defina o foco para a área de trabalho local quando o mouse for movido para fora da área de trabalho RDP \ No newline at end of file diff --git a/Ui/Resources/Languages/ru-ru.xaml b/Ui/Resources/Languages/ru-ru.xaml index 6c41f432..f5bad7f7 100644 --- a/Ui/Resources/Languages/ru-ru.xaml +++ b/Ui/Resources/Languages/ru-ru.xaml @@ -105,7 +105,6 @@ База данных Внимание: ваши данные будут сохранены в незашифрованном виде! Обработка данных. Не закрывайте приложение! - База данных: разрешение на чтение отклонено, либо файл не является базой данных, либо файл является зашифрованной базой данных! База данных: доступ к чтению запрещен! Пожалуйста, проверьте свой пароль БД. Или файл может быть использован в другом приложении. Дублировать Скопировать имя хоста в буфер обмена @@ -322,4 +321,5 @@ No Нажмите на значок выше, чтобы изменить его на свое собственное изображение. Всегда открывать в новом окне + Установите фокус на локальный рабочий стол, когда мышь выходит за пределы рабочего стола RDP \ No newline at end of file diff --git a/Ui/Resources/Languages/zh-cn.xaml b/Ui/Resources/Languages/zh-cn.xaml index f2665df0..49e94590 100644 --- a/Ui/Resources/Languages/zh-cn.xaml +++ b/Ui/Resources/Languages/zh-cn.xaml @@ -105,7 +105,6 @@ 数据库 导出数据将以明文显示,请妥善保管! 数据处理中,请勿关闭程序。 - 数据库:所选文件已被占用或不是数据库或该数据库已被加密! 数据库:没有足够的权限读取,或数据库已被占用! 创建副本 复制地址到剪贴板 @@ -322,4 +321,5 @@ 点击图标可选择本地图片 总在新窗口打开 + 当鼠标移出RDP桌面时将焦点设定到本地桌面 \ No newline at end of file diff --git a/Ui/Resources/Languages/zh-tw.xaml b/Ui/Resources/Languages/zh-tw.xaml index e99986ce..bd19b691 100644 --- a/Ui/Resources/Languages/zh-tw.xaml +++ b/Ui/Resources/Languages/zh-tw.xaml @@ -105,7 +105,6 @@ 資料庫 注意:您的數據將以未加密的方式保存! 正在處理資料,請勿關閉應用程式。 - 資料庫:選擇的檔案不是資料庫格式,或是正在被其他應用程式占用,或者資料已被加密! 資料庫:沒有存取權限,或者正在被其他應用程式占用! 建立副本 複製主機名稱或網址到剪貼簿 @@ -322,4 +321,5 @@ 點擊上面的圖標將其更改為您自己的圖像 始終在新視窗中打開 + 當滑鼠移出 RDP 桌面時將焦點設定到本機桌面 \ No newline at end of file diff --git a/Ui/Service/ConfigurationService.cs b/Ui/Service/ConfigurationService.cs index bac6f7b2..5baa7e45 100644 --- a/Ui/Service/ConfigurationService.cs +++ b/Ui/Service/ConfigurationService.cs @@ -76,6 +76,11 @@ public class GeneralConfig [DefaultValue(false)] [JsonProperty(DefaultValueHandling = DefaultValueHandling.Populate)] public bool TabWindowCloseButtonOnLeft = false; + + + [DefaultValue(false)] + [JsonProperty(DefaultValueHandling = DefaultValueHandling.Populate)] + public bool TabWindowSetFocusToLocalDesktopOnMouseLeaveRdpWindow = false; } public class LauncherConfig diff --git a/Ui/View/Host/ProtocolHosts/AxMsRdpClient09Host.xaml.cs b/Ui/View/Host/ProtocolHosts/AxMsRdpClient09Host.xaml.cs index b7c459cb..12ab047e 100644 --- a/Ui/View/Host/ProtocolHosts/AxMsRdpClient09Host.xaml.cs +++ b/Ui/View/Host/ProtocolHosts/AxMsRdpClient09Host.xaml.cs @@ -1034,6 +1034,7 @@ public override void FocusOnMe() // Kill logical focus FocusManager.SetFocusedElement(FocusManager.GetFocusScope(RdpHost), null); Keyboard.ClearFocus(); + this.Focus(); RdpHost.Focus(); if (_rdpClient is { } rdp) { diff --git a/Ui/View/Host/TabWindowView.xaml_timer.cs b/Ui/View/Host/TabWindowView.xaml_timer.cs index 2c193521..a70f4600 100644 --- a/Ui/View/Host/TabWindowView.xaml_timer.cs +++ b/Ui/View/Host/TabWindowView.xaml_timer.cs @@ -4,6 +4,7 @@ using System.Windows; using System.Windows.Forms; using _1RM.Model.Protocol; +using _1RM.Service; using _1RM.View.Host.ProtocolHosts; using Shawn.Utils; using Stylet; @@ -205,6 +206,9 @@ private void RunForRdp() private void RunForRdpV2() { + if(IoC.Get().General.TabWindowSetFocusToLocalDesktopOnMouseLeaveRdpWindow == false) + return; + if (Vm?.SelectedItem?.Content?.ProtocolServer.Protocol != RDP.ProtocolName) return; //if (Vm?.SelectedItem?.Content is not IntegrateHostForWinFrom ihfw) diff --git a/Ui/View/Settings/General/GeneralSettingView.xaml b/Ui/View/Settings/General/GeneralSettingView.xaml index a195ac19..3323b717 100644 --- a/Ui/View/Settings/General/GeneralSettingView.xaml +++ b/Ui/View/Settings/General/GeneralSettingView.xaml @@ -171,6 +171,14 @@ + + + + + + + +