加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 启用从资源管理器拖放到Run-As-Administrator应用程序

发布时间:2020-12-16 01:38:21 所属栏目:百科 来源:网络整理
导读:我构建了一个 winforms应用程序,并实现了拖放功能.此功能在WinXP或Win7中从Run-As-Administrator应用程序中运行良好. 当从Win7中的非管理应用程序拖动到我的程序时,问题就变成了,它只是不起作用. 我理解这一点是因为OS过滤了消息.我在这里找到了一个解决方案
我构建了一个 winforms应用程序,并实现了拖放功能.此功能在WinXP或Win7中从Run-As-Administrator应用程序中运行良好.

当从Win7中的非管理应用程序拖动到我的程序时,问题就变成了,它只是不起作用.

我理解这一点是因为OS过滤了消息.我在这里找到了一个解决方案: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);

如何使它工作?

解决方法

是的,你正在与UIPI作斗争,这是UAC的一个方面,可以阻止未经加工的程序劫持高架程序的资源.是的,ChangeWindowMessageFilter()允许您绕过Windows邮件的此限制.

但是,OLE拖放不使用Windows消息.它使用回调,查看RegisterDragDrop()的文档以获取详细信息.这个微软blog post告诉你,虽然它打开了CWMF的大门,但你已经搞砸了.但是,如何获取WM_DROPFILES消息对我来说完全不清楚.在示例Windows窗体应用程序中使用DragAcceptFiles()没有明显的效果.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读