I am writing a C # application that should intercept Windows Messages sent by other applications. The company that wrote the application I'm tracking sent me some kind of code example, however it is in C ++, which I really don't know.
In C ++ code code, I have the following code:
UINT uMsg = RegisterWindowMessage(SHOCK_MESSAGE_BROADCAST); ON_REGISTERED_MESSAGE(WM_SHOCK_BROADCAST_MESSAGE, OnShockStatusMessage) LRESULT OnShockStatusMessage(WPARAM wParam, LPARAM lParam);
As I understand it, this retrieves the Id from Windows for the specific message that we want to listen to. Then we ask C ++ to call OnShockStatusMessage when the message matching the identifier is intercepted.
After a little research, I put together the following in C #
[DllImport("user32.dll", SetLastError = true)] public static extern IntPtr FindWindow(string lpClassName, string lpWindowName); [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)] static extern uint RegisterWindowMessage(string lpString); private IntPtr _hWnd;
As I understand it, this should do the same basic thing in which it:
- Finds the application I want to track
- Logs window messages I want to intercept
- Clock for all window messages - then deletes the ones I need.
However, in my redefinition of the WndProc () method, none of my checks intercept any specific messages or any message from the application that I control.
If I Debug.WriteLine for all messages that go through it, I see that it tracks them. However, it never filters out the messages I want.
By running an example monitoring application written in C ++, I see that Window messages are being sent and collected - it's just that my C # implementation does not do the same.
Peter Bridger
source share