Win7下的DragDrop事件不触发?

简介:   Win7与原来的XP和Win2003相比,安全控制方面更严格。比如,当我们以administrator登陆XP或Win2003时,运行所有的程序即是以管理员的身份启动的。但当以administrator登陆Win7时,通常状态下,运行普通程序是以普通用户的身份启动的。

  Win7与原来的XP和Win2003相比,安全控制方面更严格。比如,当我们以administrator登陆XP或Win2003时,运行所有的程序即是以管理员的身份启动的。但当以administrator登陆Win7时,通常状态下,运行普通程序是以普通用户的身份启动的。当我们的WinForm应用程序需要以管理员的身份运行时(比如,为了访问windows注册表),我们需要在程序清单(app.manifest文件)中将UAC选项改为"requireAdministrator"(可以参考如何自动以管理员身份运行.NET程序?)。如此生成的exe的图标在XP和Win2003下是没有变化的,但是放到win7下面,你会发现图标的右下角多了一个小盾牌,如下图:

  

  如果同时你的应用程序需要从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);    

   

  如果有更好的方法,请留言。

  

目录
相关文章
|
6月前
|
搜索推荐 物联网 异构计算
一张图秒生 LoRA ? Qwen-Image-i2L 诞生记
我们发布了Qwen-Image的“图生LoRA”模型,输入一张图即可端到端生成LoRA权重。通过多阶段迭代,构建了具备细节与风格保持能力的Image-to-LoRA系统,可用于高效LoRA训练初始化,推动个性化生成技术发展。
1290 0
|
存储 SQL 数据库
达梦(DM)数据库管理表
达梦(DM)数据库表管理
达梦(DM)数据库管理表
|
监控 数据可视化 BI
服务器监控软件Zabbix
【10月更文挑战第19天】
434 6
|
存储 Linux 项目管理
centos7离线安装harbor
centos7离线安装harbor
668 0
|
C++ Windows
Windows下编译64位CGAL
Windows下编译64位CGAL
711 0
|
缓存 数据可视化 数据安全/隐私保护
Mac 系统占用100G+解决办法(详细步骤)
Mac 系统占用100G+解决办法(详细步骤)
4160 32
|
安全 关系型数据库 MySQL
怎么在 window 系统里本地安装 mysql
怎么在 window 系统里本地安装 mysql
287 0
怎么在 window 系统里本地安装 mysql
|
机器学习/深度学习 存储 网络协议
TCP 拥塞控制详解 | 3. 设计空间(上)
TCP 拥塞控制详解 | 3. 设计空间(上)
1249 0
TCP 拥塞控制详解 | 3. 设计空间(上)
|
存储 NoSQL 容灾
达梦数据库:第一章:MySQL数据库与达梦数据库的区别
达梦数据库:第一章:MySQL数据库与达梦数据库的区别
3077 0