gpt4 book ai didi

c++ - 如何检测另一个进程中弹出的消息框?

转载 作者:太空狗 更新时间:2023-10-29 20:32:07 27 4
gpt4 key购买 nike

每当(任何!)消息框(由 MessageBox Function 产生)在另一个进程中显示时,我想执行一些代码。我没有启动我正在监视的进程。

我可以想到三种方法:

  1. 安装全局 CBT Hook每当在桌面上创建一个窗口时,它都会告诉我这个过程。然后,检查窗口是否属于我正在监视的进程,类名是否为#32770(根据MSDN 的About Window Classes 页面,这是对话框的类名)。这可能会起作用,但它会将包含 Hook 过程的 DLL 拉到桌面上的几乎每个进程中,并且 Hook 过程会被调用很多次。闻起来像是潜在的性能问题。
  2. 尝试子类化 #32770 系统窗口类(这可能吗?)并在我的自定义窗口过程中查找 WM_CREATE 消息。
  3. 拦截MessageBox Function API 调用(即使远程进程已经在运行!)并从 Hook 函数调用我的代码。

到目前为止,我只知道第一种思路是可行的,但看起来确实效率低下。有人能想出比这个问题更简单的解决方案吗?

最佳答案

我想不出任何不涉及将代码注入(inject)其他进程的有效解决方案(顺便说一下,这基本上是许多类型的 Hook 所做的)。但如果您愿意沿着这条路走下去,您可以拦截对 MessageBox 的调用。

花一些时间在调试器中以汇编语言模式单步执行对 MessageBox 的调用,您会发现这是通过查找表的间接调用(这就是导出的工作方式)。因此,如果您可以让您的代码进入流程,您可以修补该表以跳转到您的代码。

参见 http://www.codeproject.com/KB/threads/completeinject.aspx用于显示如何将 dll 注入(inject)另一个进程的代码。

关于c++ - 如何检测另一个进程中弹出的消息框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2471591/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com