C++ 另一个应用程序的子类';谁来控制?

C++ 另一个应用程序的子类';谁来控制?,c++,c,winapi,C++,C,Winapi,是否可以对另一个应用程序的控件进行子类化,以便在另一个应用程序执行其代码并接收LPRAM和wParam之前,我的应用程序可以执行某些操作?例如:对记事本的编辑控件进行子类化,当用户键入时,能够知道用户键入了什么?如果我提供记事本编辑控件的hWnd,SetWindowsSubClass是否可以工作?我会收到它所有消息的lParam和wParam吗 谢谢不,没那么简单。屏幕上的警告明确表示: 警告不能使用子类化助手函数跨线程对窗口子类化 为了将代码注入到另一个流程中,但概括起来,您基本上需要: 使用

是否可以对另一个应用程序的控件进行子类化,以便在另一个应用程序执行其代码并接收LPRAM和wParam之前,我的应用程序可以执行某些操作?例如:对记事本的编辑控件进行子类化,当用户键入时,能够知道用户键入了什么?如果我提供记事本编辑控件的hWnd,SetWindowsSubClass是否可以工作?我会收到它所有消息的lParam和wParam吗


谢谢

不,没那么简单。屏幕上的警告明确表示:

警告不能使用子类化助手函数跨线程对窗口子类化

为了将代码注入到另一个流程中,但概括起来,您基本上需要:

  • 使用
    CreateRemoteThread
    LoadLibrary
    ,或
  • 适当设置AppInit_DLL注册表项

  • 在远程进程中运行代码后,您可以使用
    SetWindowLongPtr
    对窗口进行子类化,然后使用常规IPC技术(命名管道等)与进程通信(如果需要)。

    是的,如果您的代码在应用程序进程中运行,这很容易实现。您可以使用DLL来实现这一点。您只需与GWLP_WNDPROC一起使用即可获得应用程序的窗口函数,并使用设置自己的窗口函数。在窗口函数中,检查要更改的消息,并使用更改后的值调用应用程序的窗口函数。如果有其他消息,你必须直说。用于调用窗口函数,因为默认窗口函数不是指针

    另一种方法是使用hook函数。使用WH_CALLWNDPROC调用以安装它。虽然还没有试过这个,但是你不需要进入流程的空间,IIRC