Как я могу перехватить системное сообщение Windows (например, WM_SETTEXT), которое было отправлено некоторым окном (окно проигрывателя VLC в моем случае)? Я пытался унаследовать класс NativeWindow и переопределить WndProc следующим образом:
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!");
}
}
}
Я проверил в Microsoft Spy ++, что сообщение WM_SETTEXT отправляется проигрывателем VLC, но мой код, похоже, не выполняет работу. Я ссылался в основном на:
http://www.codeproject.com/kb/dotnet/devicevolumemonitor.aspx
Я пытаюсь заставить это работать какое-то время безуспешно. Что я делаю неправильно? Что я не делаю? Может быть, есть более простой способ сделать это?
Моя первоначальная цель - поймать, когда проигрыватель VLC (который может играть где-то в фоновом режиме и не вставляется в мое приложение) повторяет свое воспроизведение (заметил, что сообщение WM_SETTEXT отправляется тогда, и я пытаюсь его выяснить как это).