C#如何从另一个进程中读取声音?

3
我目前正在开发一款与C#中的益智游戏直接交互的应用程序。它可以通过屏幕抓取游戏状态来进行游戏,并解决下一步该怎么走的问题。
该应用程序通过搜索进程并获取其矩形来获取游戏的宽度和高度,如下所示。
var p = Process.GetProcessesByName("game")[0];
var r = new User32.Rect();

// Bring the window to the foreground in order to get its coordinates.
User32.SetForegroundWindow(p.MainWindowHandle);
User32.GetWindowRect(p.MainWindowHandle, ref r);

// Get the width and height of the window.
int width = r.right - r.left;
int height = r.bottom - r.top;

我在想的是,是否有可能识别出同一进程是否正在输出声音,并且如果有声音输出,则以某种方式识别该声音。声音用于表示多种事件,因此如果我能够直接从进程中获取声音,我可以改善应用程序处理一些游戏场景的方式。
我已经了解到可以利用特定声卡上的“听到的声音”输入,但这意味着完全独立的应用程序播放声音时会产生干扰,对吗?我真的希望有一个针对进程的特定解决方案。
感谢您的帮助。
1个回答

1

你可能能够通过 DLL注入 完成这个任务。一种方法是以调试器的方式附加,拦截对Windows音频函数的调用,并执行需要做的操作。

Microsoft Research有一种高级的拦截任何API的方法:Windows Detours。我没有使用过它,但看起来相当强大。你可以在这里下载该API。请注意,将此API用于商业软件需要支付一次性10,000美元的费用。


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