是否可以子类化另一个应用程序的控件,以便我的应用程序可以在另一个应用程序执行其代码并接收 lParam 和 wParam 之前执行某些操作?例如:子类化记事本的编辑控件,当用户键入时,能够知道用户键入的内容?如果我提供记事本编辑控件的 hWnd,SetWindowSubclass 会工作吗?我会收到所有消息的 lParam 和 wParam 吗?
谢谢
最佳答案
是的,如果您的代码在应用程序的进程中运行,那么这很容易实现。您可以使用 DLL 来做到这一点。您只需使用 GetWindowLongPtr使用 GWLP_WNDPROC 获取应用程序的窗口函数,并使用 SetWindowLongPtr设置你自己的。在窗口函数中,您检查要更改的消息,并使用更改后的值调用应用程序的窗口函数。如果有任何其他消息,您必须直接调用。使用CallWindowProc调用窗口函数,因为默认的窗口函数不是指针。
另一种方法是使用 CallWndProc钩子(Hook)函数。调用SetWindowsHookEx使用 WH_CALLWNDPROC 来安装它。虽然还没有尝试过这个,但你不需要在进程的空间中,IIRC。
关于c++ - 子类化另一个应用程序的控件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3129375/