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

相关文章

前端原生js实现拖拽排课效果实例

《前端原生js实现拖拽排课效果实例》:本文主要介绍如何实现一个简单的课程表拖拽功能,通过HTML、CSS和JavaScript的配合,我们实现了课程项的拖拽、放置和显示功能,文中通过实例代码介绍的... 目录1. 效果展示2. 效果分析2.1 关键点2.2 实现方法3. 代码实现3.1 html部分3.2

Android里面的Service种类以及启动方式

《Android里面的Service种类以及启动方式》Android中的Service分为前台服务和后台服务,前台服务需要亮身份牌并显示通知,后台服务则有启动方式选择,包括startService和b... 目录一句话总结:一、Service 的两种类型:1. 前台服务(必须亮身份牌)2. 后台服务(偷偷干

在不同系统间迁移Python程序的方法与教程

《在不同系统间迁移Python程序的方法与教程》本文介绍了几种将Windows上编写的Python程序迁移到Linux服务器上的方法,包括使用虚拟环境和依赖冻结、容器化技术(如Docker)、使用An... 目录使用虚拟环境和依赖冻结1. 创建虚拟环境2. 冻结依赖使用容器化技术(如 docker)1. 创

使用C++将处理后的信号保存为PNG和TIFF格式

《使用C++将处理后的信号保存为PNG和TIFF格式》在信号处理领域,我们常常需要将处理结果以图像的形式保存下来,方便后续分析和展示,C++提供了多种库来处理图像数据,本文将介绍如何使用stb_ima... 目录1. PNG格式保存使用stb_imagephp_write库1.1 安装和包含库1.2 代码解

Windows设置nginx启动端口的方法

《Windows设置nginx启动端口的方法》在服务器配置与开发过程中,nginx作为一款高效的HTTP和反向代理服务器,被广泛应用,而在Windows系统中,合理设置nginx的启动端口,是确保其正... 目录一、为什么要设置 nginx 启动端口二、设置步骤三、常见问题及解决一、为什么要设置 nginx

springboot启动流程过程

《springboot启动流程过程》SpringBoot简化了Spring框架的使用,通过创建`SpringApplication`对象,判断应用类型并设置初始化器和监听器,在`run`方法中,读取配... 目录springboot启动流程springboot程序启动入口1.创建SpringApplicat

树莓派启动python的实现方法

《树莓派启动python的实现方法》本文主要介绍了树莓派启动python的实现方法,文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录一、RASPBerry系统设置二、使用sandroidsh连接上开发板Raspberry Pi三、运

SpringBoot定制JSON响应数据的实现

《SpringBoot定制JSON响应数据的实现》本文主要介绍了SpringBoot定制JSON响应数据的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们... 目录前言一、如何使用@jsonView这个注解?二、应用场景三、实战案例注解方式编程方式总结 前言

C#使用DeepSeek API实现自然语言处理,文本分类和情感分析

《C#使用DeepSeekAPI实现自然语言处理,文本分类和情感分析》在C#中使用DeepSeekAPI可以实现多种功能,例如自然语言处理、文本分类、情感分析等,本文主要为大家介绍了具体实现步骤,... 目录准备工作文本生成文本分类问答系统代码生成翻译功能文本摘要文本校对图像描述生成总结在C#中使用Deep

Spring Boot 整合 ShedLock 处理定时任务重复执行的问题小结

《SpringBoot整合ShedLock处理定时任务重复执行的问题小结》ShedLock是解决分布式系统中定时任务重复执行问题的Java库,通过在数据库中加锁,确保只有一个节点在指定时间执行... 目录前言什么是 ShedLock?ShedLock 的工作原理:定时任务重复执行China编程的问题使用 Shed