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);    

   

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

  

目录
相关文章
|
7月前
|
搜索推荐 物联网 异构计算
一张图秒生 LoRA ? Qwen-Image-i2L 诞生记
我们发布了Qwen-Image的“图生LoRA”模型,输入一张图即可端到端生成LoRA权重。通过多阶段迭代,构建了具备细节与风格保持能力的Image-to-LoRA系统,可用于高效LoRA训练初始化,推动个性化生成技术发展。
1479 0
|
10月前
|
机器学习/深度学习 运维 监控
运维日志里的“读心术”:深度学习能看出啥?
运维日志里的“读心术”:深度学习能看出啥?
439 74
|
存储 SQL 数据库
达梦(DM)数据库管理表
达梦(DM)数据库表管理
达梦(DM)数据库管理表
|
监控 数据可视化 BI
服务器监控软件Zabbix
【10月更文挑战第19天】
444 6
|
存储 Linux 项目管理
centos7离线安装harbor
centos7离线安装harbor
677 0
|
机器人 Shell Python
ROS2教程05 ROS2服务
这篇文章是关于ROS2(Robot Operating System 2)服务的教程,涵盖了服务的概念、特性、命令行工具的使用,以及如何编写服务的服务器和客户端代码,并提供了测试服务通信机制的示例。
790 4
ROS2教程05 ROS2服务
|
存储 弹性计算 数据库
2024最新阿里云优惠券领取入口整理、代金券查询方法和使用教程
2024最新阿里云优惠券领取入口整理、代金券查询方法和使用教程。阿里云优惠券是什么?2024年阿里云优惠券领取地址链接和使用方法。阿小云连夜整理阿里云优惠券领取入口,包括领券中心、学生无门槛300元代金券、域名优惠口令、代金券查询和使用方法
2099 7
|
C++ Windows
Windows下编译64位CGAL
Windows下编译64位CGAL
718 0
|
SQL 安全 算法
BugKu CTF(Crypto):Caesar cipher & 抄错的字符 & /.- & 聪明的小羊 & ok
BugKu CTF(Crypto):Caesar cipher & 抄错的字符 & /.- & 聪明的小羊 & ok