diff --git a/EverythingQuickSearch/MainWindow.xaml.cs b/EverythingQuickSearch/MainWindow.xaml.cs index 08e25c4..1c71bec 100644 --- a/EverythingQuickSearch/MainWindow.xaml.cs +++ b/EverythingQuickSearch/MainWindow.xaml.cs @@ -1365,7 +1365,7 @@ private async void FileItemTemplate_MouseDown(object sender, System.Windows.Inpu { try { - Process.Start(new ProcessStartInfo(clickedItem.FullPath) { UseShellExecute = true }); + OpenPath(clickedItem.FullPath!, IsRunAsModifierPressed()); } catch { } } @@ -1383,7 +1383,7 @@ private async void AppItemTemplate_MouseDown(object sender, MouseButtonEventArgs { try { - Process.Start(new ProcessStartInfo(clickedItem.FullPath) { UseShellExecute = true }); + OpenPath(clickedItem.FullPath!, IsRunAsModifierPressed()); } catch { } } @@ -1427,7 +1427,7 @@ private void SelectedItemPreviewImage_MouseDown(object sender, MouseButtonEventA { if (_selectedItem != null && e.ChangedButton == MouseButton.Left) { - Process.Start(new ProcessStartInfo(_selectedItem.FullPath) { UseShellExecute = true }); + OpenPath(_selectedItem.FullPath!, IsRunAsModifierPressed()); } } catch { } @@ -1601,7 +1601,7 @@ private async void FluentWindow_PreviewKeyDown(object sender, KeyEventArgs e) { try { - Process.Start(new ProcessStartInfo(_selectedItem.FullPath) { UseShellExecute = true }); + OpenPath(_selectedItem.FullPath!, IsRunAsModifierPressed()); } catch { } } @@ -1678,17 +1678,34 @@ private void RunasAdminBorder_MouseDown(object sender, MouseButtonEventArgs e) { if (_selectedItem != null) { - Process.Start(new ProcessStartInfo(_selectedItem.FullPath) - { - UseShellExecute = true, - Verb = "runas" - }); + OpenPath(_selectedItem.FullPath!, true); } } catch { } } + private static bool IsRunAsModifierPressed() + { + const ModifierKeys runAsModifiers = ModifierKeys.Control | ModifierKeys.Shift; + return (Keyboard.Modifiers & runAsModifiers) == runAsModifiers; + } + + private static void OpenPath(string path, bool runAsAdmin) + { + var startInfo = new ProcessStartInfo(path) + { + UseShellExecute = true + }; + + if (runAsAdmin) + { + startInfo.Verb = "runas"; + } + + Process.Start(startInfo); + } + private void OpenFileLocationBorder_MouseDown(object sender, MouseButtonEventArgs e) { try @@ -1974,4 +1991,4 @@ private void ExitApp(object sender, RoutedEventArgs e) } -} \ No newline at end of file +}