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

时间:2010-10-21 04:26:10

标签: c# audio

我目前正在开发一个与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 个答案:

答案 0 :(得分:1)

您可以通过DLL injection执行此操作。一种方法是作为调试器附加,拦截对Windows声音函数的调用,并做你需要做的事情。

Microsoft Research有一种拦截任何API的高级方法:Windows Detours。我没有经验,但它看起来非常强大。您可以下载API here。请注意,在商业软件中使用此API需要花费一次性10,000美元的费用。