如何捕获某个窗口(在我的情况下为 VLC 播放器窗口)发送的 Windows 系统消息(如 WM_SETTEXT)?我试图继承 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 消息随后发送,我正试图像这样找出它) .