none
c# 以管理员身份运行是 dragdrop事件没有触发,请问如何解决? RRS feed

  • 问题

  • app.manifest中通过下面方法设置了管理员身份运行。

    <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />

    但DragEnter DragDrop事件没有触发,

    private void Form1_DragEnter(object sender, System.Windows.Forms.DragEventArgs e)
            {
                   
                if (e.Data.GetDataPresent(DataFormats.FileDrop))
                    e.Effect = DragDropEffects.Link;
                else e.Effect = DragDropEffects.None;
                    
            }

            private void Form1_DragDrop(object sender, System.Windows.Forms.DragEventArgs e)
            {
                String sSourceFile = ((System.Array)e.Data.GetData(DataFormats.FileDrop)).GetValue(0).ToString();
            }

    查了相关资料,用了下面方法还是不行

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

            uint WM_DROPFILES = 0x0233;
            uint WM_COPYDATA = 0x4A;
            uint MSGFLT_ADD = 1;

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

     

    2011年11月1日 9:17

答案

  • 无法解决。By Design。因为不同权限提升级别的程序之间无法共享拖放消息。您可以做一个简单的实验。用管理员运行记事本,然后从 Windows 资源管理器拖 TXT 文件进去,可以发现文件根本不会打开。因为 Windows Explorer 的权限提升级别为 InvokeAsUser,而不是 RequireAdministrator。

    同样级别的权限提升账户运行的程序可以 Share 拖放。

    如果不涉及到系统的资源,如拖文件。自己程序内的拖动与 UAC 的级别无关。


    Mark Zhou
    • 已标记为答案 VCResearch 2011年11月5日 15:59
    2011年11月2日 8:28

全部回复

  • 没有人懂吗?

    2011年11月2日 5:35
  • 无法解决。By Design。因为不同权限提升级别的程序之间无法共享拖放消息。您可以做一个简单的实验。用管理员运行记事本,然后从 Windows 资源管理器拖 TXT 文件进去,可以发现文件根本不会打开。因为 Windows Explorer 的权限提升级别为 InvokeAsUser,而不是 RequireAdministrator。

    同样级别的权限提升账户运行的程序可以 Share 拖放。

    如果不涉及到系统的资源,如拖文件。自己程序内的拖动与 UAC 的级别无关。


    Mark Zhou
    • 已标记为答案 VCResearch 2011年11月5日 15:59
    2011年11月2日 8:28
  • 你不会可以不回答,请不要说无法解决。任何问题都有解决方案。
    2021年6月2日 10:08