Обход UAC, чтобы разрешить перетаскивание из неизведанного источника в наше приложение с повышенными правами - PullRequest
0 голосов
/ 21 мая 2019

Существует несколько источников, объясняющих UAC, который предотвращает перетаскивание файлов из проводника в ваше приложение с повышенными правами, но ни один из них не описывает пример WPF.

Проблема заключается в том, что мое приложение НУЖНО запуститьс правами администратора, но в то же время конфликтует с проблемой, описанной выше, поэтому я зашел в тупик.

Для справки, есть эта ссылка , показывающая, как это будет решено в рамкахПриложение MFC (что не так) с использованием ChangeWindowMessageFilter API.

Можно ли добиться того же в приложении WPF?

- ОБНОВЛЕНИЕ -

То, что я пробовал:

  1. Вызов ChangeWindowMessageFilter после создания дескриптора моего главного окна.Функция возвращает true.
  2. Вызов ChangeWindowMessageFilterEx после создания дескриптора моего главного окна, передавая его как param.Функция возвращает значение true, и CHANGEFILTERSTRUCT.ExtStatus - это MSGFLTINFO_NONE.
  3. Вызов DragAcceptFiles после создания дескриптора моего главного окна, DragQueryFile и DragFinish, однако выглядит как вызов DragAcceptFiles isnне позволяют перетаскивать события (WM_DROPFILES) в WndProc следующим образом:

.

public partial class MainWindow : Window
{
    protected override void OnSourceInitialized(EventArgs e)
    {
        base.OnSourceInitialized(e);

        var source = PresentationSource.FromVisual(this) as HwndSource;

        source.AddHook(WndProc);

        WinAPI.DragAcceptFiles(new WindowInteropHelper(this).Handle, true);
    }

    private IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
    {
        if (msg == WinAPI.WM_DROPFILES)
        {
            // Not reaching here
        }

        return IntPtr.Zero;
    }
}
...