Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从用户进程拖放到提升的进程_C#_.net_Windows 7 - Fatal编程技术网

C# 从用户进程拖放到提升的进程

C# 从用户进程拖放到提升的进程,c#,.net,windows-7,C#,.net,Windows 7,我有一个C#应用程序,需要使用runas升级才能运行某些功能。我现在遇到的问题是,我有一个拖放附件的picturebox在runas之后无法工作。我整晚都在看帖子,所以我很熟悉原因。我还发现了很多关于通过过滤器接受这些消息的信息 我还没有发现,我希望有人能帮助我,是如何以及在代码中的何处实现这一点。我一直在尝试各种方法,但我无法让它发挥作用。下面是一段代码,我试图让它正常工作。顺便说一句,我也尝试过对清单中的过滤器进行更改,但也没有成功。提前感谢任何人提供的帮助 public partial c

我有一个C#应用程序,需要使用runas升级才能运行某些功能。我现在遇到的问题是,我有一个拖放附件的picturebox在runas之后无法工作。我整晚都在看帖子,所以我很熟悉原因。我还发现了很多关于通过过滤器接受这些消息的信息

我还没有发现,我希望有人能帮助我,是如何以及在代码中的何处实现这一点。我一直在尝试各种方法,但我无法让它发挥作用。下面是一段代码,我试图让它正常工作。顺便说一句,我也尝试过对清单中的过滤器进行更改,但也没有成功。提前感谢任何人提供的帮助

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;

这是不可能的,也没有解决办法。D+D不能将对象从未提升的进程拖放到提升的进程中。UIPI(UAC的UI组件)防止了这种情况。ChangeWindowMessageFilter()解决方案不起作用,D+D不是基于消息的,它使用COM。WM_DROPFILES可追溯到Windows 3,不再使用


我怀疑某些未来版本的Windows提供了一种变通方法,从Windows 7开始还不可能实现。

这是不可能的,也没有变通方法。D+D不能将对象从未提升的进程拖放到提升的进程中。UIPI(UAC的UI组件)防止了这种情况。ChangeWindowMessageFilter()解决方案不起作用,D+D不是基于消息的,它使用COM。WM_DROPFILES可追溯到Windows 3,不再使用


我怀疑某些未来版本的Windows提供了一种解决方法,但从Windows 7开始还不可能解决这个问题。

以下是我解决这个问题的方法


我在表单中嵌入了一个目录列表和文件列表,并为文件列表设置了一个鼠标单击侦听器。我将其配置为仅显示图像文件,一旦单击图像,它就会设置为picturebox图像。这不是拖放,而是非常接近。最重要的是,无论应用程序的权限级别如何,它都能正常工作。

以下是我如何解决这个问题的


我在表单中嵌入了一个目录列表和文件列表,并为文件列表设置了一个鼠标单击侦听器。我将其配置为仅显示图像文件,一旦单击图像,它就会设置为picturebox图像。这不是拖放,而是非常接近。最重要的是,无论应用程序的权限级别如何,它都能正常工作。

嗨,我不知道完整的答案,但最好检查一下方法ChangeWindowMessageFilter的文档,您正在调用它,但您没有使用它的返回值做任何事情……根据我在研究中发现的,如“ChangeWindowMessageFilter”之类的条目(WM_DROPFILES,MSGFLT_ADD);”是那些指示过滤器允许消息通过的。还有更多?我会继续挖掘。嗨,我不知道完整答案,但最好检查一下方法ChangeWindowMessageFilter的文档,你正在调用它,但你没有对它的返回值做任何事…根据我在研究中发现的,如“ChangeWindowMessageFilter(WM_DROPFILES,MSGFLT_ADD);”是指示筛选器允许消息通过的工具。还有更多?我会继续挖掘。感谢您抽出时间回答我的问题,尽管这不是我希望的结果,但还是投票支持了您。:)感谢您抽出时间回答我的问题,尽管这不是我所希望的,但还是投票支持了您。:)