作者:梦幻死灵_791 | 来源:互联网 | 2023-10-11 13:29
目前做个小程序,需要监控PPT的播放翻页情况,也就是ppt翻页后通知主程序,我用spy++看了下,ppt翻页的时候有消息,请问下,如何拦截这个消息?(我目前用的方法是用线程读
目前做个小程序, 需要监控 PPT的播放翻页情况, 也就是 ppt翻页后 通知主程序, 我用spy++ 看了下,ppt 翻页的时候 有消息, 请问下,如何拦截这个消息? (我目前用的方法 是用线程读取内存数据, 但是 powerpoint是32位的还好,地址都找到了, 如果是64位的 地址还没抓到, 并且不稳定, 所有想从拦截 消息方面入手,) 学习了几个 hook的例子, 都不成功
12 个解决方案
取得窗口句柄所在线程的ID,因为SetWindowsHOOK要的参数是线程ID
对hook不太懂, 我对着万一的博客中的例子 做全局鼠标钩子 或者键盘钩子 都能拦截, 但是 拦截指定窗体 , 只能拦截本程序, 不能拦截到 ppt的窗体 hook:=setWindowsHookEx(WH_cat,proc,HInstance,0); 或者 hook:=setWindowsHookEx(WH_cat,proc,HInstance,PPPTPid); 都这样,
做全局鼠标钩子 或者键盘钩子才行。应为进程在不同内存空间不能互相访问。
必须注入动态链接库时自己的程序和别的程序共享一个内存块才能从别个程序中获取信息。
Hook窗口过程,WH_CALLWNDPROC这个钩子会勾掉所有消息的处理过程
你也可以直接替换掉窗口过程,拿到处理权限,然后SetWindowLong替换掉窗口过程
如果只是监控翻页情况的话,我觉得你可以换个思路,使用OLE编程,直接调用PowerPoint的相应API不就可以了吗,只搞过EXCEL的,对于Powerpoint的操作没搞过
或者你在Powerpoint里编写一段VB代码,直接把消息传出来也可以的吧
http://download.csdn.net/download/sololie/6271981