Win7下的DragDrop事件不触发?
时间:2011-01-22 来源:zhuweisky
如果同时你的应用程序需要从windows资源管理器拖动文件到你的WinForm上,你会发现原本在XP和Win2003下运行很正常的程序,结果到了win7下就不支持拖拽了,DragEnter/DragOver/DragDrop等事件统统都不被触发。
是什么原因导致这个问题了?
这是因为windows规定:当拖放源与目标运行的安全级别(隔离级别)不一致时,是禁止拖放的。即,我们的windows资源管理器是以普通用户的身份运行的,而此时我们的应用程序是以管理员身份运行的,两个安全级别不一样,所以不能拖放了。而在XP和Win2003,我们本来就是以管理员登陆的,资源管理器和我们的应用程序都是以管理员身份运行的,所以拖放就是正常工作的。
如何解决Win7下这个拖拽的问题了?
(1)方法一,修改你的应用程序,使之能以普通用户的身份正常运行;
(2)方法二,调整程序结构,把界面部分做成普通权限启动,后台再做一个服务来运行高安全性的操作,两者可以通过类似Remoting的技术来通信。
(3)方法三,修改Windows的MessageFilter,像下面这样:
[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;
ChangeWindowMessageFilter(WM_DROPFILES, MSGFLT_ADD);
ChangeWindowMessageFilter(WM_COPYDATA, MSGFLT_ADD);
ChangeWindowMessageFilter(0x0049, MSGFLT_ADD);
如果有更好的方法,请留言。
相关阅读 更多 +