Получать сообщения другого окна

Что я пытаюсь сделать: получать сообщения другого окна процесса (Spy++).

Например: я открыл новое окно блокнота:

И затем я переместил мышь над окном блокнота, окна отправят это сообщение в окно блокнота (или в дочернее окно главного окна):

WM_MOUSEMOVE xPos=100,yPos=200

Я хочу получить это сообщение именно тогда, когда происходит событие мыши (по событию или циклу while) (возможно, при выполнении цикла с Application.doEvents() а также Threading.Thread.Sleep(1)).

Что я пробовал:

  • создавать сообщения слушателя по ManagedSpyLib (если вы импортируете эту библиотеку, вы не сможете скомпилировать свой проект... и если вам удастся импортировать эту библиотеку, она не создана для этой миссии)
  • Я также искал об этом, и это наиболее релевантный результат: http://www.codeproject.com/Articles/3923/InterSpy-An-integrated-Windows-message-trace-and-f но это проект C++, и я пытаюсь сделать это в C# или VB.NET.

Хороший пример лучше объяснения для меня.:)

2 ответа

Решение

Крючки, которые вам нужны для этого WH_CALLWNDPROC а также WH_GETMESSAGE, И это требует внедрения DLL. Вы не можете внедрить управляемый код, поэтому вам нужно будет использовать неуправляемый код для перехвата. Затем вы можете заставить вашу неуправляемую внедренную библиотеку DLL связаться с вашим приложением C#, но вам придется признать свое поражение в попытках написать код перехвата в C#.

Вам нужно посмотреть на КРЮК. Вот как работает SPY ​​++. Тем не менее, .Net не очень подходит для этого, потому что вы должны использовать множество функций WIN32 API.

Другие вопросы по тегам