如何使用C#监听Windows事件?

6
我正在开发一个与歌词相关的应用程序,需要监听Windows Media Player(WMP)事件。我在“可访问事件监视器”中观察了Windows事件,并发现每当WMP状态或当前位置更改时,都会发送某些事件。我在MSDN上找到了这篇文章《如何在Visual C# .NET中设置Windows hook》,但我无法使其工作。
请问我如何从我的C#应用程序中监听这些事件,或者有没有其他方法建议获取当前歌曲和WMP播放状态?
谢谢!
2个回答

3
本文介绍如何使用AxWindowsMediaPlayer获取事件,它是Windows Media Player系统的基础根源。您将会发现各种状态改变事件可以被正常捕获。

http://msdn.microsoft.com/en-us/library/windows/desktop/dd562388(v=vs.85).aspx

你应该能够从Windows运行对象表中获取一个正在运行的实例吗?

http://www.darinhiggins.com/the-running-instance-of-windows-media-player/

编辑:

这是另一种方法...

http://www.darinhiggins.com/gaining-access-to-a-running-instance-of-windows-media-player-in-vb-net/


感谢Visual Micro,我相信这将在表单上创建一个新的WMP控件实例,但我需要访问Windows自己的WMP而不是创建一个新的。 - Reza Ahmadi
有没有办法从ActiveX访问系统的主WMP实例? - Reza Ahmadi
我已经查看了你发送的链接。我之前不熟悉ROT,但它正是我想要的。但是它不能与Windows Media Player一起使用。我在WMP的progId上遇到了麻烦。我已经测试了GetActiveObjects(System.Runtime.InteropServices.Marshal.GetActiveObject)与其他一些应用程序,如Word2010,并且它可以使用这个progId 'Word.Application'。那么我该如何获取Windows Media Player的progId呢? - Reza Ahmadi
那听起来有点麻烦。我看到了一些可能性,但是在上面的答案中加入了一些有趣的东西。我希望 :) - Visual Micro
谢谢。我已经稍微检查了一下。我认为那就是解决方案 :) - Reza Ahmadi

0

1
我查看了您建议的文章,但它们只适用于在Windows表单上使用WMP控件时,而我需要获取用户在Windows自己的WMP中播放的歌曲的当前媒体和状态。 - Reza Ahmadi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接