gpt4 book ai didi

c# - 在 .NET 中捕获消息

转载 作者:行者123 更新时间:2023-11-30 22:45:44 29 4
gpt4 key购买 nike

我如何捕获由某个窗口(在我的例子中是 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 消息已发送,我正试图找出它像这样)。

最佳答案

您的代码是否已被访问?我猜你已经从 NativeWindow 继承,但还没有让你的实际窗口从你的 VLCFilter 类继承。这实际上将是一件非常困难的事情,因为您可能必须重写 System.Windows.Forms.Form...(我猜那里有继承,但老实说不确定框架中的内部结构。)

也许您应该从 Form 继承,然后让您的表单从新类而不是 Form 继承?

关于c# - 在 .NET 中捕获消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2919933/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com