Win8管理员启动的程序不响应拖拽消息的处理

2024-06-23 17:18

本文主要是介绍Win8管理员启动的程序不响应拖拽消息的处理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

首先,这是一个权限问题,简单理解低权限的拖拽被管理员权限的程序拒绝了~~~所以我们需要告诉这个以管理员权限启动的进程,我们需要这个消息,即使是它来自较低权限的消息,系统Api为我们提供了解决办法~~一个过滤消息的API,(微软Vista系统之后的版本有的API)


BOOL WINAPI ChangeWindowMessageFilterEx(
  __in HWND hWnd,
  __in UINT message,
  __in DWORD action,
  __inout_opt PCHANGEFILTERSTRUCT pChangeFilterStruct
  );

参数编辑

hWnd
要修改其 UIPI 消息过滤器的窗口句柄。
message
要允许或阻止通过消息过滤器的消息。
action
要执行的操作,可以采取下列值之一:
MSGFLT_ALLOW 允许消息通过过滤器。允许窗口接收该消息,不管源消息是什么,甚至它来自一个低特权的进程。
MSGFLT_DISALLOW 如果消息来自低特权的进程,阻止它转递给窗口。
MSGFLT_RESET 为窗口重置消息过滤器为默认,任何全局允许消息或进程范围内的将通过。但不包含这两个类别,其中其中来自低特权的进程将被阻塞。
pChangeFilterStruct
  
  指向CHANGEFILTERSTRUCT结构指针的可选项。
返回值
如果函数成功,则返回值为非零值。
如果该函数失败,则返回值为零。要获取扩展的错误的信息,请调用GetLastError .
//=======================================================================、、

百度在这里解释的很清楚,所以我就直接拷贝过来了,但是,当我去试图用这个APi过滤拖拽的时候,并没有起到应该有的效果,原来,要过滤这个拖拽消息,需要同时过滤包括拖拽消息在内的3个消息分别是:

WM_DROPFILES

WM_COPYDATA

0x0049

同时过滤这三个消息才能达到我们需要的效果,而且,需要注意的是,这个API需要我们动态的加载如:

1.在头文件内申明一个函数指针

  typedef BOOL (WINAPI *LPFUNC)(HWND,UINT,DWORD,PCHANGEFILTERSTRUCT); 

2.在需要过滤的敌法加载模块(这个函数在模块user32.dll内),并且找到函数在模块内的地址

HMODULE hLib = ::LoadLibraryA("user32.dll");if (hLib){LPFUNC func = (LPFUNC)GetProcAddress(hLib, "ChangeWindowMessageFilterEx");if (func){func(HWND,WM_DROPFILES, 1,NULL);func(HWND,WM_COPYDATA, 1,NULL);func(pFrame->GetHWND(),0x0049, 1,NULL);}}

至此,我们高权限的进程窗口也能接受较低权限的消息了





这篇关于Win8管理员启动的程序不响应拖拽消息的处理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/1087778

相关文章

Spring Boot 中的默认异常处理机制及执行流程

《SpringBoot中的默认异常处理机制及执行流程》SpringBoot内置BasicErrorController,自动处理异常并生成HTML/JSON响应,支持自定义错误路径、配置及扩展,如... 目录Spring Boot 异常处理机制详解默认错误页面功能自动异常转换机制错误属性配置选项默认错误处理

SpringBoot 异常处理/自定义格式校验的问题实例详解

《SpringBoot异常处理/自定义格式校验的问题实例详解》文章探讨SpringBoot中自定义注解校验问题,区分参数级与类级约束触发的异常类型,建议通过@RestControllerAdvice... 目录1. 问题简要描述2. 异常触发1) 参数级别约束2) 类级别约束3. 异常处理1) 字段级别约束

RabbitMQ消息总线方式刷新配置服务全过程

《RabbitMQ消息总线方式刷新配置服务全过程》SpringCloudBus通过消息总线与MQ实现微服务配置统一刷新,结合GitWebhooks自动触发更新,避免手动重启,提升效率与可靠性,适用于配... 目录前言介绍环境准备代码示例测试验证总结前言介绍在微服务架构中,为了更方便的向微服务实例广播消息,

Java堆转储文件之1.6G大文件处理完整指南

《Java堆转储文件之1.6G大文件处理完整指南》堆转储文件是优化、分析内存消耗的重要工具,:本文主要介绍Java堆转储文件之1.6G大文件处理的相关资料,文中通过代码介绍的非常详细,需要的朋友可... 目录前言文件为什么这么大?如何处理这个文件?分析文件内容(推荐)删除文件(如果不需要)查看错误来源如何避

使用Python构建一个高效的日志处理系统

《使用Python构建一个高效的日志处理系统》这篇文章主要为大家详细讲解了如何使用Python开发一个专业的日志分析工具,能够自动化处理、分析和可视化各类日志文件,大幅提升运维效率,需要的可以了解下... 目录环境准备工具功能概述完整代码实现代码深度解析1. 类设计与初始化2. 日志解析核心逻辑3. 文件处

Java docx4j高效处理Word文档的实战指南

《Javadocx4j高效处理Word文档的实战指南》对于需要在Java应用程序中生成、修改或处理Word文档的开发者来说,docx4j是一个强大而专业的选择,下面我们就来看看docx4j的具体使用... 目录引言一、环境准备与基础配置1.1 Maven依赖配置1.2 初始化测试类二、增强版文档操作示例2.

MyBatis-Plus通用中等、大量数据分批查询和处理方法

《MyBatis-Plus通用中等、大量数据分批查询和处理方法》文章介绍MyBatis-Plus分页查询处理,通过函数式接口与Lambda表达式实现通用逻辑,方法抽象但功能强大,建议扩展分批处理及流式... 目录函数式接口获取分页数据接口数据处理接口通用逻辑工具类使用方法简单查询自定义查询方法总结函数式接口

SpringBoot结合Docker进行容器化处理指南

《SpringBoot结合Docker进行容器化处理指南》在当今快速发展的软件工程领域,SpringBoot和Docker已经成为现代Java开发者的必备工具,本文将深入讲解如何将一个SpringBo... 目录前言一、为什么选择 Spring Bootjavascript + docker1. 快速部署与

golang程序打包成脚本部署到Linux系统方式

《golang程序打包成脚本部署到Linux系统方式》Golang程序通过本地编译(设置GOOS为linux生成无后缀二进制文件),上传至Linux服务器后赋权执行,使用nohup命令实现后台运行,完... 目录本地编译golang程序上传Golang二进制文件到linux服务器总结本地编译Golang程序

使用Docker构建Python Flask程序的详细教程

《使用Docker构建PythonFlask程序的详细教程》在当今的软件开发领域,容器化技术正变得越来越流行,而Docker无疑是其中的佼佼者,本文我们就来聊聊如何使用Docker构建一个简单的Py... 目录引言一、准备工作二、创建 Flask 应用程序三、创建 dockerfile四、构建 Docker