C# 从用户进程拖放到提升的进程
我有一个C#应用程序,需要使用runas升级才能运行某些功能。我现在遇到的问题是,我有一个拖放附件的picturebox在runas之后无法工作。我整晚都在看帖子,所以我很熟悉原因。我还发现了很多关于通过过滤器接受这些消息的信息 我还没有发现,我希望有人能帮助我,是如何以及在代码中的何处实现这一点。我一直在尝试各种方法,但我无法让它发挥作用。下面是一段代码,我试图让它正常工作。顺便说一句,我也尝试过对清单中的过滤器进行更改,但也没有成功。提前感谢任何人提供的帮助C# 从用户进程拖放到提升的进程,c#,.net,windows-7,C#,.net,Windows 7,我有一个C#应用程序,需要使用runas升级才能运行某些功能。我现在遇到的问题是,我有一个拖放附件的picturebox在runas之后无法工作。我整晚都在看帖子,所以我很熟悉原因。我还发现了很多关于通过过滤器接受这些消息的信息 我还没有发现,我希望有人能帮助我,是如何以及在代码中的何处实现这一点。我一直在尝试各种方法,但我无法让它发挥作用。下面是一段代码,我试图让它正常工作。顺便说一句,我也尝试过对清单中的过滤器进行更改,但也没有成功。提前感谢任何人提供的帮助 public partial c
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);”是指示筛选器允许消息通过的工具。还有更多?我会继续挖掘。感谢您抽出时间回答我的问题,尽管这不是我希望的结果,但还是投票支持了您。:)感谢您抽出时间回答我的问题,尽管这不是我所希望的,但还是投票支持了您。:)