Перетаскивание из пользовательского процесса в расширенный процесс - PullRequest
0 голосов
/ 09 марта 2011

У меня есть приложение на C #, которое требует запуска с помощью runas для запуска определенных функций.Проблема, с которой я столкнулся, заключается в том, что окно с картинками, к которому я прикрепил перетаскивание, не работает после выполнения runas.Я читаю посты всю ночь, поэтому я знаю причину.Я также нашел много информации о принятии этих сообщений через фильтр.http://msdn.microsoft.com/en-us/library/ms632675(v=VS.85).aspx

То, что я не нашел, и я надеюсь, что кто-то может помочь мне в этом, как и где в коде реализовать это.Я пробовал разные подходы, и я не могу заставить его работать.Вот фрагмент кода, в котором я попытался заставить это работать.Кстати, я также пытался вносить изменения с помощью фильтра в манифесте, но также не пошел туда.Заранее благодарен за помощь, которую может предложить каждый.

public partial class Form1 : Form
{
    [DllImport("user32.dll", SetLastError = true)]
    static extern IntPtr ChangeWindowMessageFilter(uint message, uint dwFlag);

    public Form1()
    {
        InitializeComponent();
        ChangeWindowMessageFilter(WM_DROPFILES, MSGFLT_ADD);
        ChangeWindowMessageFilter(WM_COPYDATA, MSGFLT_ADD);
        ChangeWindowMessageFilter(0x0049, MSGFLT_ADD);
        GetAndDisplayRights();
    }

    private const uint WM_DROPFILES = 0x233;
    private const uint WM_COPYDATA = 0x004A;
    private const uint WM_COPYGLOBALDATA = 0x0049;
    private const uint MSGFLT_ADD = 1;

Ответы [ 2 ]

5 голосов
/ 09 марта 2011

Это невозможно, и обходного пути для этого тоже нет. D + D не может бросить объект в возвышенный процесс из невыделенного. UIPI (UI-компонент UAC) предотвращает это. Обходной путь ChangeWindowMessageFilter () не работает, D + D не основан на сообщениях, он использует COM. WM_DROPFILES восходит к Windows 3 и больше не используется.

Я подозреваю, что какая-то будущая версия Windows предоставит обходной путь, пока что это невозможно в Windows 7.

0 голосов
/ 11 марта 2011

Вот как я обошел эту проблему.

Я встроил список каталогов и список файлов в свою форму и настроил приемник щелчка мыши для списка файлов. Он настроен на показ только файлов изображений, и как только вы щелкаете изображение, он устанавливается как изображение в виде картинки. Это не перетаскивание, но чертовски близко. Самое главное, он работает независимо от уровня привилегий приложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...