2010-06-27 66 views
1

是否可以继承另一个应用程序的控件,以便我的应用程序可以在另一个应用程序执行代码并接收lParam和wParam之前执行某些操作?例如:记录记事本的编辑控件和用户输入时能够知道用户输入的内容?如果我提供记事本的编辑控件的hWnd,SetWindowSubclass会工作吗?我会收到所有消息的lParam和wParam吗?子类别的另一个应用程序的控制?

谢谢

回答

0

是的,如果您的代码在应用程序的进程中运行,那很容易。你可以用DLL做到这一点。您只需使用带GWLP_WNDPROC的GetWindowLongPtr即可获取应用程序的窗口功能,并使用SetWindowLongPtr来设置您自己的窗口功能。在你的窗口函数中,你检查你想改变的消息,并用改变后的值调用应用程序的窗口函数。如果有其他消息,你必须直接调用它。使用CallWindowProc来调用窗口funcion,因为默认的windows函数不是一个指针。

另一种方法是使用CallWndProc钩子函数。用WH_CALLWNDPROC调用SetWindowsHookEx来安装它。尽管如此,还没有尝试过这个,但你不需要进入这个过程的空间,IIRC。

0

不,不是那么简单。在MSDN page for SetWindowSubclass警告说明确:

警告不能使用子类的辅助功能,以继承跨线程

This article outlines the process一个窗口,把代码注入其他进程,但基本概括,你需要:

  1. 使用CreateRemoteThreadLoadLibrary,或
  2. 搭建AppInit_DLLs注册表项适当

一旦你的代码在远程运行过程中,可以使用SetWindowLongPtr子类的窗口,然后使用普通的IPC技术(命名管道等)与沟通您的过程(如果需要)。

相关问题