Я могу использовать перетаскивание, чтобы перетащить файл из проводника в какой-то элемент управления, когда я не использую права администратора, но мне нужны права администратора.Когда я использую это, я не могу сделать это.Я знаю, что это из-за UIPI, сообщение ни от какого процесса не может вызвать процесс повышения.
Итак, в app.manifest я использую
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
После инициализации MainWindow он запускает метод MainWindow ViewModel
private void MetroWindow_Loaded(object sender, RoutedEventArgs e)
{
const uint WM_DROPFILES = 0x233;
const uint WM_COPYDATA = 0x4a;
const uint WM_COPYGLOBALDATA = 0x49;
CHANGEFILTERSTRUCT changeStruct = new CHANGEFILTERSTRUCT();
changeStruct.size = Convert.ToUInt32(Marshal.SizeOf(typeof(CHANGEFILTERSTRUCT)));
ChangeWindowMessageFilter(WM_DROPFILES, MSGFLT_ADD);
ChangeWindowMessageFilter(WM_COPYDATA, MSGFLT_ADD);
ChangeWindowMessageFilter(WM_COPYGLOBALDATA, MSGFLT_ADD);
//bool res1 = ChangeWindowMessageFilterEx((HwndSource.FromVisual(App.Current.MainWindow as MainWindow) as HwndSource).Handle, WM_DROPFILES, ChangeWindowMessageFilterExAction.Allow, ref changeStruct);
//bool res2 = ChangeWindowMessageFilterEx((HwndSource.FromVisual(App.Current.MainWindow as MainWindow) as HwndSource).Handle, WM_COPYGLOBALDATA, ChangeWindowMessageFilterExAction.Allow, ref changeStruct);
//bool res3 = ChangeWindowMessageFilterEx((HwndSource.FromVisual(App.Current.MainWindow as MainWindow) as HwndSource).Handle, WM_COPYDATA, ChangeWindowMessageFilterExAction.Allow, ref changeStruct);
}
public enum MessageFilterInfo : uint
{
None = 0, AlreadyAllowed = 1, AlreadyDisAllowed = 2, AllowedHigher = 3
};
public enum ChangeWindowMessageFilterExAction : uint
{
Reset = 0, Allow = 1, DisAllow = 2
};
[StructLayout(LayoutKind.Sequential)]
public struct CHANGEFILTERSTRUCT
{
public uint size;
public MessageFilterInfo info;
};
[DllImport("user32.dll", SetLastError = true)]
public static extern bool ChangeWindowMessageFilterEx(IntPtr hWnd, uint msg, ChangeWindowMessageFilterExAction action, ref CHANGEFILTERSTRUCT changeInfo);
[DllImport("user32.dll", SetLastError = true)]
public static extern IntPtr ChangeWindowMessageFilter(uint message, uint dwFlag);
Я пытаюсь использовать ChangeWindowMessageFilter и ChangeWindowMessageFilterEx, но все они нене работаетвторой возвращает true, но changeInfo.info - none.
Знаете, что я делаю неправильно?
Заранее спасибо.