win7下不能收到窗口hook消息的问题

win7下由于UIPI的限制, 高权限进程无法收到底权限进程发来的消息, 因此对窗口消息hook时无法接收到消息,解决办法是在调用SetWindowsHookEx之前先调用ChangeWindowMessageFilterEx, 该函数修改指定窗口的UIPI消息过滤设置。 原型如下:

BOOL WINAPI ChangeWindowMessageFilterEx(        HWND hWnd,         UINT message,         DWORD action,         PCHANGEFILTERSTRUCT pChangeFilterStruct);第一个参数要改变设置的窗口句构, 第二个参数要过滤的消息, 第三个参数要执行的动作, 第四个参数指向一个CHANGEFILTERESTRUCT结构。该结构用于返回修改结果。 另外ChangeWindowMessageFilterEx在需要从user32中导出, 如下:BOOL CallChangeWindowMessageFilter(HWND hWnd, UINT nMsg, DWORD dwAction, PCHANGEFILTERSTRUCT chfit)
{
 typedef BOOL (WINAPI *LPFUNC)(HWND, UINT, DWORD, PCHANGEFILTERSTRUCT);

 HMODULE hLib = LoadLibraryA("user32.dll");

 if (hLib)
 {
  LPFUNC func = (LPFUNC)GetProcAddress(hLib, "ChangeWindowMessageFilterEx");
  
  if (func && chfit)
   return func(hWnd, nMsg, dwAction, chfit);
 }

 return FALSE;
}如果要设置一个窗口消息构子可以这样调:CHANGEFILTERSTRUCT chfit = { sizeof(CHANGEFILTERSTRUCT) };
CallChangeWindowMessageFilter(hWnd, WM_COPYDATA, MSGFLT_ALLOW, &chfit);g_hhookCBTMsg = SetWindowsHookExW(WH_CBT ,CBTProc, hDLL, 0);这样你的进程就可以获取来自底权限进程的消息。

时间: 2024-10-02 04:31:14

win7下不能收到窗口hook消息的问题的相关文章

vc++-win7下置顶窗口,为什么经常失效?如何解决 ?

问题描述 win7下置顶窗口,为什么经常失效?如何解决 ? win7下使用SetWindowPos(&wndTopMost,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE)置顶窗口,为什么经常失效?如何解决 ?xp下没这个问题. 解决方案 失效,是不是窗口置顶被其它程序抢占了改了.还有可以用桌面窗口做父窗口,设置悬浮窗类似方式. 解决方案二: 我也怀疑是这样,就是不知道xp为什么不会被抢,win7就会,是不是win7有什么特定的设置 解决方案三: 这是uiAccess搞的鬼,w7还是

Win7下QQ或MSN来消息时播放器声音变小?

  使用windows7的用户发现这么个问题,在看电影或是听音乐的时候,如果QQ或msn来消息的话,电影或音乐的音量就会突然变小,使得qq提示音显得格外刺耳. 实际上,这是windows7的一个新的功能设计,用意就是避免用户太沉浸于音乐或电影当中而忽略了其他信息.用户对这个比较人性化的设计褒贬不一,如果不需要,我们可以通过设置,把这项功能去掉. 设置方法如下: 鼠标右键单击系统托盘上的喇叭图标,弹出菜单中选择"声音(sound)",打开"声音"窗口,切换到"

win7系统下任务栏窗口无法显示缩略图的解决方法

  win7系统一直是微软公司推出的所有系统中口碑最好的一个,因为里面的一些功能都很具有实用性,是用户日常生活中经常会遇到的,比如说win7系统中有个缩略图功能,只要鼠标移到下方任务栏窗口中,就会看到缩略图中的内容,对于有需要的用户来说是很方便的,一直用习惯这个功能的小伙伴们都很依赖这个,每次鼠标移到这个桌面下方都会下意识的去看下.但是最近有用户反映说这个功能不见了,下面小编就来教大家win7旗舰版电脑下方任务栏窗口的缩略图不见了怎么办. win7系统下任务栏窗口无法显示缩略图的解决方法 第一步

udp通信 接收不到包-win7 下进行UDP通信测试发现UDP服务器无法接收到CLIENT的发送数据这是啥原因?

问题描述 win7 下进行UDP通信测试发现UDP服务器无法接收到CLIENT的发送数据这是啥原因? 进行UDP数据通信的时候,UDP的客户端用WIRESHARK抓包,能很明显的看到数据发出来了,数据格式也是正确的,但是服务那边的就是接受不到数据,接受卡在接受哪里不动了.查看防火墙,防火墙也是关了的:该程序在WINXP下通信都是正确的,哪位大侠能给下解决方案?总觉得是WIN7在哪里设置有问题:另外我查看QQ的设置,开放该应用程序的UDP协议为开放所有协议,还是不行. 解决方案 WIN7下UDP需

win7下cmd MSG/SERVER指令局域网消息传输

问题描述 win7下cmd MSG/SERVER指令局域网消息传输 家里有两台电脑都是win7的在同一个局域网内,突发奇想想试试原来的net send指令相互发送消息.上网查证后发现win7后变成了msg/server.于是开始搞.但是按照网上大神的步骤后始终只能从台式机子发消息给笔记本(笔记本wifi链接的wlan)但是笔记本不能发消息给台式机子始终显示获取会话名称时的错误5.于是我打开了wireshark抓包发现如下(台式192.168.0.100,笔记本192.168.0.105)两个抓包

win7下搭建nginx+php的开发环境

  在win7下用的是IIS做web服务器,但近来因项目需求的原因,需要在服务器遇到404错误的时候自动做转向(不是在客户端的跳转,而是在服务器收到客户端请求去某目录下读取文件返回时,如果发现目录或目录下文件不存在,自动转到另一个服务器去取),用IIS发现很难做到这点,于是决定搭建nginx的开发环境,通过配置实现这一点. 首先,google nginx和php,分别到他们的官网把最新版本的下载回来,我当时下的PHP是5.4.3的版本,nginx是1.5.2,我把他们都放在D盘下一个叫webse

眼见为实(2):介绍Windows的窗口、消息、子类化和超类化

眼见为实(2):介绍Windows的窗口.消息.子类化和超类化 这篇文章本来只是想介绍一下子类化和超类化这两个比较"生僻"的名词.为了叙述的完整性而讨论了Windows的窗口和消息,也简要讨论了进程和线程.子类化(Subclassing)和超类化(Superclassing)是伴随Windows窗口机制而产生的两个复用代码的方法.不要把"子类化.超类化"与面向对象语言中的派生类.基类混淆起来."子类化.超类化"中的"类"是指W

WinMain函数 注册窗口类 消息循环

#include <windows.h>#pragma comment(lib,"winmm.lib")//为了要播放声音,必须导入这个库 LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM); int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,PSTR szCmdLine, int iCmdShow)/* HINSTANCE 类型的含义为实

win7下硬盘安装win7+CentOS双系统方法

原文:win7下硬盘安装win7+CentOS双系统方法 LinuxCentOS安装大致介绍: win7下硬盘安装win7+CentOS双系统方法 原则: 所有的看完在装,请仔细看 一 条件: 1. 系统选择 CentOS-6.5-i386-bin-DVD1.iso (32位) 或者 64位的 要装64位的直接看附录 2. 引导软件     easyBCD 软件(<10MB的小软件) WinGrub软件(<10MB的小软件) 3. 磁盘要求     扩展分区中留出一个空盘设置成为FAT32格式