I'm currently developing an application that interacts directly with a puzzle game in C#. It's able to play by screen scraping the state of the game and then solving for the next move it should make.
The application grabs the width and height of the game by searching out the process and grabbing its rectangle, as below.
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;
What I was wondering is whether it was possible to recognize whether that same process is outputting sound or not and then somehow identify that sound if it is. Sound is used to signify several events, so if I was able to grab sound from the process directly, I could improve the way my application handles a handful of in-game scenarios.
I've read about being able to tap into a "what you hear" input on particular sound cards, but that would mean if a completely independent application played sound, it would interfere, right? I'm really hoping there's a solution that's process-specific.
Thanks in advance for your help.
You might be able to do this via DLL injection. One method would be to attach as a debugger, intercept calls to the Windows sound functions, and do what you need to do instead.
Microsoft Research has an advanced way of intercepting any API: Windows Detours. I have no experience with it, but it looks pretty powerful. You can download the API here. Note that it's costs a one-time $10,000 fee to use this API in commercial software.
精彩评论