Реализация оконных хуков с использованием NativeWindow правильно - PullRequest
0 голосов
/ 21 декабря 2009

У меня нет большого фона C ++, но я успешно зацепил окно и преобразовал его сообщения в вызываемые события, которые моё приложение может использовать, я начал с наследования от NativeWindow и переопределения WndProc и определил сообщения, которые мне интересны, WM_VSCROLL и WM_HSCROLL, например.

Во-первых, существуют ли полные реализации, которые вызывают все обычные события, такие как нажатие клавиши, нажатие клавиши, нажатие клавиши, перемещение мыши, mousedown, vscroll, hscroll, vresize, hresize окна. Я заинтересован в том, чтобы убедиться, что я правильно реализовал класс.

Во-вторых, как правильно регулировать события, создаваемые моим NativeWindow, чтобы ограничить общительность реализации.

Ответы [ 2 ]

2 голосов
/ 22 декабря 2009

Я предполагаю, что вы говорите о подключении окна в другом приложении. Это нетривиальная проблема, аргументы wparam и lparam могут содержать указатели вместо простых значений. Однако эти указатели действительны только в виртуальной памяти того процесса, окно которого вы зацепили. Игнорирование этого приведет к исключению AccessViolation.

Вы должны P / Invoke ReadProcessMemory (), чтобы прочитать указанную структуру. Это должно быть сделано для каждого отдельного сообщения, вы не можете рассчитывать на общую реализацию. Это может быть довольно проблематично, когда вы подключаете нетривиальное окно, такое как ListView или TreeView.

1 голос
/ 22 декабря 2009

Большинство программ, которые делают это, используют DLL-инъекцию для обработки событий внутри процесса, которому принадлежит окно. Конечно, вы не должны внедрять управляемый код в другой процесс, только собственный код, который очень осторожен, чтобы не испортить состояние приложения.

Чего ты пытаешься достичь? Подключение последних окон к приложениям должно быть последним средством.

...