2010-09-25 2 views
3

Я создал приложение winforms и реализовал функцию перетаскивания &. эта функциональность отлично работает в WinXP или в Win7 от приложений Run-As-Administrator.Включить перетаскивание из браузера в приложение Run-As-Administrator

Проблемы возникают при перетаскивании из приложения, отличного от admin в Win7, в мою программу, он просто не работает.

Я понимаю это потому, что ОС фильтрует сообщения. Я нашел решение для этого здесь: http://blog.helgeklein.com/2010/03/how-to-enable-drag-and-drop-for.html, но он не работает.

здесь код обходной путь:

[DllImport("user32.dll", SetLastError = true)] 
    static extern bool ChangeWindowMessageFilter(uint message, uint dwFlag); 

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

    ChangeWindowMessageFilter(WM_DROPFILES, MSGFLT_ADD); 
    ChangeWindowMessageFilter(WM_COPYDATA, MSGFLT_ADD); 
    ChangeWindowMessageFilter(WM_COPYGLOBALDATA, MSGFLT_ADD); 

Как заставить его работать?

ответ

7

Да, вы сражаетесь с UIPI, аспектом UAC, который предотвращает захват невоспроизводимыми программами ресурсов повышенного уровня. И да, ChangeWindowMessageFilter() позволяет обойти это ограничение для сообщений Windows.

Однако перетаскивание OLE не использует сообщения Windows. Он использует обратные вызовы, для просмотра документов для RegisterDragDrop(). Это microsoftie blog post говорит вам, что вы ввернуты, хотя он открывает дверь для CWMF. Однако, как получить сообщение WM_DROPFILES, для меня совершенно непонятно. Использование DragAcceptFiles() в образце приложения Windows Forms не имело заметного эффекта.

+3

Эпический провал со стороны Microsoft. Им нужно переосмыслить свой дизайн ОС, чтобы старые программы продолжали работать, поскольку они утверждают, что они должны. У меня есть приложение, которое должно получить доступ к файлам в качестве администратора, и использует перетаскивание в качестве основного режима взаимодействия для работы с файлами, и в основном они говорят «слишком плохо, он больше не будет работать», по крайней мере, не с Explorer , Лучшим решением проблемы является, вероятно, удаление Explorer из уравнения с помощью альтернативного браузера файлов, который можно повысить, поскольку неспособность Explorer быть легко поднятой - это то, что мешает дизайну работать. – Triynko