Получать сообщения другого окна
Что я пытаюсь сделать: получать сообщения другого окна процесса (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.