答案 0 :(得分:2)
这些不起作用吗?
wmp.getProperty("settings").toDispatch().setProperty("mute", 1);
wmp.getProperty("controls").toDispatch().invoke("pause");
(对于错误的代码道歉;我之前从未使用过雅各布)
在这种情况下,请创建/ find任意窗口,然后send创建APPCOMMAND_MEDIA_PLAY_PAUSE
。默认消息处理将使其影响WMP。 (发送静音不好,因为这会使整个系统静音。)
为了便于移植,我建议创建一个C ++命令行实用程序或使用JNI,但NativeCall现在可能就足够了。
您的代码看起来不错,但我认为您只需要将参数更改为SendMessage。尝试:
final int WM_APPCOMMAND = 0x0319;
int playResult = sendMessage.executeCall(new Object[] {
wmpHandle,
WM_APPCOMMAND,
wmpHandle,
APPCOMMAND_MEDIA_PLAY << 16});
APPCOMMAND_MEDIA_PLAY
需要XP SP1,但我假设你已经部署了它。
答案 1 :(得分:1)
当您将wmpSettings实例化为新的时,它看起来像 在ActiveXComponent中,Jacob实际上做了一些有趣的事情,将组件包装在新的媒体播放器对象中,而不是检索你要求的设置属性。
您是否尝试过简单:
Dispatch wmpSettings = wmp.getProperty("settings").toDispatch();
wmpSettings.setProperty("volume", 0);
我也回过头来阅读让你使用雅各布的原始问题,我可以提出一个不同的方法,以防止你把车轮转动太长时间。
我设置了一个Web应用程序,该应用程序与当前登录到Web应用程序服务器的特定用户桌面上的winamp运行的shoutcast服务器进行交互。我无法使用COM在Web应用程序的上下文中直接与用户的winamp实例进行通信,因此我设置了一个简单的C#TCP / IP winamp桥应用程序,该应用程序在shoutcast用户的桌面上运行并允许Web应用程序创建来自localhost的套接字连接。
对于WMP我确定你可以找到一些C#包装器,如WmpRemote.zip的代码,如果你在http://d.hatena.ne.jp/punidama/20080227进行文本搜索,你可以找到它。
如果您需要任何具体示例来设置此信息,请与我们联系。