DxC*_*xCK 3 .net c# uac drag-and-drop windows-7
我构建了一个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);
Run Code Online (Sandbox Code Playgroud)
如何使它工作?
是的,你正在与UIPI作斗争,这是UAC的一个方面,可以防止未经加工的程序劫持高架程序的资源.是的,ChangeWindowMessageFilter()允许您绕过Windows邮件的此限制.
但是,OLE拖放不使用Windows消息.它使用回调,查看RegisterDragDrop()的文档以获取详细信息.这个微软的博客文章告诉你,虽然它打开了CWMF的大门,但你已经搞砸了.但是,如何获取WM_DROPFILES消息对我来说完全不清楚.在示例Windows窗体应用程序中使用DragAcceptFiles()没有明显的效果.
归档时间: |
|
查看次数: |
5658 次 |
最近记录: |