2010-06-27 5 views
1

Можно ли подклассифицировать контроль другого приложения, чтобы мое приложение могло что-то сделать до того, как другое приложение выполнит его код и получит lParam и wParam? Ex: подклассифицировать блок управления Notepad и когда пользователь вводит данные, имея возможность узнать, что пользователь набрал? будет ли работать SetWindowSubclass, если я предоставил hWnd элемента управления редактированием Notepad? И я получу lParam и wParam из всех его сообщений?Подкласс контроля другого приложения?

Thanks

ответ

0

Да, это легко возможно, если ваш код работает в процессе приложения. Вы можете сделать это с помощью DLL. Вы просто используете GetWindowLongPtr с GWLP_WNDPROC, чтобы получить функцию окна приложения, и используйте SetWindowLongPtr, чтобы установить свой собственный. В вашей функции окна вы проверяете сообщение, которое хотите изменить, и вызывайте функцию окна приложения с измененными значениями. В случае любого другого сообщения вам нужно будет позвонить прямо. Используйте CallWindowProc, чтобы вызвать функцию окна, потому что функция окон по умолчанию не является указателем.

Другим способом было бы использовать функцию крюка CallWndProc. Вызовите SetWindowsHookEx с WH_CALLWNDPROC, чтобы установить его. Однако не пробовал это, но вам не нужно будет находиться в пространстве процесса, IIRC.

0

Нет, все не так просто. Предупреждение о MSDN page for SetWindowSubclass прямо говорит:

Предупреждения Вы не можете использовать подклассы вспомогательных функций для подкласса окна на резьбе

This article outlines the process для внедрения кода в другой процесс, но подвести итог, вы в основном необходимо:

  1. Использование CreateRemoteThread и LoadLibrary или
  2. Настройка ключа реестра AppInit_DLLs соответствующего

После того, как вы получили код работает в удаленном процессе, вы можете использовать SetWindowLongPtr подкласс окна, а затем использовать регулярные IPC методов (именованные каналы и т.д.), чтобы общаться с ваш процесс (при необходимости).

Смежные вопросы