3 Stimmen

Drag&Drop vom Explorer zur Run-As-Administrator-Anwendung aktivieren

Ich habe eine Winforms-Anwendung erstellt und eine Drag&Drop-Funktionalität implementiert. Diese Funktionalität funktioniert hervorragend in WinXP oder in Win7 von Run-As-Administrator-Anwendungen.

Das Problem ist, dass es nicht funktioniert, wenn ich von einer Nicht-Admin-Anwendung in Win7 auf mein Programm ziehen will.

Ich verstehe dies, weil das Betriebssystem die Nachrichten filtert. Ich fand eine Lösung für das hier: http://blog.helgeklein.com/2010/03/how-to-enable-drag-and-drop-for.html aber es scheint nicht zu funktionieren.

Hier ist der Code zur Umgehung des Problems:

    [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);

Wie kann das funktionieren?

9voto

Hans Passant Punkte 894572

Ja, Sie kämpfen gegen UIPI, einen Aspekt der UAC, der verhindert, dass Programme ohne Berechtigungsstufe die Ressourcen eines Programms mit Berechtigungsstufe an sich reißen. Und ja, ChangeWindowMessageFilter() erlaubt es Ihnen, diese Einschränkung für Windows-Nachrichten zu umgehen.

OLE-Drag and Drop verwendet jedoch keine Windows-Nachrichten. Es verwendet Rückrufe, lesen Sie die Dokumentationen für RegisterDragDrop() für Details. Dieser Microsoftie Blogbeitrag sagt Ihnen, dass Sie aufgeschmissen sind, obwohl es die Tür für CWMF öffnet. Wie man eine WM_DROPFILES-Meldung erhält, ist mir allerdings völlig unklar. Die Verwendung von DragAcceptFiles() in einer Windows Forms-Beispielanwendung hatte keinen erkennbaren Effekt.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X