Подкласс управления другого приложения? - PullRequest
1 голос
/ 28 июня 2010

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

Спасибо

Ответы [ 2 ]

0 голосов
/ 28 июня 2010

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

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

0 голосов
/ 28 июня 2010

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

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

В этой статье описывается процесс для внедрения кода в другой процесс, но для подведения итогов вам в основном необходимо:

  1. Использовать CreateRemoteThread и LoadLibrary,или
  2. Установите соответствующий раздел реестра AppInit_DLLs

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...