title: Trapping messages in .NET
body: <p>How can i trap a Windows system message (like WM_SETTEXT) that was sent by some window (VLC player window in my case)? I've tried to inherit NativeWindow class and override WndProc like this:</p>
  
  <pre><code>class VLCFilter : NativeWindow
  {
      System.IntPtr iHandle;
      const int WM_SETTEXT = 0x000C;
  
      public VLCFilter()
      {
          Process p = Process.GetProcessesByName("vlc")[0];
          iHandle = p.MainWindowHandle;
      }
  
      protected override void WndProc(ref Message aMessage)
      {
          base.WndProc(ref aMessage);
  
          if (aMessage.HWnd != iHandle)
          return false;
  
          if (aMessage.Msg == WM_SETTEXT)
          {
              MessageBox.Show("VLC window text changed!");
          }
      }
  }
  </code></pre>
  
  <p>I have checked with Microsoft Spy++ that WM_SETTEXT message is sent by VLC player but my code doesn't seem to get the work done. I've refered mainly to:
  <a href="http://www.codeproject.com/kb/dotnet/devicevolumemonitor.aspx" rel="nofollow noreferrer">http://www.codeproject.com/kb/dotnet/devicevolumemonitor.aspx</a></p>
  
  <p>I'm trying to make this work for some time with no success. What am I doing wrong? What I am not doing? Maybe there is easier way to do this?</p>
  
  <p>My initial goal is to catch when VLC player (that could be playing somewhere in the background and is not emmbed in my application) repeats its playback (have noticed that WM_SETTEXT message is sent then and I'm trying to find it out like this).</p>