Существует несколько источников, объясняющих UAC, который предотвращает перетаскивание файлов из проводника в ваше приложение с повышенными правами, но ни один из них не описывает пример WPF.
Проблема заключается в том, что мое приложение НУЖНО запуститьс правами администратора, но в то же время конфликтует с проблемой, описанной выше, поэтому я зашел в тупик.
Для справки, есть эта ссылка , показывающая, как это будет решено в рамкахПриложение MFC (что не так) с использованием ChangeWindowMessageFilter
API.
Можно ли добиться того же в приложении WPF?
- ОБНОВЛЕНИЕ -
То, что я пробовал:
- Вызов
ChangeWindowMessageFilter
после создания дескриптора моего главного окна.Функция возвращает true. - Вызов
ChangeWindowMessageFilterEx
после создания дескриптора моего главного окна, передавая его как param.Функция возвращает значение true, и CHANGEFILTERSTRUCT.ExtStatus
- это MSGFLTINFO_NONE
. - Вызов
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;
}
}